📄 雅可比迭代解线性方程组.cpp
字号:
// 雅可比迭代解线性方程组.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream.h>
#include<math.h>
#include<iomanip.h>
#define N 50
int main(int argc, char* argv[])
{
int i,j,n,s=0;
double A[N][N],b[N],X[N];
void yakebi(double A[][50],double X[],double b[],int n=1);
//变量的定义
cout<<"请输入方程的阶数n:";
cin>>n;
cout<<"请输入方程组的系数矩阵:"<<endl;
for(i=0;i<=n-1;i++){
for(j=0;j<=n-1;j++){
cout<<"A["<<i<<"]["<<j<<"]=";
cin>>A[i][j];
}
cout<<"b["<<i<<"]=";
cin>>b[i];
};
//系数矩阵的输入
yakebi(A,X,b,n);
//求解
cout<<"下面是方程组的解:"<<endl;
for(i=0;i<=n-1;i++){
cout<<X[i]<<endl;
};
cin.get();
cin.get();
return 0;
}
void yakebi(double A[][50],double X[],double b[],int n=1){
int i,j,k;
double x[2][50];
double distance;
double temp;
if(n==1){
if(A[0][0]!=0){ X[0]=b[0]/A[0][0]; return; }
};
//为一阶时直接求解
for(i=0;i<=n-1;i++){
x[0][i]=1;
};
for(k=0;k<=500;k++){
for(i=0;i<=n-1;i++){
temp=0;
for(j=0;j<=n-1;j++){
if(j!=i){ temp+=A[i][j]*x[k%2][j]; };
};
x[(k+1)%2][i]=(b[i]-temp)/A[i][i];
};//求每个x[i];
distance=0;
for(i=0;i<=n-1;i++) distance+=pow(x[(k+1)%2][i]-x[k%2][i],2);
if(distance<=0.0001) break;
cout<<k<<endl;
};//循环迭代次数;
for(i=0;i<=n-1;i++) X[i]=x[k%2][i];
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -