该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
下面程序是解下面这个方程:(可以改变方程系,程序即可解不同的方程)
方程:
5x1+2x2+x3=8
2x1+8x2-3x3=21
x1-3x2-6x3=1
用VC6.0编译,保存代码时,以.C为后缀名
************************************/
#include
#include
#include
#include
#define EPS 1e-6/*允许误差*/
#define MAX 100/*迭代次数的最大值*/
float *Jacobi(float a[3][4],int n);
main()
{
int i;
float a[3][4]={5,2,1,8,2,8,-3,21,1,-3,-6,1};/*方程的系数*/
float *x;
x=(float *)malloc(3*sizeof(float));/*动态申请内存,用于保存方程的解*/
x=Jacobi(a,3);/*调用雅可比函数*/
for(i=0;i<3;i++)/*输出方程的解*/
{
printf("x[%d]=%f\t",i,x[i]);
}
printf("\n");
getch();
}
float *Jacobi(float a[3][4],int n)
{
float *x,*y;
float epsilon,s;
int i,j,k=0;
x=(float *)malloc(n*sizeof(float));
y=(float *)malloc(n*sizeof(float));
for(i=0;i
x[i]=0;
while(1)
{
epsilon=0;/*容允误差*/
k++;/*迭代次数计数*/
for(i=0;i
{
s=0;
for(j=0;j
{
if(j==i)
{
continue;
}
s+=a[i][j]*x[j];
}
y[i]=(a[i][n]-s)/a[i][i];/*计算"x^(k+1)"*/
epsilon+=(float)fabs(y[i]-x[i]);
}
if(epsilon
{
printf("迭代次数为:%d\n",k);
return x;/*返回方程的解*/
}
if(k>=MAX)
{
printf("方程不收敛\n");
return y;
}
for(i=0;i
{
x[i]=y[i];
}
}
}