求一道五元方程用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 最佳答案
 0.2,\, 0.3, 3,   0.3, 0,   3,   3;

system("n;=A[i*n+i];n;cls");
gauss_solve(n/, 0.1};
}
if (r!=k)
{
for (i=0;i<n";*高斯迭代法求解 Ax=b */.2;
}
}

for (i=n-1;i>, 2, 2;n;-->
#include <stdio.h>n-1,i,x[5];
void gauss_solve(int,double*,double*,double*).7lf\, 0.2, 2.2;
#include <conio.h>A[k*n+k];
b[i]-=A[i*n+k]*b[k]/A[k*n+k],i--)
for (j=i+1, \
0.2, 2, 3, \,x;
{
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<,\
0.1, 0;i++)
printf("
0;k++)
{
max=fabs(A[k*n+k]); /*找绝对值最大的元素*/
r=k;
for (i=k+1;r */n;
double b[5]={72.8, 58.4, 26, 14.9, 20.6};
1,x[i]),b);
for (i=0;i<x[%d]=%;=0;x[i]/, 2, 10;i<n-1;i++)
if (max<fabs(A[i*n+i]))
{
max=fabs(A[i*n+i]);
r=i,x[i]=b[i].7;i++) /, 0.3, 0;j++)
A[i*n+j]-=A[i*n+k]*A[k*n+j]/*换行k<.h>
main()
{
int i,n=5;
double A[25]={ 8, 2.2,A;
getch();
}

void gauss_solve(int n,double *A,double *x,double *b)
{
int i,j,k,r;
double max;
for (k=0;k<i++)
{
for (j=k+1;j<
#include <math.3

其他回答

// l++)
c[u]=c[u]+a[i*n+l]*b[l*k+j]; a[u]=-a[u]*a[l];
}
}
//=n-1; j++)
if (j!=k)
{
u=k*n+j;
a[u]=a[u]*a[l];
}
for (i=0; i<=n-1;
if (p>i<n;i++)
a[i]=0.0;
return false;
}
// v=js[k]*n+j;
p=a[u]; a[u]=a[v]; a[u]=a[v]; a[v]=p; // j++)
if (j; k--)
{
if (js[k];/记录列号
}
}
if (d+1; j< i<!=k)
for (j=0; j<=n-1;其中a为m*n阶矩阵,b为n*k阶矩阵
int i;=k-1; j++)
{
u=i*k+j; c[u]=0.0;
for (l=0; l<=n-1;=n-1; j++)
{
u=k*n+j; v=is[k]*n+j;
delete []js;
return true!=k)
{
u=i*n+k;
a[u]=a[u]-a[i*n+k]*a[k*n+j];
}
for (i=0; i<=n-1这个线性方程组可以用;/矩阵乘法a*b=c
void _stdcall Matrixmul(double a[]!=k)
for (j=0; j<=n-1;根据记录的行号列号进行恢复
for (k=n-1; k>=0,矩阵求逆,再相乘来解决吧。我有段代码:
bool _stdcall InverseMatrix(double a[], int n=dim) /、第 k 列开始的右下角子阵中选取绝对值最大的元素并记住次元素所在的行号和列号
{
d=p;
is[k]=i;
for (i=0;=m-1; i++)
for (j=0;/从第 k 行;=n-1; k++)
{
d=0.0;
for (i=k; i<=n-1;
p=a[u];采用高斯-约旦法
int *is,*js,i,j,k,l,u,v;
double d,p;
is=new int[n];
}
return;
for (j=0; j++)
{
u=k*n+j; j++)
{
l=i*n+j;
p=a[u];
p=fabs(a[l]); delete []js;
for(i=0;行交换
}
if (js[k]; k< a[v]=p,u;记录行号
js[k]=j;/!=k)
{
u=i*n+j; j<, double b[]; i</列交换
}
l=k*n+k;
a[l]=1.0/a[l],double c[],int m=dim,int n=dim,int k=dim)
{ //.0==1.0)
{
delete []is;
js=new int[n];
///求任意阶矩阵逆矩阵的函数
{ // j< i++)
if (i,j;d) / a[v]=p,l;通过行交换和列交换将它交换到主元素位置上
if (is[k]!=k)
for (j=0;
}
if (is[k]!=k)
for (i=0!=k)
for (i=0; i<=n-1;
}
/=n-1; i++)
{
u=i*n+k; v=i*n+is[k]; i++)
for (j=k; j<=n-1; v=i*n+js[k];
p=a[u]; a[u]=a[v]; / i++)
if (i; a[u]=a[v]; a[v]=p;
}
}
delete []is;第一步 全选主元
for (k=0; i++)
{
u=i*n+k
展开
dao_er | 发布于2009-04-06
评论
/*高斯迭代法求解 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]/=A[i*n+i],i--)
for (j=i+1,x[i]=b[i];j<n;j++)
x[i]-=A[i*n+j]*x[j];
}
展开
和风一人 | 发布于2009-04-05
评论
/*高斯迭代法求解 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]/=A[i*n+i],i--)
for (j=i+1,x[i]=b[i];j<n;j++)
x[i]-=A[i*n+j]*x[j];
}
或:
/*高斯迭代法求解 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]/=A[i*n+i],i--)
for (j=i+1,x[i]=b[i];j<n;j++)
x[i]-=A[i*n+j]*x[j];
}
展开

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

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

为您推荐:

×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消