0
私のコードには基本的に問題があります。単位行列とガウス消去(スワッピングなし)逆行列を得るためには、本当に助けに感謝します。コードは、方法によって、Cであることとガウス消去を使用して行列の逆行列を見つけるのに問題が発生しました
for(int i=0;i<n; i++)
{
for(int j=0; j<n; j++)
{
matrix[i][j]= i+(j*j)+1;
}
}
を行っているとの問題は、あなたが逆になりますための行列を生成していることである。この割り当て
#include <stdio.h>
int main()
{
int n = 3;
float matrix[10][10];
float augmatrix[10][10];
/*creating random matrix*/
for(int i=0;i<n; i++)
{
for(int j=0; j<n; j++)
{
matrix[i][j]= i+(j*j)+1;
}
}
/*creating an augmented matrix with identity matrix*/
for (int i=0;i<n; i++)
{
for(int j=0; j<2*n; j++)
{
if(j<n)
{
augmatrix[i][j] = matrix[i][j];
}
else if(i==j-n)
{
augmatrix[i][j] = 1.0;
}
else
{
augmatrix[i][j] = 0.0;
}
}
}
/*printing matrix*/
printf("matrix is \n");
for (int z = 0; z < n; z++)
{
for (int x = 0; x < n; x++)
{
printf(" %f", matrix[z][x]);
}
printf("\n");
}
printf("augmatrix is \n");
for (int z = 0; z < n; z++)
{
for (int x = 0; x < n*2; x++)
{
printf(" %f", augmatrix[z][x]);
}
printf("\n");
}
/*gausian elimination*/
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if(i!=j){
int l = augmatrix[j][i]/augmatrix[i][i];
for(int k = 0; k < 2*n; k++){
augmatrix[j][k] -= l * augmatrix[i][k];
}
}
}
}
for(int i = 0; i < n; i++){
float a = augmatrix[i][i];
for(int j = 0; j < 2*n; j++){
augmatrix[i][j] /= a;
}
}
/*print result*/
printf("matrix is \n");
for (int z = 0; z < n; z++)
{
for (int x = 0; x < n*2; x++)
{
printf(" %f", augmatrix[z][x]);
}
printf("\n");
}
}
インデントを修正してください。それが現れても、コードは読みにくいです。 –
また、「問題がある」とは十分に説明できません。入力、予想出力、現在出力のセットを提供する必要があります。 [MCVE] –
を作成する方法については、 'int l'を' float'にする必要があります。そうでなければ、整数だけが得られます。 'augmatrix [i] [i]'は 'j'が' i'より大きいと変更されるので、 'i'のループの始めに対角の値を保存する必要があるでしょう。 –