⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jacobifile.cpp

📁 Jacobi迭代的算法 根据给出的系数矩阵和函数值以及需要精度 能求出方程值
💻 CPP
字号:
#include "stdio.h"
#include <iostream.h>
#include "math.h"

float a[10][10],b[10][1],x[10][1]={0},xn[10][1],r[10][1],s=0,e,max=0;
int i,j,n=0,k=1;

void writea()
{
	for(i=1;i<=n;i++)
	{	for(j=1;j<=n;j++)
		    printf("%10f",a[i][j]);
			printf("\n");
	}
}
void writeb()
{
	for(i=1;i<=n;i++)
	{
		printf("%10f",b[i][1]);
		printf("\n");
	}
}

void main()
{
	printf("Jacobi迭代 x用来存放第一次的结果 xn用来存放下一次的结果\n");
    printf("输入行列数:");scanf("%d",&n);
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        {   
            printf("a[%d][%d]:",i,j);
            scanf("%f",&a[i][j]);
        }
	for(i=1;i<=n;i++)
	{
		printf("b[%d][1]:",i);
		scanf("%f",&b[i][1]);
	}
	printf("需要精确的差值,如0.01等:");scanf("%f",&e);
    printf("输入的矩阵如下:\n");
    writea();
	printf("\n");
	writeb();
	printf("按迭代公式进行迭代后,每次结果如下:\n");
    printf("         x(x1,x2,x3)               迭代次数         xn-x差值       差值中最大值");
	for(k=1;k<=100;k++)
	{
		for(i=1;i<=n;i++)
		{
			for(j=1;j<=n;j++)
			{
				if(j!=i) s=a[i][j]*x[j][1]+s;
			}
			xn[i][1]=(b[i][1]-s)/a[i][i];
			s=0;
		}
		for(i=1;i<=n;i++)
		{
			r[i][1]=xn[i][1]-x[i][1];
			printf("%10f",xn[i][1]);
			x[i][1]=xn[i][1];
		}
	    printf("%10d",k);
		for(i=1;i<=n;i++)
		{
			if(r[i][1]<0) r[i][1]=-r[i][1];
		printf("%10f",r[i][1]);
		}
		max=r[1][1];
		for(i=1;i<=n;i++)
		{
     	  if(max<r[i+1][1]) max=r[i+1][1];
		}
		printf("%10f",max);
		if(max<e) break;
	}
	printf("\n需要迭代的次数:%d\n",k);
    printf("最终得到的结果:");
	for(i=1;i<=n;i++)
	{
		printf("\n%10f",xn[i][1]);
	}
	cin.get();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -