📄 main.cpp
字号:
#include<stdio.h>
#include"iostream.h"
#include "math.h"
#include<windows.h>
void readcoe(double **coe,double *res,int m,int n)
{
int k=m*n+m;
int p=0;
FILE *fp;
double a[10];
int i=0;
char ch;
if((fp=fopen("coe.txt","r+"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
while((!feof(fp))&&(p<k))
{
ch=fgetc(fp);
if((ch!=32)&&(ch!=10)&&(!feof(fp)))
{
a[i]=ch-48;
i++;
}
else
{
if(a[0]!=-3)
{
if(p<m*n)
{
int n1=p%n;
int m1=(p-n1)/n;
for(int j=0;j<i;j++)
coe[m1][n1]=a[j]*pow(10,i-j-1)+coe[m1][n1];
i=0;
p++;
}
else
{
for(int j=0;j<i;j++)
res[p-m*n]=res[p-m*n]+a[j]*pow(10,i-j-1);
i=0;
p++;
}
}
else
{
if(p<m*n)
{
int n1=p%n;
int m1=(p-n1)/n;
for(int j=1;j<i;j++)
coe[m1][n1]=a[j]*pow(10,i-j-1)+coe[m1][n1];
coe[m1][n1]=0-coe[m1][n1];
i=0;
p++;
}
else
{
for(int j=1;j<i;j++)
res[p-m*n]=res[p-m*n]+a[j]*pow(10,i-j-1);
res[p-m*n]=0-res[p-m*n];
i=0;
p++;
}
}
}
}
fclose(fp);
}
void init(double**coe,double *res,double *x,int m,int n)
{
for(int i=0;i<m;i++)
res[i]=0;
for(i=0;i<m;i++)
for(int j=0;j<n;j++)
coe[i][j]=0;
for(i=0;i<n;i++)
x[i]=0;
}
void guess(double**coe,double *res,double *x,int m,int n)
{
double *x2=new double[n];
double max;
double count=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(i!=j)
coe[i][j]=-coe[i][j]/coe[i][i];
}
res[i]=res[i]/coe[i][i];
coe[i][i]=0;
}
do
{
count++;
for(i=0;i<n;i++)
x2[i]=x[i];
for(i=0;i<m;i++)
{
double s=res[i];
for(int j=0;j<n;j++)
s=s+coe[i][j]*x[j];
x[i]=s;
}
max=fabs(x[0]-x2[0]);
for(i=1;i<n;i++)
if(max<fabs(x[i]-x2[i]))
max=fabs(x[i]-x2[i]);
}while(max>0.0000001);
cout<<endl<<"根为:"<<endl;
for(i=0;i<m;i++)
cout<<"x["<<i+1<<"]="<<x[i]<<" ";
cout<<"count="<<count<<endl;
}
void sor(double**coe,double *res,double *x,int m,int n)
{
double *x2=new double[n];
double max;
int count=0;
double w=0.02;
while(w<2)
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(i!=j)
coe[i][j]=-coe[i][j]/coe[i][i];
}
res[i]=res[i]/coe[i][i];
coe[i][i]=0;
}
do
{
count++;
for(i=0;i<n;i++)
x2[i]=x[i];
for(i=0;i<m;i++)
{
double s=res[i];
for(int j=0;j<n;j++)
s=s+coe[i][j]*x[j];
x[i]=w*s+(1-w)*x2[i];
}
max=fabs(x[0]-x2[0]);
for(i=1;i<n;i++)
if(max<fabs(x[i]-x2[i]))
max=fabs(x[i]-x2[i]);
}while(max>0.0000001);
cout<<"w="<<w<<" count="<<count<<endl;
w=w+0.02;
}
cout<<endl<<"根为:"<<endl;
for(int i=0;i<m;i++)
cout<<"x["<<i+1<<"]="<<x[i]<<" ";
}
void main()
{
int n,m;
cout<<"输入方程组的阶数:";
cin>>n;
cout<<"输入方程组方程个数:";
cin>>m;
if(n!=m)
{
cout<<"ERROR"<<endl;
exit(0);
}
double *x=new double[n];
double *res=new double[m];
double **coe=new double*[m];
for(int i=0;i<m;i++)
coe[i]=new double[n];
init(coe,res,x,m,n);
readcoe(coe,res,m,n);
guess(coe,res,x,m,n);
// sor(coe,res,x,m,n);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -