前提
c言語でルンゲクッタ法についての課題に取り組んでいます。以下のエラーメッセージが発生しました。
実現したいこと
ここに実現したいことを箇条書きで書いてください。
rungekutta.csvのファイル内の数字を実行結果の通りにしたい
発生している問題・エラーメッセージ
fianlrep.c:34:36: error: indirection requires pointer operand ('double' invalid) fprintf(fout, "%d,%f,%f\n", i, *(h+i), *(N+i)); ^~~~~~ fianlrep.c:34:44: error: indirection requires pointer operand ('double' invalid) fprintf(fout, "%d,%f,%f\n", i, *(h+i), *(N+i));
該当のソースコード
c言語
1#include <stdio.h> 2#include <stdlib.h> 3#include <math.h> 4 5double func(double N); 6 7void rk4(double h, int n, double N); 8 9int main(int args, char *argv[]){ 10 double h, a, b, N; 11 int i, n; 12 13 printf("区間[ a, b]とその分割数を入力してください\n"); 14 printf("a = "); 15 scanf("%lf", &a); 16 printf("b = "); 17 scanf("%lf", &b); 18 printf("分割数 = "); 19 scanf("%d", &n); 20 21 printf("初期値Nを入力してください\n"); 22 printf("N = "); 23 scanf("%lf", &N); /* 初期値設定 */ 24 25 h = (b-a)/n; 26 27 rk4(h, n, N); /* ルンゲクッタ法 */ 28 29 /* ファイル保存 */ 30 FILE *fout; 31 fout = fopen("result rungekutta.csv", "w"); 32 fprintf(fout, "#index,N\n"); 33 for(i=0; i <=n; i++){ 34 fprintf(fout, "%d,%f,%f\n", i, *(h+i), *(N+i)); 35 } 36 fflush(fout); 37 fclose(fout); 38 39 return 0; 40} 41 42void rk4(double h, int n, double N){ 43 double k1, k2, k3, k4; 44 int i; 45 46 /* ルンゲクッタ法 */ 47 for(i=0; i<=n; i++){ 48 double z = 0.08664; /* ヨウ素の壊変定数 */ 49 k1=h*-z*N; 50 k2=h*-z*(N+k2/2.0); 51 k3=h*-z*(N+k2/2.0); 52 k4=h*-z*(N+k3); 53 N += (k1+k2*2+k3*2+k4)*(h/6.0); 54 printf("%lf\n", N); 55 } 56} 57
試したこと
fprintf文の中のをh,Nとそのままやったらcsvファイルの中の数字が全部入力した初期値になってしまいグラフが書けなかったので*(h+i)にして試したところ上記のエラー文が出てきました。
補足情報(FW/ツールのバージョンなど)
そもそもこの fprintf() で何を出力したいんでしょうか? n+1 個の double の値が2セットあるような雰囲気ですが、コード中にはそういうものがどこにもないですよね。