多元一次方程式
10x_1 - x_2 + 2x_3 = 6
-x_1 + 11x_2 - x_3 + x_4 = 25
2x_1 - x_2 + 10x_3 - x_4 = -11
3x_2 - x_3 + 8x_4 = 15
1.迭代法
以下代码思路借鉴https://blog.csdn.net/akatsuki__itachi/article/details/80719686
//下列代码是实现思路
int main()
{
x0=初始近似根;//人为设置一个初值
do{
x1=x0; //保存原值
x0=g(x1); //根据给定的方程计算近似根,即将方程近似解x0迭代一次
}while(fabs(x0-x1)>Epsilon); //近似根精度要求
printf("方程的近似根是%f\n",x0);
}
//迭代法 解多元方程
#include<stdio.h>
#include<math.h>
#define eps 1e-8
const int max_time=3; //最大迭代次数
int main(){
double x[4],y[4],c;
int n=0;
for(int i=1; i<=4; i++){ //先给每个xi_1附初值
x[i]=1516226;
}
do{
for(int i = 1;i<=4;i++){ //将 xi_k保存值到yi
y[i] = x[i];
}
for(int j = 1; j<=4; j++){ //经过一次迭代得到xi_(k+1),保存到xi
x[1] = (6+x[2]-2*x[3])/10;
x[2] = (25+x[1]+x[3]-3*x[4])/11;
x[3] = (-11-2*x[1]+x[2]+x[4])/10;
x[4] = (15-3*x[2]+x[3])/8;
}
c=0;
for(int p=1;p<=4;p++){ //计算每次 i组x_(k+1)-x_k的精度和
c+=(fabs(y[p]-x[p]));
}
for(int v = 1; v<=4; v++)
printf("%.6lf ",x[v]);
printf("\n");
}while(c>eps && n++<max_time) ; //根据是否满足精度要求和最大迭代次数(防止是无解函数一直循环)
for(int i=1;i<=4;i++){
printf("x%d = %.6lf\n",i,x[i]);
}
return 0;
}
运行如下: