{//用Jacobi迭代法解方程组, dCoef[]系数阵, Y[]向量, iOrder给出方程阶数, dErr给出精度
double res [Max] //方程解
double res2[Max] //保存上一阶方程解
if ( Max <iOrder )
{
printf ("最多支持%d阶方程组."悄桐庆, Max)
return
}
for ( unsigned int i = 0 i <iOrder res2 [i++] = 0.0 ) //初始解向启握量 (0,0...)
while ( true )
{
bool bStopIterative = true
for (unsigned int i = 0 i <iOrder ++i)
{
double dSum2 = 0
for (unsigned int j = 0 j <iOrder j++)
{//求轮橡第二项
if ( j == i ) continue
dSum2 += dCoef [i * iOrder + j] * res2 [j]
}
res[i] = 1/dCoef[i * iOrder + i] * ( dY[i] - dSum2 )
if ( abs ( res2[i] - res [i] ) >dErr )
bStopIterative = false
}
if ( bStopIterative )
break
for (unsigned int i = 0 i <iOrder i++ )
res2[ i ] = res[ i ]
}
//输出结果
for (unsigned int i = 0 i <iOrder i++)
printf ("x%d = %lf\n", i+1 , res[i])
}
int main(int argc, char* argv[])
{
double a[] =
{
8,-3,2,
4,11,-1,
2,1,4
}
double b[3] =
{
20,33,12
}
Solve ( a , b , 15 , 1e-10)
getchar()
return 0
}
#include<stdio.h>#include<math.h>
main()
{
int n,M,i,j
printf("请输入希望迭代的次数")
scanf("%d",&M)
printf("请输入方程阶数")
scanf("%d"迅迹,&n)
float p,y[n],x[n],a[n][n],b[n]
printf("请输入误差限")
scanf("%f",&p)
printf("请输入系数行列式")
for(i=0i<ni++)
for(j=0j<nj++)
scanf("%f",&a[i][j])
printf("请输入常数项向量")
for(i=0i<ni++)
scanf("%f",&b[i])
printf("请输入初始向量")
for(i=0i<困让ni++)
scanf("%f",&x[i])
for(k=1k<=Mk++)
{
for(i=0i<ni++)
for(j=0j<nj++)
{
if(j==i) continue
else y[i]=(b[i]-a[i][j]x[i])/a[i][i]
}
for(i=0i<ni++)
if(fabs(x[i]-y[i])<p)
for(i=0i<ni++)
{
printf("x%d=%f",i+1,y[i])break
}
else for(i=0i<ni++)
x[i]=y[i]
}
if(k>M) printf("没有得到在误差亩尺并范围内的根")
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)