c語言jacobi迭代法-ag真人国际官网
『壹』 雅克比迭代法求解線性方程組的c語言程序
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;
}