質問編集履歴

9

意図的な内容抹消の取り消し

2019/01/09 01:02

投稿

hghg0929
hghg0929

スコア13

test CHANGED
@@ -1 +1 @@
1
- c言語についての質問
1
+ C言語の行列の解の求め方について
test CHANGED
@@ -1 +1,147 @@
1
+ C言語のプログラミングについての質問です。初めての投稿なのでお見苦しい点があると思います。
2
+
1
- 行列の掃き出し法のプログラムを作り、少し引かかところがあったので改善るための質問をしした
3
+ 3×3の行列の解を求めるプログラムを作っているのですが、うくいかず困っています
4
+
5
+ ガウスの掃き出し法を使うのですが、枢軸を行の最大値がある列として掃きだします。
6
+
7
+ 自分で作ってみたプログラムは下のようになりました。
8
+
9
+ ```c言語
10
+
11
+ #include <stdio.h>
12
+
13
+ #define nmax 3
14
+
15
+ void hakidashi(double b[nmax][nmax+1], int jp[nmax])
16
+
17
+ {
18
+
19
+ int i, j, k, l;
20
+
21
+ double bx[nmax]; /*各行の最大値*/
22
+
23
+ for(i=0;i<nmax;i++){
24
+
25
+ bx[i]=0.0;
26
+
27
+ for(j=0;j<nmax;j++){
28
+
29
+ if(b[i][j]>bx[i]){
30
+
31
+ jp[i]=j;
32
+
33
+ bx[i]=b[i][j];
34
+
35
+ }
36
+
37
+ else{
38
+
39
+ bx[i]=bx[i];
40
+
41
+ }
42
+
43
+ } /*i行の最大値bx[i]を求める*/
44
+
45
+ for(k=0;k<nmax+1;k++){
46
+
47
+ b[i][k]=b[i][k]/bx[i];
48
+
49
+ for(l=0;l<nmax;l++){
50
+
51
+ if(l!=i){
52
+
53
+ b[l][k]=b[l][k]-b[l][jp[i]]*b[i][k];
54
+
55
+ }
56
+
57
+ }
58
+
59
+ } /*i行以外の行を掃き出し*/
60
+
61
+ }
62
+
63
+ }
64
+
65
+ void irekae(double c[nmax][nmax+1], int jq[nmax])
66
+
67
+ {
68
+
69
+ int n, o;
70
+
71
+ double temp;
72
+
73
+ for(n=0;n<nmax;n++){
74
+
75
+ if(c[n][n]!=1.0){
76
+
77
+ for(o=0;o<nmax+1;o++){
78
+
79
+ temp=c[n][o];
80
+
81
+ c[n][o]=c[jq[n]][o];
82
+
83
+ c[jq[n]][o]=temp;
84
+
85
+ }
86
+
87
+ }
88
+
89
+ } /*単位行列になるように入れ替える*/
90
+
91
+ }
92
+
93
+ int main(void)
94
+
95
+ {
96
+
97
+ FILE *fp;
98
+
99
+ int i1, j1;
100
+
101
+ int J[nmax];
102
+
103
+ double a[nmax][nmax+1];
104
+
105
+ for(i1=0;i1<nmax;i1++){
106
+
107
+ J[i1]=0;
108
+
109
+ }
110
+
111
+ fp=fopen("gyouretsu.txt","r");
112
+
113
+ for(i1=0;i1<nmax;i1++){
114
+
115
+ fscanf(fp,"%lf%lf%lf%lf",&a[i1][0],&a[i1][1],&a[i1][2],&a[i1][3]);
116
+
117
+ } /*行列を読み込む*/
118
+
119
+ hakidashi(a, J); 
120
+
121
+ irekae(a, J); 
122
+
123
+ for(i1=0;i1<nmax;i1++){
124
+
125
+ printf("%lf %lf %lf %lf\n",a[i1][0],a[i1][1],a[i1][2],a[i1][3]);
126
+
127
+ } /*結果を出力*/
128
+
129
+ fclose(fp);
130
+
131
+ return 0;
132
+
133
+ }
134
+
135
+ ```
136
+
137
+ また、読み込んだファイルは下のようになります。
138
+
139
+ 58 86 53 1422
140
+
141
+ 64 6 69 1052
142
+
143
+ 65 82 21 1109
144
+
145
+ いくら考えても自分では手も足も出ず困っています。
146
+
147
+ お願いします。

8

修正

