次のコードをすべて理解することができません。私が指摘しているコードの中間部分は乗算を実行していると思いますが、私は確信が持てません。誰かがコードの途中で何を達成しようとしているのかを教えてください。未知の操作を実行している行列操作コード
実際の操作ではなく、配列要素の入出力部分を理解しています。
私はこれを理解する:
#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{
int i,j,k,n;
float a[100][200],t;
cout<<"Enter order of matrix-";
cin>>n;
cout<<"Enter elements of matrix"<<endl;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>a[i][j];
をしかし、以下の行が混乱している:ここでも
for(i=0;i<n;i++)
{
for(j=n;j<2*n;j++)
{
if(i==j-n)
a[i][j]=1;
else
a[i][j]=0;
}
}
for(i=0;i<n;i++)
{
t=a[i][i];
for(j=i;j<2*n;j++)
a[i][j]=a[i][j]/t;
for(j=0;j<n;j++)
{
if(i!=j)
{
t=a[j][i];
for(k=0;k<2*n;k++)
a[j][k]=a[j][k]-t*a[i][k];
}
}
}
、次の行は理解している:
cout<<"\n\nInverse matrix\n\n";
for(i=0;i<n;i++)
{
for(j=n;j<2*n;j++)
cout<<"\t"<<a[i][j];
cout<<"\n";
}
return 0;
}
これを行うより簡単な方法はありますか? – Ahmed
一般的ではありません。あなたの行列が2x2であれば、cramerの規則と呼ばれるものを使うことができますが、一般的には、このような "特異値分解"に悩まされています。数値レシピの本にはSVDがありますので、必要に応じて複雑さを比較することができます。 –