ページ 11

C言語 行列式

Posted: 2009年1月09日(金) 23:46
by しょしょしょしんしゃ
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
ここを直した方が良い、この場所がおかしいというところがあれば
お願いします。

Re:C言語 行列式

Posted: 2009年1月10日(土) 00:15
by box
それは本当に行列式の問題なのでしょうか。
簡単のために2次正方行列

a b
c d

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

Re:C言語 行列式

Posted: 2009年1月10日(土) 02:55
by SCI
厳密には、行列式は置換写像とその符号を用いて定義されます。
が、せいぜい2次や3次なら公式で考えたほうが速いでしょう。

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

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

Re:C言語 行列式

Posted: 2009年1月10日(土) 09:22
by しょしょしょしんしゃ
>これは最大値ノルムでは。
 たぶん そうかもしれませんが、この最大値ノルムを調べたところ
 定義がよく分からず、C言語のプログラムで作ることができませんでした。
 わかる人がいれば教えてください。

Re:C言語 行列式

Posted: 2009年1月10日(土) 10:40
by SCI
問題文はもっていないのですか?

Re:C言語 行列式

Posted: 2009年1月10日(土) 20:47
by しょしょしょしんしゃ
>問題文はもっていないのですか?
3次正方行列式Aに対して、Aのそれぞれの行から、成分の絶対値の和の最大値||A||を
計算するプログラムの作成という問題文です。

Re:C言語 行列式

Posted: 2009年1月11日(日) 09:36
by SCI
>3次正方行列式Aに対して
3次正方行列A、ではなくて?
まぁ意味するところは分かりますが、不正確な問題文ですね・・・

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

Re:C言語 行列式

Posted: 2009年1月11日(日) 13:14
by しょしょしょしんしゃ
みなさん 考えてくださってありがとうございました