2019/01/09 01:02

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- C言語の行列の解の求め方について
1
+ c言語についての質問
test CHANGED
@@ -1,153 +1 @@
1
- C言語のプログラミングについての質問です。初めての投稿なのでお見苦しい点があると思います。
2
-
3
- 3×3の行列の解を求めるプログラムを作っているのですが、うくいかず困っています
1
+ 行列の掃き出し法のプログラムを作り、少し引かかところがあったので改善るための質問をしした
4
-
5
- ガウスの掃き出し法を使うのですが、枢軸を行の最大値がある列として掃きだします。
6
-
7
- 自分で作ってみたプログラムは下のようになりました。
8
-
9
- ```c言語
10
-
11
- #include <stdio.h>
12
-
13
- #define nmax 3
14
-
15
- void hakidashi(double b[nmax][nmax+1], int jp[nmax])
16
-
17
- {
18
-
19
- int i, j, k, l;
20
-
21
- double bx[nmax]; /*各行の最大値*/
22
-
23
- for(i=0;i<nmax;i++){
24
-
25
- bx[i]=0.0;
26
-
27
- for(j=0;j<nmax;j++){
28
-
29
- if(b[i][j]>bx[i]){
30
-
31
- jp[i]=j;
32
-
33
- bx[i]=b[i][j];
34
-
35
- }
36
-
37
- else{
38
-
39
- bx[i]=bx[i];
40
-
41
- }
42
-
43
- } /*i行の最大値bx[i]を求める*/
44
-
45
- for(k=0;k<nmax+1;k++){
46
-
47
- b[i][k]=b[i][k]/bx[i];
48
-
49
- for(l=0;l<nmax;l++){
50
-
51
- if(l!=i){
52
-
53
- b[l][k]=b[l][k]-b[l][jp[i]]*b[i][k];
54
-
55
- }
56
-
57
- }
58
-
59
- } /*i行以外の行を掃き出し*/
60
-
61
- }
62
-
63
- }
64
-
65
- void irekae(double c[nmax][nmax+1], int jq[nmax])
66
-
67
- {
68
-
69
- int n, o;
70
-
71
- double temp;
72
-
73
- for(n=0;n<nmax;n++){
74
-
75
- if(c[n][n]!=1.0){
76
-
77
- for(o=0;o<nmax+1;o++){
78
-
79
- temp=c[n][o];
80
-
81
- c[n][o]=c[jq[n]][o];
82
-
83
- c[jq[n]][o]=temp;
84
-
85
- }
86
-
87
- }
88
-
89
- } /*単位行列になるように入れ替える*/
90
-
91
- }
92
-
93
- int main(void)
94
-
95
- {
96
-
97
- FILE *fp;
98
-
99
- int i1, j1;
100
-
101
- int J[nmax];
102
-
103
- double a[nmax][nmax+1];
104
-
105
- for(i1=0;i1<nmax;i1++){
106
-
107
- J[i1]=0;
108
-
109
- }
110
-
111
- fp=fopen("gyouretsu.txt","r");
112
-
113
- for(i1=0;i1<nmax;i1++){
114
-
115
- fscanf(fp,"%lf%lf%lf%lf",&a[i1][0],&a[i1][1],&a[i1][2],&a[i1][3]);
116
-
117
- } /*行列を読み込む*/
118
-
119
- hakidashi(a, J); 
120
-
121
- irekae(a, J); 
122
-
123
- for(i1=0;i1<nmax;i1++){
124
-
125
- printf("%lf %lf %lf %lf\n",a[i1][0],a[i1][1],a[i1][2],a[i1][3]);
126
-
127
- } /*結果を出力*/
128
-
129
- fclose(fp);
130
-
131
- return 0;
132
-
133
- }
134
-
135
- ```
136
-
137
-
138
-
139
-
140
-
141
- また、読み込んだファイルは下のようになります。
142
-
143
- 58 86 53 1422
144
-
145
- 64 6 69 1052
146
-
147
- 65 82 21 1109
148
-
149
-
150
-
151
- いくら考えても自分では手も足も出ず困っています。
152
-
153
- お願いします。

7

変更

2019/01/05 13:07

投稿

hghg0929
hghg0929

スコア13

test CHANGED
File without changes
test CHANGED
@@ -102,6 +102,12 @@
102
102
 
103
103
  double a[nmax][nmax+1];
104
104
 
