質問編集履歴

2

呼び出し部分の追記をしました.また,qsort()を使ってはとの提案があったのでそちらも試してみました.

2019/09/04 09:47

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -130,7 +130,7 @@
130
130
 
131
131
  int i,j,k;
132
132
 
133
- for(i=0;i<FTRDIM;i++) sortIndex[i]=0;
133
+ for(i=0;i<FTRDIM;i++) sortIndex[i]=i;
134
134
 
135
135
 
136
136
 

1

呼び出し部分の追記をしました.また,qsort()を使ってはとの提案があったのでそちらも試してみました.

2019/09/04 09:47

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,8 +2,22 @@
2
2
 
3
3
 
4
4
 
5
+
6
+
7
+
8
+
9
+
10
+
5
11
  コード必要な部分のみ記述します.
6
12
 
13
+
14
+
15
+
16
+
17
+ 呼び出し部分も追記します.
18
+
19
+ eigenValとeigenVec[]が1対1対応で,eigenVec[]も一緒にソートされて欲しいためにsortIndex[]は置いています.
20
+
7
21
  ```C
8
22
 
9
23
  #define CTGRY 46
@@ -94,4 +108,196 @@
94
108
 
95
109
  }
96
110
 
111
+
112
+
113
+ void ReadEigenVV( double EigenVal[CTGRY][FTRDIM], double EigenVec[CTGRY][FTRDIM][FTRDIM] )
114
+
115
+ {
116
+
117
+ FILE *fp;
118
+
119
+ int sortIndex[FTRDIM];
120
+
121
+ fp=fopen(EIGENVV,"r");
122
+
123
+ if(fp==NULL){
124
+
125
+ printf("cannot open %s",EIGENVV);
126
+
127
+ exit(0);
128
+
129
+ }
130
+
131
+ int i,j,k;
132
+
133
+ for(i=0;i<FTRDIM;i++) sortIndex[i]=0;
134
+
135
+
136
+
137
+ for(i=0;i<CTGRY;i++){
138
+
139
+ for(j=0;j<FTRDIM;j++)
140
+
141
+ fscanf(fp,"%lf",&EigenVal[i][j]);
142
+
143
+
144
+
145
+ quick_sort(EigenVal[i],0,FTRDIM-1,sortIndex);
146
+
147
+
148
+
149
+ for(j=0;j<FTRDIM;j++)
150
+
151
+ for(k=0;k<FTRDIM;k++)
152
+
153
+ fscanf(fp,"%lf",&EigenVec[i][sortIndex[j]][k]);
154
+
155
+
156
+
157
+ for(j=0;j<FTRDIM;j++)
158
+
159
+ printf("%d:%lf\n",j,EigenVal[i][j]);
160
+
161
+
162
+
163
+ }
164
+
165
+
166
+
167
+ }
168
+
97
169
  ```
170
+
171
+
172
+
173
+ qsortを使ってみてはとの提案があったのでその方法でも書いてみましたが,こちらはこちらでsegmentation faultは起きてしまいます...
174
+
175
+ ```c
176
+
177
+ #define EIGENVV "eigenvv.dic"
178
+
179
+ #define CTGRY 46
180
+
181
+ #define FTRDIM 196
182
+
183
+
184
+
185
+ typedef struct
186
+
187
+ {
188
+
189
+ double eigenVal;
190
+
191
+ double eigenVec[FTRDIM];
192
+
193
+ }eigenSet;
194
+
195
+
196
+
197
+
198
+
199
+ int compare(const void *a,const void *b){
200
+
201
+ double A= ((eigenSet *)b)->eigenVal;
202
+
203
+ double B= ((eigenSet *)a)->eigenVal;
204
+
205
+
206
+
207
+ if(A>B){
208
+
209
+ return -1;
210
+
211
+ }else if(A<B){
212
+
213
+ return 1;
214
+
215
+ }else{
216
+
217
+ return 0;
218
+
219
+ }
220
+
221
+ }
222
+
223
+
224
+
225
+ void ReadEigenVV( double EigenVal[CTGRY][FTRDIM], double EigenVec[CTGRY][FTRDIM][FTRDIM] )
226
+
227
+ {
228
+
229
+ FILE *fp;
230
+
231
+ fp=fopen(EIGENVV,"r");
232
+
233
+ if(fp==NULL){
234
+
235
+ printf("cannot open %s",EIGENVV);
236
+
237
+ exit(0);
238
+
239
+ }
240
+
241
+ int i,j,k;
242
+
243
+ eigenSet eSet[FTRDIM];
244
+
245
+
246
+
247
+ for(i=0;i<CTGRY;i++){
248
+
249
+ for(j=0;j<FTRDIM;j++)
250
+
251
+ fscanf(fp,"%lf",&EigenVal[i][j]);
252
+
253
+ for(j=0;j<FTRDIM;j++)
254
+
255
+ eSet[j].eigenVal=EigenVal[i][j];
256
+
257
+
258
+
259
+ for(j=0;j<FTRDIM;j++)
260
+
261
+ for(k=0;k<FTRDIM;k++)
262
+
263
+ fscanf(fp,"%lf",&EigenVec[i][j][k]);
264
+
265
+ for(j=0;j<FTRDIM;j++)
266
+
267
+ for(k=0;k<FTRDIM;k++)
268
+
269
+ eSet[j].eigenVec[k]=EigenVec[i][j][k];
270
+
271
+
272
+
273
+
274
+
275
+ qsort(eSet,FTRDIM,FTRDIM*sizeof(eigenSet),compare);
276
+
277
+
278
+
279
+ for(j=0;j<FTRDIM;j++)
280
+
281
+ EigenVal[i][j]=eSet[j].eigenVal;
282
+
283
+ for(j=0;j<FTRDIM;j++)
284
+
285
+ for(k=0;k<FTRDIM;k++)
286
+
287
+ EigenVec[i][j][k]=eSet[j].eigenVec[k];
288
+
289
+
290
+
291
+ for(j=0;j<FTRDIM;j++)
292
+
293
+ printf("%d:%lf\n",j,EigenVal[i][j]);
294
+
295
+
296
+
297
+ }
298
+
299
+
300
+
301
+ }
302
+
303
+ ```