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

朝阳网2022-10-04 11:39:541条回答

已提交,审核后显示!提交回复

共1条回复
身在他乡0305 共回答了20个问题 | 采纳率80%
void Solve ( double dCoef [] ,double dY [] ,unsigned int iOrder ,double dErr)
{//用Jacobi迭代法解方程组,dCoef[]系数阵,Y[]向量,iOrder给出方程阶数,dErr给出精度
x05double res [Max];x05//方程解
x05double res2[Max];x05//保存上一阶方程解
x05if ( Max < iOrder )
x05{
x05x05printf ("最多支持%d阶方程组.",Max);
x05x05return;
x05}
x05for ( unsigned int i = 0 ; i < iOrder ; res2 [i++] = 0.0 );x05//初始解向量 (0,0...)
x05
x05while ( true )
x05{
x05x05bool bStopIterative = true;x05
x05x05for (unsigned int i = 0 ; i < iOrder ; ++i)
x05x05{
x05x05x05double dSum2 = 0;
x05x05x05for (unsigned int j = 0 ; j < iOrder ; j++)
x05x05x05{//求第二项
x05x05x05x05if ( j == i ) continue;
x05x05x05x05dSum2 += dCoef [i * iOrder + j] * res2 [j];
x05x05x05}
x05x05x05res[i] = 1/dCoef[i * iOrder + i] * ( dY[i] - dSum2 );
x05x05x05
x05x05x05if ( abs ( res2[i] - res [i] ) > dErr )
x05x05x05x05bStopIterative = false;
x05x05}
x05x05
x05x05if ( bStopIterative )
x05x05x05break;
x05x05for (unsigned int i = 0 ; i < iOrder ; i++ )
x05x05x05res2[ i ] = res[ i ];
x05}
x05//输出结果
x05for (unsigned int i = 0 ; i < iOrder ; i++)
x05x05printf ("x%d = %lfn",i+1 ,res[i]);
}
int main(int argc,char* argv[])
{
x05double a[] =
x05{
x05x058,-3,2,
x05x054,11,-1,
x05x052,1,4
x05};
x05double b[3] =
x05{
x05x0520,33,12
x05};
x05Solve ( a ,b ,15 ,1e-10);
x05getchar();
x05return 0;
}
1年前

相关推荐

数值分析中,雅克比迭代法收敛的充要条件是什么?
小米1191年前2
ztl19761024 共回答了16个问题 | 采纳率81.3%
Ax=b,其中A=D-L-U为奇异矩阵,且对角矩阵D也为非奇异的,那么雅克比迭代法收敛的充 要条件是@(J)
雅克比迭代法的迭代矩阵J是Bx+f中的B,那高斯-赛德尔迭代法的迭代矩阵G,好像和J是一样的?是怎么算出来的?
yyalja1年前1
zjzone 共回答了23个问题 | 采纳率91.3%
迭代法写成x