程序代码如下:
#include "math.h"
#include "stdio.h"
int max=10;
float delta=0.00001;
float a[3][3]={{10,-1,-2},{-1,10,-2},{-1,-1,5}};
float b[3]={7.2,8.3,4.2};
float x[3]={0,0,0};
float y[3];
float sum(int m)
{
int n;
float sum=0;
float y;
for (n=0;n<3;n++)
{
if(m==n)
{}else{
sum=a[m][n]*x[n]+sum;
}
}
y=(b[m]-sum)/a[m][m];
return y;
}
int main()
{
int k;
int i;
int flag;int first;
k=1;flag=0;first=1;
do
{
if(first)
{first=0;}else{
k++;
for(i=0;i<3;i++)
{
x[i]=y[i];
}
}
for (i=0;i<3;i++)
{
y[i]=sum(i);
}
for (i=0;i<3;i++)
{
if(fabs(x[i]-y[i])<0.00001)
{
flag=1;
}
}
}while((flag!=1)&&(k!=max));
for(i=0;i<3;i++)
{
printf("%f\n",y[i]);
}
}
int max=10;
float delta=0.00001;
float a[3][3]={{10,-1,-2},{-1,10,-2},{-1,-1,5}};
float b[3]={7.2,8.3,4.2};
float x[3]={0,0,0};
float y[3];
float sum(int m)
{
int n;
float sum=0;
float y;
for (n=0;n<3;n++)
{
if(m==n)
{}else{
sum=a[m][n]*x[n]+sum;
}
}
y=(b[m]-sum)/a[m][m];
return y;
}
int main()
{
int k;
int i;
int flag;int first;
k=1;flag=0;first=1;
do
{
if(first)
{first=0;}else{
k++;
for(i=0;i<3;i++)
{
x[i]=y[i];
}
}
for (i=0;i<3;i++)
{
y[i]=sum(i);
}
for (i=0;i<3;i++)
{
if(fabs(x[i]-y[i])<0.00001)
{
flag=1;
}
}
}while((flag!=1)&&(k!=max));
for(i=0;i<3;i++)
{
printf("%f\n",y[i]);
}
}
其中delta为求解精度,为了防止其收敛过慢,设置最多迭代次数max。本算法并未讨论迭代成功与否。
源程序下载。
这个跟自然辩证法有什么关系米?我只在数值分析里见过
@小幻 没关系,当时写标签的时候不知道怎么了
@老杨 俺上自然辩证法就是为自己不去实验室找个光明正大的理由。叶立国总会把我讲的很迷茫,最近少觉,课上睡觉的时候比较多。