📄 sor迭代法.cpp
字号:
// SOR迭代法.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <conio.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
const int n=20;
int i,j,k=0;
float a[n][n],b[n],x[n];
float pre=0.0000001,w=1.2,sum=0,max=1, t=0;
cout<<"【SOR迭代法求解线性方程组】"<<endl<<endl;
cout<<" 请输入松弛因子w=";
cin>>w;
cout<<endl;
//给系数矩阵A赋初值
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[i][j]=0;
}
a[i][i]=3;
if(i<n-1)
{
a[i+1][i]=-0.5;
a[i][i+1]=-0.5;
}
if(i<n-2)
{
a[i+2][i]=-0.25;
a[i][i+2]=-0.25;
}
}
//给b向量赋初值与迭代初始值
for(i=0;i<n;i++)
{
b[i]=1;
x[i]=0;
}
while(max>=pre)
{
k++; for(i=0;i<n;i++)
{
sum=0;
for(j=0;j<n;j++)
{
sum+=a[i][j]*x[j];
}
t=x[i];
x[i]=x[i]+w*(b[i]-sum)/a[i][i];
if(i==0)
{
max=abs(x[i]-t);
}
if (max<abs(x[i]-t))
{
max=abs(x[i]-t);
}
}
}
cout<<" 迭代次数:"<<k<<endl<<endl;
cout<<" 计算结果:"<<endl;
for(i=0;i<n;i++)
{
cout<<" x["<<i+1<<"]="<<x[i]<<endl;
}
cout<<endl<<"按任意键继续...";
getch();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -