采用高斯先列主元消元法求解线性方程组AX=b,编写一个程序C语言,急需
[a11a12....a1n][x1][b1][a21a22....a2n][x2][b2][........................]�6...
[a11 a12 ....a1n] [x1] [b1][a21 a22 ....a2n] [x2] [b2][........................]�6�1 [...]=[...][an1 an2 ....ann] [xn] [bn]
展开
1个回答
推荐于2018-04-27
展开全部
这个程序我做过的。LZ检验下: // 高斯消元求矩阵逆。
#include<stdio.h>
#include<math.h>#define N 100//定义矩阵的最大行int n;//表示矩阵的行,列。
double matix[N][N];//矩阵的最大行,最大列不
double unit[N][N];bool findmax(int s)//从s到n行选择最大的,作为主元。
{
int i,j,k;
double mas,temp;
mas=fabs(matix[s][s]);k=s;
for(i=s+1;i<n;i++)
{
if(mas<fabs(matix[i][s])) {mas=fabs(matix[i][s]);k=i;}
}
if(mas==0) return false;
//交换两行
for(j=0;j<n;j++)
{
temp=matix[s][j];
matix[s][j]=matix[k][j];
matix[k][j]=temp;
temp=unit[s][j];
unit[s][j]=unit[k][j];
unit[k][j]=temp;
}
return true;
}void chuli(int s)
{
int i,j;
double mas=matix[s][s],r;
for(i=s+1;i<n;i++)
{
r=matix[i][s]/mas;
for(j=0;j<n;j++)
{
matix[i][j]=matix[i][j]-matix[s][j]*r;
unit[i][j]=unit[i][j]-unit[s][j]*r;
}
}
}void solve(int s)
{
int i,j;
double mas;
mas=matix[s][s];
for(i=s;i<n;i++)
matix[s][i]=matix[s][i]/mas;
for(i=0;i<n;i++)
unit[s][i]=unit[s][i]/mas;
for(i=s-1;i>=0;i--)
{
mas=matix[i][s];
matix[i][s]=0;
for(j=0;j<n;j++)
unit[i][j]=unit[i][j]-mas*unit[s][j];
}
}
int main()
{
int i,j;
//输入
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i==j) unit[i][j]=1;
else unit[i][j]=0;
scanf("%lf",&matix[i][j]);
}
}
//输出
//转成上三角
for(i=0;i<n-1;i++)
{
//每一次选一个绝对值最大的值作为aii
if(findmax(i))
{
chuli(i);
}
else
{
printf("该矩阵不可逆");
return 0;
}
}
//转成单位阵
for(i=n-1;i>=0;i--)
{
solve(i);
}
//其逆矩阵是
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%.2lf ",unit[i][j]);
printf("\n");
}
return 0;
}
#include<stdio.h>
#include<math.h>#define N 100//定义矩阵的最大行int n;//表示矩阵的行,列。
double matix[N][N];//矩阵的最大行,最大列不
double unit[N][N];bool findmax(int s)//从s到n行选择最大的,作为主元。
{
int i,j,k;
double mas,temp;
mas=fabs(matix[s][s]);k=s;
for(i=s+1;i<n;i++)
{
if(mas<fabs(matix[i][s])) {mas=fabs(matix[i][s]);k=i;}
}
if(mas==0) return false;
//交换两行
for(j=0;j<n;j++)
{
temp=matix[s][j];
matix[s][j]=matix[k][j];
matix[k][j]=temp;
temp=unit[s][j];
unit[s][j]=unit[k][j];
unit[k][j]=temp;
}
return true;
}void chuli(int s)
{
int i,j;
double mas=matix[s][s],r;
for(i=s+1;i<n;i++)
{
r=matix[i][s]/mas;
for(j=0;j<n;j++)
{
matix[i][j]=matix[i][j]-matix[s][j]*r;
unit[i][j]=unit[i][j]-unit[s][j]*r;
}
}
}void solve(int s)
{
int i,j;
double mas;
mas=matix[s][s];
for(i=s;i<n;i++)
matix[s][i]=matix[s][i]/mas;
for(i=0;i<n;i++)
unit[s][i]=unit[s][i]/mas;
for(i=s-1;i>=0;i--)
{
mas=matix[i][s];
matix[i][s]=0;
for(j=0;j<n;j++)
unit[i][j]=unit[i][j]-mas*unit[s][j];
}
}
int main()
{
int i,j;
//输入
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i==j) unit[i][j]=1;
else unit[i][j]=0;
scanf("%lf",&matix[i][j]);
}
}
//输出
//转成上三角
for(i=0;i<n-1;i++)
{
//每一次选一个绝对值最大的值作为aii
if(findmax(i))
{
chuli(i);
}
else
{
printf("该矩阵不可逆");
return 0;
}
}
//转成单位阵
for(i=n-1;i>=0;i--)
{
solve(i);
}
//其逆矩阵是
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%.2lf ",unit[i][j]);
printf("\n");
}
return 0;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
瑞地测控
2024-08-12 广告
2024-08-12 广告
在苏州瑞地测控技术有限公司,我们深知频率同步与相位同步的重要性。频率同步确保两个或多个设备的时钟频率变化一致,但相位(即时间点)可保持相对固定差值。而相位同步,即时间同步,要求不仅频率一致,相位也必须完全一致,即时间差恒定为零。相位同步的精...
点击进入详情页
本回答由瑞地测控提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询