雅克比迭代法求解线性方程组的C语言程序?

雅克比迭代法求解线性方程组的C语言程序?,第1张

void Solve ( double dCoef [] , double dY [] , unsigned int iOrder , double dErr)

{//用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("没有得到在误差亩尺并范围内的根")

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12489493.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存