发布网友 发布时间:2022-06-10 20:28
共2个回答
热心网友 时间:2022-07-07 23:41
#include<iostream>
using namespace std;
void main()
{
int i=0,j=0,k,n,sum=0;
cout<<"输入未知数个数:";
cin>>n;
double **a=new double*[n+1];
for(i=0;i<=n;i++)
{
a[i]=new double[n+1];
}
double *b=new double[n+1];
cout<<"输入线性方程的系数矩的每一行和等号右侧结果:"<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
cin>>a[i][j];
}
cin>>b[i];
}
k=1;
while(1)
{
for(i=k+1;i<=n;i++)
{
a[i][k]=a[i][k]/a[k][k];
}
for(i=k+1;i<=n;i++)
{
for(j=k+1;j<=n;j++)
{
a[i][j]=a[i][j]-a[i][k]*a[k][j];
}
b[i]=b[i]-a[i][k]*b[k];
}
if(k!=(n-1))k++;
else break;
}
b[n]=b[n]/a[n][n];
for(i=n-1;i>=1;i--)
{
for(j=i+1;j<=n;j++)
{
b[i]-=a[i][j]*b[j];
}
b[i]=(1/a[i][i])*b[i];
sum=0;
}
for(i=1;i<=n;i++)
{
cout<<"x"<<i<<" = "<<b[i]<<endl;
}
for(i=0;i<=n;i++)
{
delete []a[i];
}
delete []a;
delete []b;
}
如果你要计算方程组:
2x1-x2+3x3=1
4x1+2x2+5x3=4
x1+2x2+0x3=7
追问我们是要做结业答辩 老师要求每行都的解释什么意思 干嘛用的 哥哥 谢啦 给标注下每行的意思呗追答/**************************************************************
**此程序运用高斯消元法:
**(1)按消元规则进行运算后,对角线以下元素为0,故运算中对角线以
**下的元素不作计算。
**(2)对角线下的元素回代无影响,将乘数放在该处。
**既 a[i][k]=a[i][k]/a[k][k],i=k+1,k+2,...,n;
**(3)对角线以上的元素和常数项采用“原地”工作方式,既经变换后
**的元素仍放在原来的位置上 a[i][j]=a[i][j]-a[i][k]*a[k][j];
**b[i]=b[i]-a[i][k]*b[k];
**i,j=k+1,k+2,...,n;
** 目的是为了节省存储单元
**(4)回代后的值仍放在常数项存储单元
**b[n]=b[n]/a[n][n];
**b[i]-=a[i][j]*b[j];
**b[i]=(1/a[i][i])*b[i];
** 这样,数组b中单元存放的就是未知数的解。
****************************************************************/
参考资料:http://hi.baidu.com/ecrazy/blog/item/3a1991536121017a84352444.html
热心网友 时间:2022-07-07 23:42
维线性方程组求解程序; 问题补充:主要是编译个C程序 线性方程组,总到数组,简单的可以用消元法求解! 可以参考《算法导论》里的解线性方程组