📄 jacobifile.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 + -