编程:求高斯约旦解方程c++程序代码
答案:2 悬赏:20 手机版
解决时间 2021-05-08 15:18
- 提问者网友:缘字诀
- 2021-05-07 20:12
编程:求高斯约旦解方程c++程序代码
最佳答案
- 五星知识达人网友:雪起风沙痕
- 2021-05-07 21:13
#include<iostream>
using namespace std;
#define n 3
int main()
{
int i,j,k;double m;
double a[n][n],E[n][n];
//单位矩阵E[n][n]
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(i==j)
E[i][j]=1;
else
E[i][j]=0;
}
}
//输入矩阵a[n][n]
cout<<"输入矩阵:"<<endl;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>a[i][j];
//上三角变换
for(k=0;k<n-1;k++){
for(i=k+1;i<n;i++){
m=a[i][k]/a[k][k];
for(j=0;j<n;j++){
a[i][j]=a[i][j]-m*a[k][j];
E[i][j]=E[i][j]-m*E[k][j];
}
}
}
//下三角变换
for(k=n-1;k>0;k--){
for(i=k-1;i>=0;i--){
m=a[i][k]/a[k][k];
for(j=0;j<n;j++){
a[i][j]=a[i][j]-m*a[k][j];
E[i][j]=E[i][j]-m*E[k][j];
}
}
}
//单位矩阵……
for(i=0;i<n;i++)
for(j=0;j<n;j++){
E[i][j]=E[i][j]/a[i][i];
}
//输出矩阵的逆
cout<<"矩阵的逆是:"<<endl;
for(i=0;i<n;i++){
for(j=0,k=0;j<n;j++){
cout<<E[i][j]<<"\t";k++;
if(k==n)
cout<<endl;
}
}
}
using namespace std;
#define n 3
int main()
{
int i,j,k;double m;
double a[n][n],E[n][n];
//单位矩阵E[n][n]
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(i==j)
E[i][j]=1;
else
E[i][j]=0;
}
}
//输入矩阵a[n][n]
cout<<"输入矩阵:"<<endl;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>a[i][j];
//上三角变换
for(k=0;k<n-1;k++){
for(i=k+1;i<n;i++){
m=a[i][k]/a[k][k];
for(j=0;j<n;j++){
a[i][j]=a[i][j]-m*a[k][j];
E[i][j]=E[i][j]-m*E[k][j];
}
}
}
//下三角变换
for(k=n-1;k>0;k--){
for(i=k-1;i>=0;i--){
m=a[i][k]/a[k][k];
for(j=0;j<n;j++){
a[i][j]=a[i][j]-m*a[k][j];
E[i][j]=E[i][j]-m*E[k][j];
}
}
}
//单位矩阵……
for(i=0;i<n;i++)
for(j=0;j<n;j++){
E[i][j]=E[i][j]/a[i][i];
}
//输出矩阵的逆
cout<<"矩阵的逆是:"<<endl;
for(i=0;i<n;i++){
for(j=0,k=0;j<n;j++){
cout<<E[i][j]<<"\t";k++;
if(k==n)
cout<<endl;
}
}
}
全部回答
- 1楼网友:猎心人
- 2021-05-07 21:59
#include "math.h"
#include "iostream"
#include <stdio.h>
int main(int argc, char* argv[])
{
int i,j,k,n,q,on,m,T,temp;
float a[11][11],l[11][11],b[11],x[11];
on=0;
do
{
scanf("%d",&n);
scanf("%d",&n);
for (i=0;i<n;i++)
{
printf("b[%d]= ",i+1);
scanf("%f",&b[i]);
};
printf("put a[n][n]\n");
for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
printf("a[%d][%d]= ",i+1,j+1);
scanf("%f",&a[i][j]);
};
for (i=0;i<n;i++)
{
printf("%3.0fX[1]",a[i][0]);
for (j=1;j<n;j++)
printf(" + %fX[%d]",a[i][j],j+1);
printf("=%f\n",b[i]);
};
for (k=0;k<n;k++)
{
T=k;
for (m=k+1;m<n;m++)
if(fabs(a[T][k])<fabs(a[m][k]))
T=m;
if (T!=k)
{
for (m=k;m<n;m++)
{
temp=a[k][m];
a[k][m]=a[T][m];
a[T][m]=temp;
};
temp=b[T];b[T]=b[k];b[k]=temp;
};
if (a[k][k]==0&&k!=n-1)
{
printf("erro! eixt\n");
on=1;
}
if (a[k][k]!=0)
{
for (i=k+1;i<n;i++)
{
l[i][k]=a[i][k]/a[k][k];
b[i]=b[i]-l[i][k]*b[k];
for (j=k+1;j<n;j++)
a[i][j]=a[i][j]-l[i][k]*a[k][j];
}
}
}
if (a[n-1][n-1]==0)
{
printf("没有唯一解\n");
on=1;
}
if (on==0)
{
x[n-1]=b[n-1]/a[n-1][n-1];
for (i=n-2;i>=0;i--)
{
x[i]=b[i];
for (j=i+1;j<n;j++)
x[i]=x[i]-a[i][j]*x[j];
x[i]=x[i]/a[i][i];
}
for (i=0;i<n;i++)
{
printf("x[%d]= %f ",i+1,x[i]);
if (i%4==3)
printf("\n");
}
}
printf(" \n enter number 1 to exit \n or enter other number to continue\n");
scanf("%d",&q);
getchar();
on=0;
} while (q!=1);
return 0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