このプログラムはayの逆行列を求めたのちその逆行列とR₀の行列を掛け算したいと考えていますがうまくいきません
アドバイスお願いします。
C
1 2#include <stdlib.h> 3#include<iostream> 4#include<cmath> 5 6 7void Inversematrix(double a[4][4]); 8void matrixmultiplication(double x[4][2], double y[4][4], double xy[4][2]); 9double inv_a[4][4]; 10 11int main(int argc, char **argv) 12{ 13 14 double t[4] = { 0.0,0.2,0.6,1.0 }, R₀[4][2] = { { 1,2 },{ 2,3 },{ 3,1 },{ 5,1 } }; 15 double R₀ay[4][2]; 16 double ay[4][4] = { { pow((1 - t[0]), 3), 3 * pow((1 - t[0]), 2)*t[0], 3 * (1 - t[0])*pow(t[0], 2), pow(t[0], 3)}, 17 { pow((1 - t[1]), 3), 3 * pow((1 - t[1]), 2)*t[1], 3 * (1 - t[1])*pow(t[1], 2), pow(t[1], 3)}, 18 { pow((1 - t[2]), 3), 3 * pow((1 - t[2]), 2)*t[2], 3 * (1 - t[2])*pow(t[2], 2), pow(t[2], 3)}, 19 { pow((1 - t[3]), 3), 3 * pow((1 - t[3]), 2)*t[3], 3 * (1 - t[3])*pow(t[3], 2), pow(t[3], 3)}}; //入力用の配列(R₀のxの値を代入 20 21 Inversematrix(ay); 22 23 matrixmultiplication(R₀,ay,R₀ay); 24 25 return 0; 26} 27 28void Inversematrix(double a[4][4]) 29{ 30 double inv_a[4][4],t[4],R₀[2][2]; //ここに逆行列が入る 31 double buf; //一時的なデータを蓄える 32 int i, j, k; //カウンタ 33 int n = 4; 34 35 //単位行列を作る 36 for (i = 0; i < n; i++) { 37 for (j = 0; j < n; j++) { 38 inv_a[i][j] = (i == j) ? 1.0 : 0.0; 39 } 40 } 41 42 //掃き出し法 43 for (i = 0; i < n; i++) { 44 buf = 1 / a[i][i]; 45 for (j = 0; j < n; j++) { 46 a[i][j] *= buf; 47 inv_a[i][j] *= buf; 48 } 49 for (j = 0; j < n; j++) { 50 if (i != j) { 51 buf = a[j][i]; 52 for (k = 0; k < n; k++) { 53 a[j][k] -= a[i][k] * buf; 54 inv_a[j][k] -= inv_a[i][k] * buf; 55 } 56 } 57 } 58 } 59 //逆行列を出力 60 for (i = 0; i < n; i++) { 61 for (j = 0; j < n; j++) { 62 printf(" %f", inv_a[i][j]); 63 } 64 printf("\n"); 65 } 66 67} 68 69void matrixmultiplication(double x[4][2],double y[4][4], double xy[4][2]) 70{ 71 72 73 int i, j, k; 74 75 for (i = 0; i < 4; i++) { 76 for (j = 0; j < 2; j++) { 77 xy[i][j] = 0; 78 for (k = 0; k < 4; k++) { 79 xy[i][j] += x[i][k] * y[k][j]; 80 } 81 } 82 } 83 84 for (i = 0; i < 4; i++) { 85 for (j = 0; j < 2; j++) { 86 printf("%4d", xy[i][j]); 87 } 88 putchar('\n'); 89 } 90}
回答2件
あなたの回答
tips
プレビュー