- ベストアンサー
行列の列の絶対値の総和の最大値を得る関数を教えてください
4*4行列の列ごとの各要素の絶対値の総和の最大値 課題の途中で上記の関数が作れないので止まりました・・・ 行列は2次元の配列で定義しているので 配列を引数にできるような関数を教えてくださいお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
C++ なんかすごく久しぶりなので,for 文とかあってる自信ないけど, double ** で渡せばよい. 行列を, double M1[4][4]; に代入していたら,こんな関数を作って, norm1(M1); で渡す. double norm1(double **M) { double retu =0; for (int i=0; i<=3; i++) { retu += fabs(M[2][i]); % 3列?(行)の絶対値の和 } return retu; }
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
今どきの C だと double maxcolsum(int n, double a[n][n]) { double smax=0; for (int i = 0; i < n; ++i) { double s = 0; for (int j = 0; j < n; ++j) { s += fabs(a[j][i]); } if (s > smax) { smax = s; } } return s; } のように書けるから非常に簡単.
- JaritenCat
- ベストアンサー率37% (122/322)
配列のサイズが決まっているのなら、 func(int a[][4]) とか func(int a[4][4]) でいいと思います。 #include <stdio.h> #define abs(a) ((a)<0?-(a):(a)) /* 絶対値マクロ */ int cal_max(int a[4][4]) { int i,j,max,sum[4]; /* 各列の絶対値和 */ for (i=0; i<4; i++) { sum[i]=0; for (j=0; j<4; j++) { sum[i]+=abs(a[j][i]); } } /* 最大値を探す */ max=sum[0]; for (i=1; i<4; i++) { if (max<sum[i]) max=sum[i]; } return max; } int main(void) { int a[4][4]={{-2,-3,-4,-5},{-1,-2,-3,-4},{5,4,3,2},{1,2,3,4}}; printf("%d\n",cal_max(a)); return 0; } サイズ可変にしようとすると、ちょっと工夫が必要です。
お礼
まとめてのお礼で失礼します #1さん、すいません、書き忘れましたがC++でなくCでした。まあ今回は違いはないですけど^^; #2さん 全部書いてくれてありがとうございます #3さん うまいことありがとうございました