-x1+10x2-2x3=8.3
-x1-x2+5x3=4.3
这是个方程组,大括号我不知道怎么打
谢谢啦!
4 个解决方案
#1
作业?
#2
使用堆栈的adt模型
把方程组分为两部分
一部分为数值
另一部分为符号
对符号的优先级进行比较
用以波兰表达式把数据存入堆栈
运算的时候再作出栈处理
把方程组分为两部分
一部分为数值
另一部分为符号
对符号的优先级进行比较
用以波兰表达式把数据存入堆栈
运算的时候再作出栈处理
#3
把你所要的两种方法写在一起了.我申请了的空间没释放,这里你注意一下就好了.释放的事情就交给你来做了.
#include <iostream>
#include <cmath>
using namespace std;
int a,b,m;
double *x0;
void Jacobi(double **c,double *d,int n,double eps);
void Gauss(double **c,double *d,int n,double eps);
void main()
{
int n;
double **A,*B;
double e;
cout<<"请选择求方程组的迭代方法!雅可比选0,高斯-赛德尔选1!"<<endl;
cin>>n;
cout<<"输入方程组的变量的个数以及方程的个数!"<<endl;
cin>>a>>b;
A=new double*[b];
for(int i=0;i<b;i++)
{
A[i]=new double[a];
}
B=new double[b];
x0=new double[a];
cout<<"输入每个方程组的变量的系数以及方程右端的值!"<<endl;
for(int k=0;k<b;k++)
{
for(int j=0;j<a;j++)
{
cin>>A[k][j];
cout<<"A["<<k<<j<<"]="<<A[k][j]<<endl;
}
cin>>B[k];
cout<<"B["<<k<<"]="<<B[k]<<endl;
}
cout<<"输入方程组迭代的次数及所要求的精度!"<<endl;
cin>>m>>e;
cout<<"输入方程组迭代的初值!"<<endl;
for(int j=0;j<a;j++)
{
cin>>x0[j];
}
switch (n)
{
case 0:Jacobi(A,B,m,e);
break;
case 1:Gauss(A,B,m,e);
break;
default:cout<<"你没有选择求解方程组的一种方法!!"<<endl;
break;
}
}
void Jacobi(double **c,double *d,int n,double eps)
{
int k,i;
double *y = new double[a],*x=new double[a],s,temp=0.0;
k=1;
while(1)
{
temp = 0.0;
for(i=0;i<a;i++)
{
s=0.0;
for(int j=0;j<a;j++)
{
if(j!=i)
{
s+=c[i][j]*x0[j];
}
}
s=(d[i]-s)/c[i][i];
y[i]=s;
if(fabs(x0[i]-s)>temp)
{
temp=fabs(x0[i]-s);
}
}
if(temp<eps)
{
cout<<"迭代成功!迭代结果为:"<<endl;
for(i=0;i<a;i++)
{
cout<<"y["<<i<<"] ="<<y[i]<<endl;
}
break;
}
if(k==m)
{
cout<<"迭代失败!!"<<endl;
break;
}
k+=1;
for(i=0;i<a;i++)
{
x0[i]=y[i];
}
}
}
void Gauss(double **c,double *d,int n,double eps)
{
int k,i;
double *y=new double[a],*x=new double[a],s,temp=0.0;
for(i=0;i<a;i++)
{
x[i]=x0[i];
y[i]=x[i];
}
k=1;
while(1)
{
temp=0.0;
for(i=0;i<a;i++)
{
s=0.0;
for(int j=0;j<a;j++)
{
if(j!=i)
{
s+=c[i][j]*y[j];
}
}
s=(d[i]-s)/c[i][i];
y[i]=s;
if(fabs(x[i]-s)>temp)
{
temp=fabs(x[i]-s);
}
}
if(temp<eps)
{
cout<<"迭代成功!迭代结果为:"<<endl;
for(i=0;i<a;i++)
{
cout<<"y["<<i<<"] ="<<y[i]<<endl;
}
break;
}
if(k==m)
{
cout<<"迭代失败!!"<<endl;
break;
}
k+=1;
for(i=0;i<a;i++)
{
x[i]=y[i];
}
}
}
#include <iostream>
#include <cmath>
using namespace std;
int a,b,m;
double *x0;
void Jacobi(double **c,double *d,int n,double eps);
void Gauss(double **c,double *d,int n,double eps);
void main()
{
int n;
double **A,*B;
double e;
cout<<"请选择求方程组的迭代方法!雅可比选0,高斯-赛德尔选1!"<<endl;
cin>>n;
cout<<"输入方程组的变量的个数以及方程的个数!"<<endl;
cin>>a>>b;
A=new double*[b];
for(int i=0;i<b;i++)
{
A[i]=new double[a];
}
B=new double[b];
x0=new double[a];
cout<<"输入每个方程组的变量的系数以及方程右端的值!"<<endl;
for(int k=0;k<b;k++)
{
for(int j=0;j<a;j++)
{
cin>>A[k][j];
cout<<"A["<<k<<j<<"]="<<A[k][j]<<endl;
}
cin>>B[k];
cout<<"B["<<k<<"]="<<B[k]<<endl;
}
cout<<"输入方程组迭代的次数及所要求的精度!"<<endl;
cin>>m>>e;
cout<<"输入方程组迭代的初值!"<<endl;
for(int j=0;j<a;j++)
{
cin>>x0[j];
}
switch (n)
{
case 0:Jacobi(A,B,m,e);
break;
case 1:Gauss(A,B,m,e);
break;
default:cout<<"你没有选择求解方程组的一种方法!!"<<endl;
break;
}
}
void Jacobi(double **c,double *d,int n,double eps)
{
int k,i;
double *y = new double[a],*x=new double[a],s,temp=0.0;
k=1;
while(1)
{
temp = 0.0;
for(i=0;i<a;i++)
{
s=0.0;
for(int j=0;j<a;j++)
{
if(j!=i)
{
s+=c[i][j]*x0[j];
}
}
s=(d[i]-s)/c[i][i];
y[i]=s;
if(fabs(x0[i]-s)>temp)
{
temp=fabs(x0[i]-s);
}
}
if(temp<eps)
{
cout<<"迭代成功!迭代结果为:"<<endl;
for(i=0;i<a;i++)
{
cout<<"y["<<i<<"] ="<<y[i]<<endl;
}
break;
}
if(k==m)
{
cout<<"迭代失败!!"<<endl;
break;
}
k+=1;
for(i=0;i<a;i++)
{
x0[i]=y[i];
}
}
}
void Gauss(double **c,double *d,int n,double eps)
{
int k,i;
double *y=new double[a],*x=new double[a],s,temp=0.0;
for(i=0;i<a;i++)
{
x[i]=x0[i];
y[i]=x[i];
}
k=1;
while(1)
{
temp=0.0;
for(i=0;i<a;i++)
{
s=0.0;
for(int j=0;j<a;j++)
{
if(j!=i)
{
s+=c[i][j]*y[j];
}
}
s=(d[i]-s)/c[i][i];
y[i]=s;
if(fabs(x[i]-s)>temp)
{
temp=fabs(x[i]-s);
}
}
if(temp<eps)
{
cout<<"迭代成功!迭代结果为:"<<endl;
for(i=0;i<a;i++)
{
cout<<"y["<<i<<"] ="<<y[i]<<endl;
}
break;
}
if(k==m)
{
cout<<"迭代失败!!"<<endl;
break;
}
k+=1;
for(i=0;i<a;i++)
{
x[i]=y[i];
}
}
}
#4
找本《计算方法》的书看看就搞定,东南大学出的一本就很好,书后面的附录里有相关程序
#1
作业?
#2
使用堆栈的adt模型
把方程组分为两部分
一部分为数值
另一部分为符号
对符号的优先级进行比较
用以波兰表达式把数据存入堆栈
运算的时候再作出栈处理
把方程组分为两部分
一部分为数值
另一部分为符号
对符号的优先级进行比较
用以波兰表达式把数据存入堆栈
运算的时候再作出栈处理
#3
把你所要的两种方法写在一起了.我申请了的空间没释放,这里你注意一下就好了.释放的事情就交给你来做了.
#include <iostream>
#include <cmath>
using namespace std;
int a,b,m;
double *x0;
void Jacobi(double **c,double *d,int n,double eps);
void Gauss(double **c,double *d,int n,double eps);
void main()
{
int n;
double **A,*B;
double e;
cout<<"请选择求方程组的迭代方法!雅可比选0,高斯-赛德尔选1!"<<endl;
cin>>n;
cout<<"输入方程组的变量的个数以及方程的个数!"<<endl;
cin>>a>>b;
A=new double*[b];
for(int i=0;i<b;i++)
{
A[i]=new double[a];
}
B=new double[b];
x0=new double[a];
cout<<"输入每个方程组的变量的系数以及方程右端的值!"<<endl;
for(int k=0;k<b;k++)
{
for(int j=0;j<a;j++)
{
cin>>A[k][j];
cout<<"A["<<k<<j<<"]="<<A[k][j]<<endl;
}
cin>>B[k];
cout<<"B["<<k<<"]="<<B[k]<<endl;
}
cout<<"输入方程组迭代的次数及所要求的精度!"<<endl;
cin>>m>>e;
cout<<"输入方程组迭代的初值!"<<endl;
for(int j=0;j<a;j++)
{
cin>>x0[j];
}
switch (n)
{
case 0:Jacobi(A,B,m,e);
break;
case 1:Gauss(A,B,m,e);
break;
default:cout<<"你没有选择求解方程组的一种方法!!"<<endl;
break;
}
}
void Jacobi(double **c,double *d,int n,double eps)
{
int k,i;
double *y = new double[a],*x=new double[a],s,temp=0.0;
k=1;
while(1)
{
temp = 0.0;
for(i=0;i<a;i++)
{
s=0.0;
for(int j=0;j<a;j++)
{
if(j!=i)
{
s+=c[i][j]*x0[j];
}
}
s=(d[i]-s)/c[i][i];
y[i]=s;
if(fabs(x0[i]-s)>temp)
{
temp=fabs(x0[i]-s);
}
}
if(temp<eps)
{
cout<<"迭代成功!迭代结果为:"<<endl;
for(i=0;i<a;i++)
{
cout<<"y["<<i<<"] ="<<y[i]<<endl;
}
break;
}
if(k==m)
{
cout<<"迭代失败!!"<<endl;
break;
}
k+=1;
for(i=0;i<a;i++)
{
x0[i]=y[i];
}
}
}
void Gauss(double **c,double *d,int n,double eps)
{
int k,i;
double *y=new double[a],*x=new double[a],s,temp=0.0;
for(i=0;i<a;i++)
{
x[i]=x0[i];
y[i]=x[i];
}
k=1;
while(1)
{
temp=0.0;
for(i=0;i<a;i++)
{
s=0.0;
for(int j=0;j<a;j++)
{
if(j!=i)
{
s+=c[i][j]*y[j];
}
}
s=(d[i]-s)/c[i][i];
y[i]=s;
if(fabs(x[i]-s)>temp)
{
temp=fabs(x[i]-s);
}
}
if(temp<eps)
{
cout<<"迭代成功!迭代结果为:"<<endl;
for(i=0;i<a;i++)
{
cout<<"y["<<i<<"] ="<<y[i]<<endl;
}
break;
}
if(k==m)
{
cout<<"迭代失败!!"<<endl;
break;
}
k+=1;
for(i=0;i<a;i++)
{
x[i]=y[i];
}
}
}
#include <iostream>
#include <cmath>
using namespace std;
int a,b,m;
double *x0;
void Jacobi(double **c,double *d,int n,double eps);
void Gauss(double **c,double *d,int n,double eps);
void main()
{
int n;
double **A,*B;
double e;
cout<<"请选择求方程组的迭代方法!雅可比选0,高斯-赛德尔选1!"<<endl;
cin>>n;
cout<<"输入方程组的变量的个数以及方程的个数!"<<endl;
cin>>a>>b;
A=new double*[b];
for(int i=0;i<b;i++)
{
A[i]=new double[a];
}
B=new double[b];
x0=new double[a];
cout<<"输入每个方程组的变量的系数以及方程右端的值!"<<endl;
for(int k=0;k<b;k++)
{
for(int j=0;j<a;j++)
{
cin>>A[k][j];
cout<<"A["<<k<<j<<"]="<<A[k][j]<<endl;
}
cin>>B[k];
cout<<"B["<<k<<"]="<<B[k]<<endl;
}
cout<<"输入方程组迭代的次数及所要求的精度!"<<endl;
cin>>m>>e;
cout<<"输入方程组迭代的初值!"<<endl;
for(int j=0;j<a;j++)
{
cin>>x0[j];
}
switch (n)
{
case 0:Jacobi(A,B,m,e);
break;
case 1:Gauss(A,B,m,e);
break;
default:cout<<"你没有选择求解方程组的一种方法!!"<<endl;
break;
}
}
void Jacobi(double **c,double *d,int n,double eps)
{
int k,i;
double *y = new double[a],*x=new double[a],s,temp=0.0;
k=1;
while(1)
{
temp = 0.0;
for(i=0;i<a;i++)
{
s=0.0;
for(int j=0;j<a;j++)
{
if(j!=i)
{
s+=c[i][j]*x0[j];
}
}
s=(d[i]-s)/c[i][i];
y[i]=s;
if(fabs(x0[i]-s)>temp)
{
temp=fabs(x0[i]-s);
}
}
if(temp<eps)
{
cout<<"迭代成功!迭代结果为:"<<endl;
for(i=0;i<a;i++)
{
cout<<"y["<<i<<"] ="<<y[i]<<endl;
}
break;
}
if(k==m)
{
cout<<"迭代失败!!"<<endl;
break;
}
k+=1;
for(i=0;i<a;i++)
{
x0[i]=y[i];
}
}
}
void Gauss(double **c,double *d,int n,double eps)
{
int k,i;
double *y=new double[a],*x=new double[a],s,temp=0.0;
for(i=0;i<a;i++)
{
x[i]=x0[i];
y[i]=x[i];
}
k=1;
while(1)
{
temp=0.0;
for(i=0;i<a;i++)
{
s=0.0;
for(int j=0;j<a;j++)
{
if(j!=i)
{
s+=c[i][j]*y[j];
}
}
s=(d[i]-s)/c[i][i];
y[i]=s;
if(fabs(x[i]-s)>temp)
{
temp=fabs(x[i]-s);
}
}
if(temp<eps)
{
cout<<"迭代成功!迭代结果为:"<<endl;
for(i=0;i<a;i++)
{
cout<<"y["<<i<<"] ="<<y[i]<<endl;
}
break;
}
if(k==m)
{
cout<<"迭代失败!!"<<endl;
break;
}
k+=1;
for(i=0;i<a;i++)
{
x[i]=y[i];
}
}
}
#4
找本《计算方法》的书看看就搞定,东南大学出的一本就很好,书后面的附录里有相关程序