105
+ for(i1=0;i1<nmax;i1++){
106
+
107
+ J[i1]=0;
108
+
109
+ }
110
+
105
111
  fp=fopen("gyouretsu.txt","r");
106
112
 
107
113
  for(i1=0;i1<nmax;i1++){

6

誤字

2019/01/04 16:01

投稿

hghg0929
hghg0929

スコア13

test CHANGED
File without changes
test CHANGED
@@ -102,7 +102,7 @@
102
102
 
103
103
  double a[nmax][nmax+1];
104
104
 
105
- fp=fopen("AugMat83.txt","r");
105
+ fp=fopen("gyouretsu.txt","r");
106
106
 
107
107
  for(i1=0;i1<nmax;i1++){
108
108
 

5

誤字

2019/01/04 14:48

投稿

hghg0929
hghg0929

スコア13

test CHANGED
File without changes
test CHANGED
File without changes

4

誤字

2019/01/04 14:45

投稿

hghg0929
hghg0929

スコア13

test CHANGED
File without changes
test CHANGED
@@ -96,8 +96,6 @@
96
96
 
97
97
  FILE *fp;
98
98
 
99
- int n1, m1;
100
-
101
99
  int i1, j1;
102
100
 
103
101
  int J[nmax];
@@ -105,8 +103,6 @@
105
103
  double a[nmax][nmax+1];
106
104
 
107
105
  fp=fopen("AugMat83.txt","r");
108
-
109
- fscanf(fp,"%d %d\n",&n1,&m1);
110
106
 
111
107
  for(i1=0;i1<nmax;i1++){
112
108
 

3

誤字

2019/01/04 14:41

投稿

hghg0929
hghg0929

スコア13

test CHANGED
File without changes
test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  int i, j, k, l;
20
20
 
21
- double bx[nmax];
21
+ double bx[nmax]; /*各行の最大値*/
22
22
 
23
23
  for(i=0;i<nmax;i++){
24
24
 
@@ -40,7 +40,7 @@
40
40
 
41
41
  }
42
42
 
43
- }
43
+ } /*i行の最大値bx[i]を求める*/
44
44
 
45
45
  for(k=0;k<nmax+1;k++){
46
46
 
@@ -56,7 +56,7 @@
56
56
 
57
57
  }
58
58
 
59
- }
59
+ } /*i行以外の行を掃き出し*/
60
60
 
61
61
  }
62
62
 
@@ -86,7 +86,7 @@
86
86
 
87
87
  }
88
88
 
89
- }
89
+ } /*単位行列になるように入れ替える*/
90
90
 
91
91
  }
92
92
 
@@ -112,17 +112,17 @@
112
112
 
113
113
  fscanf(fp,"%lf%lf%lf%lf",&a[i1][0],&a[i1][1],&a[i1][2],&a[i1][3]);
114
114
 
115
- }
115
+ } /*行列を読み込む*/
116
116
 
117
- hakidashi(a, J);
117
+ hakidashi(a, J); 
118
118
 
119
- irekae(a, J);
119
+ irekae(a, J); 
120
120
 
121
121
  for(i1=0;i1<nmax;i1++){
122
122
 
123
123
  printf("%lf %lf %lf %lf\n",a[i1][0],a[i1][1],a[i1][2],a[i1][3]);
124
124
 
125
- }
125
+ } /*結果を出力*/
126
126
 
127
127
  fclose(fp);
128
128
 

2

誤字

2019/01/04 13:56

投稿

hghg0929
hghg0929

スコア13

test CHANGED
File without changes
test CHANGED
@@ -5,6 +5,8 @@
5
5
  ガウスの掃き出し法を使うのですが、枢軸を行の最大値がある列として掃きだします。
6
6
 
7
7
  自分で作ってみたプログラムは下のようになりました。
8
+
9
+ ```c言語
8
10
 
9
11
  #include <stdio.h>
10
12
 
@@ -128,6 +130,10 @@
128
130
 
129
131
  }
130
132
 
133
+ ```
134
+
135
+
136
+
131
137
 
132
138
 
133
139
  また、読み込んだファイルは下のようになります。

1

誤字

2019/01/04 13:19

投稿

hghg0929
hghg0929

スコア13

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- C言語のプログラミングについての質問です。
1
+ C言語のプログラミングについての質問です。初めての投稿なのでお見苦しい点があると思います。
2
2
 
3
3
  3×3の行列の解を求めるプログラムを作っているのですが、うまくいかず困っています。
4
4