質問編集履歴

1

編集

2018/07/06 12:20

投稿

carnage0216
carnage0216

スコア194

test CHANGED
File without changes
test CHANGED
@@ -167,3 +167,177 @@
167
167
 
168
168
 
169
169
  こちらの[サイト](https://qiita.com/haya_walker/items/d64a5fc624c65a324fa2)を参考にしました。
170
+
171
+
172
+
173
+
174
+
175
+ <編集7/6>
176
+
177
+ あの後b[i] -= a[i];の a[i]とb[i]の計算を表示しよとしたのですが、うまくいきません。
178
+
179
+
180
+
181
+ ```
182
+
183
+ #include <stdio.h>
184
+
185
+
186
+
187
+ #define N 3 //the dimension of equation
188
+
189
+
190
+
191
+ void vec_diff(float a[N], float b[N]) {
192
+
193
+ /* Calcurate the difference of two vectors. Be caution that b[N] changes.*/
194
+
195
+ for (int i = 0; i < N; i++) {
196
+
197
+ b[i] -= a[i];
198
+
199
+ printf("である",b[i] -= a[i]);//付け加えた部分、b[i] -= a[i];の計算を表示しようとしたのですが、これをいれると計算は表示されないことはおろか間違った答えが出てきます。
200
+
201
+ }
202
+
203
+ }
204
+
205
+
206
+
207
+
208
+
209
+ int main() {
210
+
211
+ float m[N][N] = { { 5,-1,-1 },{ 2,1,-3 },{ 1,1,1 } }; // The matrix
212
+
213
+ float b[N] = { 0,-5,6 };
214
+
215
+
216
+
217
+ printf("The coefficient matrix is : \n");
218
+
219
+ for (int i = 0; i < N; i++) {
220
+
221
+ for (int j = 0; j < N; j++) {
222
+
223
+ printf("%1.f ", m[i][j]);
224
+
225
+ if (j == N - 1) {
226
+
227
+ printf("\n");
228
+
229
+ }
230
+
231
+ }
232
+
233
+ }
234
+
235
+
236
+
237
+ printf("\nUse Gauss method to solve equations : \n");
238
+
239
+ for (int i = 0; i < N; i++) {
240
+
241
+ for (int j = i + 1; j < N; j++) {
242
+
243
+ float coef = m[j][i] / m[i][i];
244
+
245
+ float del[N];
246
+
247
+
248
+
249
+ for (int k = 0; k < N; k++) {
250
+
251
+ del[k] = m[i][k] * coef;
252
+
253
+ }
254
+
255
+ vec_diff(del, m[j]);
256
+
257
+ b[j] -= b[i] * coef;
258
+
259
+ }
260
+
261
+ }
262
+
263
+
264
+
265
+ for (int i = N - 1; i >= 0; i--) {
266
+
267
+ float x = 1. / m[i][i];
268
+
269
+ m[i][i] *= x;
270
+
271
+ b[i] *= x;
272
+
273
+
274
+
275
+ for (int j = 0; j < i; j++) {
276
+
277
+ b[j] -= b[i] * m[j][i];
278
+
279
+ m[j][i] = 0;
280
+
281
+ }
282
+
283
+ }
284
+
285
+
286
+
287
+ for (int i = 0; i < N; i++) {
288
+
289
+ for (int j = 0; j < N; j++) {
290
+
291
+ printf("%1.f ", m[i][j]);
292
+
293
+ if (j == N - 1) {
294
+
295
+ printf("\n");
296
+
297
+ }
298
+
299
+ }
300
+
301
+ }
302
+
303
+
304
+
305
+ for (int i = 0; i < N; i++) {
306
+
307
+ printf("%f です", b[i]);
308
+
309
+ }
310
+
311
+
312
+
313
+ return 0;
314
+
315
+ }
316
+
317
+ ```
318
+
319
+ 実行すると今のように出ます。
320
+
321
+ ```
322
+
323
+ The coefficient matrix is :
324
+
325
+ 5 -1 -1
326
+
327
+ 2 1 -3
328
+
329
+ 1 1 1
330
+
331
+
332
+
333
+ Use Gauss method to solve equations :
334
+
335
+ であるであるであるであるであるであるであるであるである1 0 0
336
+
337
+ -2 1 0
338
+
339
+ 2 -1 1
340
+
341
+ 0.355863 です-0.271378 です2.050691 です
342
+
343
+ ```