c语言 迭代法求多元函数的近似解

多元一次方程式

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;
}

运行如下:
c语言 迭代法求多元函数的近似解

上一篇:2021-01-01


下一篇:洛谷 P1378 油滴扩展