C言語 行列式

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
しょしょしょしんしゃ

C言語 行列式

#1

投稿記事 by しょしょしょしんしゃ » 16年前

C言語で行列式の問題を解く宿題が出まして、
3次正方行列式Aに対して、Aのそれぞれの行から、成分の絶対値の和の最大値||A||を
計算するプログラムの作成というものですが、
それなりに考えたものを載せておきますが どうも違うような気もします。
#include <stdio.h>
#include <math.h>
#define N 3

int main(void){

float A[N][N]={{-1.0,2.0,-1.0},{-5.0,-4.0,0.0},{-5.0,2.0,-5.0}};
float x,y,z;
    printf("[ %f %f %f ]\n",A[0][0],A[0][1],A[0][2]); 
    printf("[ %f %f %f ]\n",A[1][0],A[1][1],A[1][2]); 
    printf("[ %f %f %f ]\n",A[2][0],A[2][1],A[2][2]); 
         x=abs(A[0][0])+abs(A[0][1])+abs(A[0][2]);
         y=abs(A[1][0])+abs(A[1][1])+abs(A[1][2]);
         z=abs(A[2][0])+abs(A[2][1])+abs(A[2][2]);
   if(y<x&&z<x){
	  printf("対してnorm_inf=%f\n",x);
         }if(x<y&&z<y){
	        printf("対してnorm_inf=%f\n",y);
               }if(x<z&&y<z){
	             printf("対してnorm_inf=%f\n",z);
         }
return 0;
}
//実行結果 12.0000
ここを直した方が良い、この場所がおかしいというところがあれば
お願いします。

box

Re:C言語 行列式

#2

投稿記事 by box » 16年前

それは本当に行列式の問題なのでしょうか。
簡単のために2次正方行列

a b
c d

で考えると、行列式は ad-bc である、
というのが私の知っている行列式の定義です。
それとも、今は行列式の定義が新しくなっているのでしょうか。

SCI

Re:C言語 行列式

#3

投稿記事 by SCI » 16年前

厳密には、行列式は置換写像とその符号を用いて定義されます。
が、せいぜい2次や3次なら公式で考えたほうが速いでしょう。

3次の正方行列なら余因子展開やサラス法で行列式を求めることができます。
「行列式の問題を解く」のが「行列式の値を求める」に一致するなら、これでいいでしょう。

ただし、
>Aのそれぞれの行から、成分の絶対値の和の最大値||A||を計算する
これは最大値ノルムでは。

しょしょしょしんしゃ

Re:C言語 行列式

#4

投稿記事 by しょしょしょしんしゃ » 16年前

>これは最大値ノルムでは。
 たぶん そうかもしれませんが、この最大値ノルムを調べたところ
 定義がよく分からず、C言語のプログラムで作ることができませんでした。
 わかる人がいれば教えてください。

SCI

Re:C言語 行列式

#5

投稿記事 by SCI » 16年前

問題文はもっていないのですか?

しょしょしょしんしゃ

Re:C言語 行列式

#6

投稿記事 by しょしょしょしんしゃ » 16年前

>問題文はもっていないのですか?
3次正方行列式Aに対して、Aのそれぞれの行から、成分の絶対値の和の最大値||A||を
計算するプログラムの作成という問題文です。

SCI

Re:C言語 行列式

#7

投稿記事 by SCI » 16年前

>3次正方行列式Aに対して
3次正方行列A、ではなくて?
まぁ意味するところは分かりますが、不正確な問題文ですね・・・

問題文の通り組めばいいので、最初のソースで合っているのではないですか?
もちろんリファクタリングの余地はあるでしょうが、結果は合っているような気がしますけど・・・

しょしょしょしんしゃ

Re:C言語 行列式

#8

投稿記事 by しょしょしょしんしゃ » 16年前

みなさん 考えてくださってありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る