質問するログイン新規登録

質問編集履歴

1

編集

2018/07/06 12:20

投稿

carnage0216
carnage0216

スコア194

title CHANGED
File without changes
body CHANGED
@@ -82,4 +82,91 @@
82
82
  関数vec_diff(float a[N],float b[N])とb[i]-=a[i];よりベクトルの引き算をfor (int i = 0; i < N; i++)より3回行っていることはわかるのですが、「何のため何を3回」行っているのかわかりません。
83
83
  プログラムを読んでみたのですが、意図した3点の座標を入れるための準備のようなものとしかわかりませんでした。
84
84
 
85
- こちらの[サイト](https://qiita.com/haya_walker/items/d64a5fc624c65a324fa2)を参考にしました。
85
+ こちらの[サイト](https://qiita.com/haya_walker/items/d64a5fc624c65a324fa2)を参考にしました。
86
+
87
+
88
+ <編集7/6>
89
+ あの後b[i] -= a[i];の a[i]とb[i]の計算を表示しよとしたのですが、うまくいきません。
90
+
91
+ ```
92
+ #include <stdio.h>
93
+
94
+ #define N 3 //the dimension of equation
95
+
96
+ void vec_diff(float a[N], float b[N]) {
97
+ /* Calcurate the difference of two vectors. Be caution that b[N] changes.*/
98
+ for (int i = 0; i < N; i++) {
99
+ b[i] -= a[i];
100
+ printf("である",b[i] -= a[i]);//付け加えた部分、b[i] -= a[i];の計算を表示しようとしたのですが、これをいれると計算は表示されないことはおろか間違った答えが出てきます。
101
+ }
102
+ }
103
+
104
+
105
+ int main() {
106
+ float m[N][N] = { { 5,-1,-1 },{ 2,1,-3 },{ 1,1,1 } }; // The matrix
107
+ float b[N] = { 0,-5,6 };
108
+
109
+ printf("The coefficient matrix is : \n");
110
+ for (int i = 0; i < N; i++) {
111
+ for (int j = 0; j < N; j++) {
112
+ printf("%1.f ", m[i][j]);
113
+ if (j == N - 1) {
114
+ printf("\n");
115
+ }
116
+ }
117
+ }
118
+
119
+ printf("\nUse Gauss method to solve equations : \n");
120
+ for (int i = 0; i < N; i++) {
121
+ for (int j = i + 1; j < N; j++) {
122
+ float coef = m[j][i] / m[i][i];
123
+ float del[N];
124
+
125
+ for (int k = 0; k < N; k++) {
126
+ del[k] = m[i][k] * coef;
127
+ }
128
+ vec_diff(del, m[j]);
129
+ b[j] -= b[i] * coef;
130
+ }
131
+ }
132
+
133
+ for (int i = N - 1; i >= 0; i--) {
134
+ float x = 1. / m[i][i];
135
+ m[i][i] *= x;
136
+ b[i] *= x;
137
+
138
+ for (int j = 0; j < i; j++) {
139
+ b[j] -= b[i] * m[j][i];
140
+ m[j][i] = 0;
141
+ }
142
+ }
143
+
144
+ for (int i = 0; i < N; i++) {
145
+ for (int j = 0; j < N; j++) {
146
+ printf("%1.f ", m[i][j]);
147
+ if (j == N - 1) {
148
+ printf("\n");
149
+ }
150
+ }
151
+ }
152
+
153
+ for (int i = 0; i < N; i++) {
154
+ printf("%f です", b[i]);
155
+ }
156
+
157
+ return 0;
158
+ }
159
+ ```
160
+ 実行すると今のように出ます。
161
+ ```
162
+ The coefficient matrix is :
163
+ 5 -1 -1
164
+ 2 1 -3
165
+ 1 1 1
166
+
167
+ Use Gauss method to solve equations :
168
+ であるであるであるであるであるであるであるであるである1 0 0
169
+ -2 1 0
170
+ 2 -1 1
171
+ 0.355863 です-0.271378 です2.050691 です
172
+ ```