私は、線形方程式の系を解くためにC++でGauss-Jordan消去法を使用していました。 コードは問題なく動作します。 void gauss()
の1,2,3行目を4行目に置き換えることができない理由が不思議でしたか?C++のGauss-Jordan消去
#include <iostream>
using namespace std;
class Gauss
{
float a[50][50];
int n;
public:
void accept()
{
cout<<"Enter no. of variables: ";
cin>>n;
for(int i=0;i<n;i++)
{
for(int j=0;j<n+1;j++)
{
if(j==n)
cout<<"Constant no."<<i+1<<" = ";
else
cout<<"a["<<i+1<<"]["<<j+1<<"] = ";
cin>>a[i][j];
}
}
}
void display()
{
for(int i=0;i<n;i++)
{
cout<<"\n";
for(int j=0;j<n+1;j++)
{
if(j==n)
cout<<" ";
cout<<a[i][j]<<"\t";
}
}
}
void gauss()//converting augmented matrix to row echelon form
{
float temp;//Line 1
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
temp=a[j][i]/a[i][i];//Line 2
for(int k=i;k<n+1;k++)
{
a[j][k]-=temp*a[i][k];//Line 3
//a[j][k]-=a[j][i]*a[i][k]/a[i][i];//Line 4
}
}
}
}
void EnterJordan()//converting to reduced row echelon form
{
float temp;
for(int i=n-1;i>=0;i--)
{
for(int j=i-1;j>=0;j--)
{
temp=a[j][i]/a[i][i];
for(int k=n;k>=i;k--)
{
a[j][k]-=temp*a[i][k];
}
}
}
float x[n];
for(int i=0;i<n;i++)//making leading coefficients zero
x[i]=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n+1;j++)
{
if(x[i]==0&&j!=n)
x[i]=a[i][j];
if(x[i]!=0)
a[i][j]/=x[i];
}
}
}
void credits()
{
for(int i=0;i<n;i++)
{
cout<<"\nx"<<i+1<<" = "<<a[i][n]<<endl;
}
}
};
int main()
{
Gauss obj;
obj.accept();
cout<<"\n\nAugmented matrix: \n\n\n";
obj.display();
obj.gauss();
cout<<"\n\nRow Echelon form: \n\n\n";
obj.display();
obj.EnterJordan();
cout<<"\n\nReduced row echelon form:\n\n\n";
obj.display();
cout<<"\n\nSolution: \n\n\n";
obj.credits();
return 0;
}
注:ピボットがゼロであるとき、私のコードを考慮に分裂の問題にはなりません(私はピボット毎回のように対角要素を選択しています)。 しかしながら、私が試みた特定の例については、このような場合は遭遇しなかった。
拡大行列は、次のとおり
1 0 0 2
0 1 0 3
0 0 1 -1
及び溶液は:
2 1 -1 8
-3 -1 2 -11
-2 1 2 -3
出力行列は、出力行列は4行目使用
x1 = 2
x2 = 3
x3 = -1
。
1 0 0 -0.75
0 1 -0 8
0 0 1 -1.5
とソリューションです:k == i
は、このように次のn-i
を壊し、は0.0fにa[j][i]
を変更したとき
x1 = -0.75
x2 = 8
x3 = -1.5
「a」の宣言はどこですか?このコードのいずれかを動作させることはむしろ重要です。 –
申し訳ありませんそれに言及するのを忘れました。これは、クラス内で宣言されたfloat配列です(図示せず)。float a [50] [50]; – ByteMan2021
問題を再現できるようにすべての関連コードを含めると、より迅速で迅速な対応が得られます。 –