📄 gaosixiaoqu.cpp
字号:
//列主元消去法求解方程组
#include "stdio.h"
#define n 3 //自主定义方程矩阵行列数
float max(float d[],int w) //w为数组中元素个数
{
float a[10];
int i;
for(i=0;i<w;i++)
{
a[i]=d[i];
}
for(i=0;i<w-1;i++)
{
a[i]>a[i+1]?a[i+1]=a[i]:a[i+1]=a[i+1];
}
return(a[w-1]);
}
void main()
{
int k,r,i,j,p[n];
float a[n][n],b[n],c[n],m,sum,exch;
double q=0.000001;
static float l[n][n];
printf("enter the matrix A:"); //初始化矩阵a[n][n]
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%f",&a[i][j]);
}
}
for(i=0;i<n;i++)
{
p[i]=i; //记录行信息
}
printf("enter the matrix b:"); //初始化矩阵b[n]
for(i=0;i<n;i++)
scanf("%f",&b[i]);
for(k=1;k<=n-1;k++)
{
for(i=0;i<=n-k;i++)
c[i]=a[k+i-1][k-1];
for(r=k;r<=n;r++)
{
if(a[r-1][k-1]==max(c,n-k+1))break;
}
//奇异矩阵处理
if(a[r-1][k-1]<q)printf("odd result");
//换行处理
else if(r!=k)
{
for(j=k;j<=n;j++)
{
exch=a[k-1][j-1];
a[k-1][j-1]=a[r-1][j-1];
a[r-1][j-1]=exch;
}
exch=b[k-1];
b[k-1]=b[r-1];
b[r-1]=exch;
exch=p[k-1];
p[k-1]=p[r-1];
p[r-1]=exch;
}
//消元计算
for(i=k+1;i<=n;i++)
{
m=a[i-1][k-1]/a[k-1][k-1];
a[i-1][k-1]=m;
l[i-1][k-1]=m; //赋值L矩阵
for(j=k+1;j<=n;j++)
{
a[i-1][j-1]=a[i-1][j-1]-m*a[k-1][j-1];
}
b[i-1]=b[i-1]-m*b[k-1];
}
}
//回代求解
if(a[n-1][n-1]!=0)b[n-1]=b[n-1]/a[n-1][n-1];
for(i=n-1;i>=1;i--)
{
sum=0;
for(j=i+1;j<=n;j++)
{
sum=sum+a[i-1][j-1]*b[j-1];
}
b[i-1]=(b[i-1]-sum)/a[i-1][i-1];
}
//输出计算解
printf("************************************************\nthe answer is:\n");
for(i=1;i<=n;i++)
printf("X[%d]:%f\n",p[i-1]+1,b[i-1]);
printf("************************************************\nU matrix is:\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%f ",a[i-1][j-1]-l[i-1][j-1]);
printf("\n");
}
for(i=0;i<n;i++)
l[i][i]=1;
printf("************************************************\nL matrix is:\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%f ",l[i-1][j-1]);
printf("\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -