求一道五元方程用C#或C++解答 200

A*8+B*2+C*3+D*3+E*3=72.80 A*1+B*2*C*2+D*2*E*10=58.40 A*0.2+B*2.7+C*0.3+D*0.3*E*0.2=26.00 A*0.2+B*0.3+C*3+D*0.3+E*0.2=14.90 A*0.1+B*0.2+C*0.2+D*2+E*0.1=20.60 求解A、B、C、D、E。 - - - - - 如果用matlab解答: 原式为 T*X=b; ... 展开
还不是很完善,我需要能编译的。关键时候有注释的。
发布于2009-04-05 10:04 最佳答案
A/j++)
x[i]-=A[i*n+j]*x[j], 0, 2,double*.1};x[i]/, 0,double*);; /A[k*n+k], 0,n=5.3;n, 2, 10;*高斯迭代法求解 Ax=b */
gauss_solve(n;
b[k]=b[r];
for (i=k+1, 0;
void gauss_solve(int,j;i<.2, 0;
for (k=0;
A[k*n+i]=A[r*n+i];
}
}

for (i=n-1, \,r;n-1, 14, 2;=A[i*n+i].3;
double A[25]={ 8;j<
A[r*n+i]=max, 0.8;i<
#include <
}

void gauss_solve(int n;
{
max=A[k*n+i];stdio;);
b[i]-=A[i*n+k]*b[k]/n;n-1, 2, 26;k++)
{
max=fabs(A[k*n+k]), 3,x[i]).3;
0.h>
0;n"n;=0;cls".1.2.9;

system("i++)
printf("
double max;i>
getch();r */.h>.7lf\A[k*n+k];i<,i,\j<, 58;
}
for (i=k+1;fabs(A[i*n+i]))
{
max=fabs(A[i*n+i]).4,k, 0, 3;
0;
double b[5]={72;i<,x;
#include <.2,double*.2.2;
}
max=b[k];
r=k;i++)
{
for (j=k+1, 20, 3;
b[r]=max;k<!=k)
{
for (i=0;conio;-->,double *b)
{
int i, 3, 0;
r=i;*换行k<,x[5],\*找绝对值最大的元素*/i++) /
#include <,b),double *A;x[%d]=%;
1;j++)
A[i*n+j]-=A[i*n+k]*A[k*n+j]/.h>,double *x;math.3, 2, 2.7,x[i]=b[i].2;i++)
if (max<, \,i--)
for (j=i+1.6};
}
if (r, 0;n;
for (i=0;
main()
{
int i;n

其他回答

这个线性方程组可以用,矩阵求逆,再相乘来解决吧。我有段代码: bool _stdcall InverseMatrix(double a[], int n=dim) //求任意阶矩阵逆矩阵的函数 { //采用高斯-约旦法 int *is,*js,i,j,k,l,u,v; double d,p; is=new int[n]; js=new int[n]; //第一步 全选主元 for (k=0; k<=n-1; k++) { d=0.0; for (i=k; i<=n-1; i++) for (j=k; j<=n-1; j++) { l=i*n+j; p=fabs(a[l]); if (p>d) //从第 k 行、第 k 列开始的右下角子阵中选取绝对值最大的元素并记住次元素所在的行号和列号 { d=p; is[k]=i;//记录行号 js[k]=j;//记录列号 } } if (d+1.0==1.0) { delete []is; delete []js; for(i=0;i<n;i++) a[i]=0.0; return false; } //通过行交换和列交换将它交换到主元素位置上 if (is[k]!=k) for (j=0; j<=n-1; j++) { u=k*n+j; v=is[k]*n+j; p=a[u]; a[u]=a[v]; a[v]=p; //行交换 } if (js[k]!=k) for (i=0; i<=n-1; i++) { u=i*n+k; v=i*n+js[k]; p=a[u]; a[u]=a[v]; a[v]=p; //列交换 } l=k*n+k; a[l]=1.0/a[l]; for (j=0; j<=n-1; j++) if (j!=k) { u=k*n+j; a[u]=a[u]*a[l]... 展开
dao_er | 发布于2009-04-06 18:45
评论
/*高斯迭代法求解 Ax=b */ #include <stdio.h> #include <conio.h> #include <math.h> main() { int i,n=5; double A[25]={ 8, 2, 3, 3, 3, \ 1, 2, 2, 2, 10, \ 0.2, 2.7, 0.3, 0.3, 0.2,\ 0.2, 0.3, 3, 0.3, 0.2,\ 0.1, 0.2, 0.2, 2, 0.1}; double b[5]={72.8, 58.4, 26, 14.9, 20.6},x[5]; void gauss_solve(int,double*,double*,double*); system("cls"); gauss_solve(n,A,x,b); for (i=0;i<n;i++) printf("x[%d]=%.7lf\n",i,x[i]); getch(); } void gauss_solve(int n,double *A,double *x,double *b) { int i,j,k,r; double max; for (k=0;k<n-1;k++) { max=fabs(A[k*n+k]); r=k; for (i=k+1;i<n-1;i++) if (max<fabs(A[i*n+i])) { max=fabs(A[i*n+i]); r=i; } if (r!=k) { for (i=0;i<n;i++) /*换行k<-->r */ { max=A[k*n+i]; A[k*n+i]=A[r*n+i]; A[r*n+i]=max; } max=b[k]; b[k]=b[r]; b[r]=max; } for (i=k+1;i<n;i++) { for (j=k+1;j<n;j++) A[i*n+j]-=A[i*n+k]*A[k*n+j]/A[k*n+k]; b[i]-=A[i*n+k]*b[k]/A[k*n+k]; } } for (i=n-1;i>=0;x[i]/=... 展开
和风一人 | 发布于2009-04-05 12:25
评论
/*高斯迭代法求解 Ax=b */ #include <stdio.h> #include <conio.h> #include <math.h> main() { int i,n=5; double A[25]={ 8, 2, 3, 3, 3, \ 1, 2, 2, 2, 10, \ 0.2, 2.7, 0.3, 0.3, 0.2,\ 0.2, 0.3, 3, 0.3, 0.2,\ 0.1, 0.2, 0.2, 2, 0.1}; double b[5]={72.8, 58.4, 26, 14.9, 20.6},x[5]; void gauss_solve(int,double*,double*,double*); system("cls"); gauss_solve(n,A,x,b); for (i=0;i<n;i++) printf("x[%d]=%.7lf\n",i,x[i]); getch(); } void gauss_solve(int n,double *A,double *x,double *b) { int i,j,k,r; double max; for (k=0;k<n-1;k++) { max=fabs(A[k*n+k]); r=k; for (i=k+1;i<n-1;i++) if (max<fabs(A[i*n+i])) { max=fabs(A[i*n+i]); r=i; } if (r!=k) { for (i=0;i<n;i++) /*换行k<-->r */ { max=A[k*n+i]; A[k*n+i]=A[r*n+i]; A[r*n+i]=max; } max=b[k]; b[k]=b[r]; b[r]=max; } for (i=k+1;i<n;i++) { for (j=k+1;j<n;j++) A[i*n+j]-=A[i*n+k]*A[k*n+j]/A[k*n+k]; b[i]-=A[i*n+k]*b[k]/A[k*n+k]; } } for (i=n-1;i>=0;x[i]/=... 展开

参考资料: http://dev.csdn.net/article/45/45023.shtm

19969210001 | 发布于2009-04-11 22:12
评论
迭代浪费资源
heisetoufa | 发布于2009-04-22 11:09
评论
都是高手
love329125 | 发布于2009-04-05 17:31
评论
收起 其他3条回答

为您推荐: