📄 第一题.cpp
字号:
#include<iostream>
#include<cmath>
using namespace std;
double FIR(int m);
double SEC(int m);
double THI(int m);
void main()
{
int n=0;
int j=0;
int r=0;
for(n=3;n<=9;n++)
{
cout<<"系数矩阵为a[i][j]=(i+j-1)^2的方程组"<<"阶数为"<<n<<"时:"<<endl;
FIR(n);
}
for(n=3;n<=5;n++)
{
cout<<"系数矩阵为a[i][j]=(i+j)^2的方程组"<<"阶数为"<<n<<"时:"<<endl;
SEC(n);
}
for(n=3;n<=6;n++)
{
cout<<"系数矩阵为a[i][j]=1/(i+j-1)的方程组"<<"阶数为"<<n<<"时:"<<endl;
THI(n);
}
}
double FIR(int m) //m为系数矩阵的阶数
{
int i=0;
int j=0;
int k=0;
double t=0;
double MAX=0.0;
double x[20]={0,0,0,0,0,0,0,0,0,0,0,0,0};
double a[20][20];
double b[20]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
double c[20]={0,0,0,0,0,0,0,0,0,0,0,0,0};
for(i=1;i<=m;i++) //计算系数矩阵
{
for(j=1;j<=m;j++)
{
a[i][j]=pow((i+j-1),2);
}
}
for(i=1;i<=m;i++) //计算b的值
{
for(j=1;j<=m;j++)
{
b[i]+=a[i][j];
}
a[i][m+1]=b[i];
}
for(j=1;j<m;j++) //j为列数,从第一列进行循环计算每列的主元
{
MAX=fabs(a[j][j]);
for(i=j;i<=m;i++) //i为行数,从第j行进行循环
{
if(fabs(a[i][j])>MAX)
{
MAX=fabs(a[i][j]);
for(k=1;k<=m+1;k++) //循环换行
{
c[k]=a[j][k]; //注意是a[j][k]
a[j][k]=a[i][k];
a[i][k]=c[k];
}
}
}
cout<<"第"<<j<<"步消元的主元是"<<a[j][j]<<endl;
for(i=j+1;i<=m;i++) //循环消元
{
t=a[i][j]/a[j][j]; //在此小循环内是定值,第j行所乘的系数
for(k=j;k<=m+1;k++) //k作为列号
{
a[i][k]=a[i][k]-a[j][k]*t;
}
}
}
for(i=m;i>0;i--)
{
for(j=i+1;j<=m;j++)
{
a[i][m+1]-=a[i][j]*x[j]; //超出范围的x[m+1]初始化为0,所以不影响结果
}
x[i]=a[i][m+1]/a[i][i];
cout<<"x"<<i<<"="<<x[i]<<endl;
}
return 0;
}
double SEC(int m) //m为系数矩阵的阶数
{
int i=0;
int j=0;
int k=0;
double t=0;
double MAX=0.0;
double x[20]={0,0,0,0,0,0,0,0,0,0,0,0,0};
double a[20][20];
double b[20]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
double c[20]={0,0,0,0,0,0,0,0,0,0,0,0,0};
for(i=1;i<=m;i++) //计算系数矩阵
{
for(j=1;j<=m;j++)
{
a[i][j]=pow((i+j),2);
}
}
for(i=1;i<=m;i++) //计算b的值
{
for(j=1;j<=m;j++)
{
b[i]+=a[i][j];
}
a[i][m+1]=b[i];
}
for(j=1;j<m;j++) //j为列数,从第一列进行循环计算每列的主元
{
MAX=fabs(a[j][j]);
for(i=j;i<=m;i++) //i为行数,从第j行进行循环
{
if(fabs(a[i][j])>MAX)
{
MAX=fabs(a[i][j]);
for(k=1;k<=m+1;k++) //循环换行
{
c[k]=a[j][k]; //注意是a[j][k]
a[j][k]=a[i][k];
a[i][k]=c[k];
}
}
}
cout<<"第"<<j<<"步消元的主元是"<<a[j][j]<<endl;
for(i=j+1;i<=m;i++) //循环消元
{
t=a[i][j]/a[j][j]; //在此小循环内是定值,第j行所乘的系数
for(k=j;k<=m+1;k++) //k作为列号
{
a[i][k]=a[i][k]-a[j][k]*t;
}
}
}
for(i=m;i>0;i--)
{
for(j=i+1;j<=m;j++)
{
a[i][m+1]-=a[i][j]*x[j]; //超出范围的x[m+1]初始化为0,所以不影响结果
}
x[i]=a[i][m+1]/a[i][i];
cout<<"x"<<i<<"="<<x[i]<<endl;
}
return 0;
}
double THI(int m) //m为系数矩阵的阶数
{
int i=0;
int j=0;
int k=0;
double t=0;
double MAX=0.0;
double x[20]={0,0,0,0,0,0,0,0,0,0,0,0,0};
double a[20][20];
double b[20]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
double c[20]={0,0,0,0,0,0,0,0,0,0,0,0,0};
for(i=1;i<=m;i++) //计算系数矩阵
{
for(j=1;j<=m;j++)
{
a[i][j]=1.0/(i+j-1);
}
}
for(i=1;i<=m;i++) //计算b的值
{
for(j=1;j<=m;j++)
{
b[i]+=a[i][j];
}
a[i][m+1]=b[i];
}
for(j=1;j<m;j++) //j为列数,从第一列进行循环计算每列的主元
{
MAX=fabs(a[j][j]);
for(i=j;i<=m;i++) //i为行数,从第j行进行循环
{
if(fabs(a[i][j])>MAX)
{
MAX=fabs(a[i][j]);
for(k=1;k<=m+1;k++) //循环换行
{
c[k]=a[j][k]; //注意是a[j][k]
a[j][k]=a[i][k];
a[i][k]=c[k];
}
}
}
cout<<"第"<<j<<"步消元的主元是"<<a[j][j]<<endl;
for(i=j+1;i<=m;i++) //循环消元
{
t=a[i][j]/a[j][j]; //在此小循环内是定值,第j行所乘的系数
for(k=j;k<=m+1;k++) //k作为列号
{
a[i][k]=a[i][k]-a[j][k]*t;
}
}
}
for(i=m;i>0;i--)
{
for(j=i+1;j<=m;j++)
{
a[i][m+1]-=a[i][j]*x[j]; //超出范围的x[m+1]初始化为0,所以不影响结果
}
x[i]=a[i][m+1]/a[i][i];
cout<<"x"<<i<<"="<<x[i]<<endl;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -