みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ルンゲクッタのプロクラム実行できません

プログラムの実行ができません。
どこを直したらよいのか教えて下さい。
よろしくお願いします。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>






double *dvector(long i,long j);
void free_dvector(double *a,long i);
double func(double x,double y);

double *rk4(double y0,double a,double b, int n,double(*f)());

int main(void)
{
double *y,h,a=0.0, b=1.0, y0=1.0;
int i,n;

printf("分割数を入力して下さい------->");
scanf("%d",&n);

y=dvector(0,n);
y=rk4(y0,a,b,n,func);

h=(b-a)/n;
for(i=0;i<=n;i++)
{
printf("x=%f \t y=%f \n",a+i*h,y[i]);
}
return 0;
}

double *rk4(double y0,double a, double b,int n,double (*f)())
{
double k1,k2,k3,k4,h,*y,x;
int i;

y=dvector(0,n);
h=(b-a)/n;

y[0]=y0;
x=a;
for(i=0;i<n;i++)
{
k1=f(x,y[i]);
k2=f(x+h/2.0,y[i]+h*k1/2.0);
k3=f(x+h/2.0,y[i]+h*k2/2.0);
k4=f(x+h,y[i]+h*k3);
y[i+1]=y[i]+h/6.0*(k1+2.0*k2+2.0*k3+k4);
x +=h;
}

return y;
free_dvector(y,0);
}

投稿日時 - 2006-08-23 16:28:52

QNo.2357480

すぐに回答ほしいです

質問者が選んだベストアンサー

ネット上で見つけたー。
double *dvector(long i, long j) /* a[i]~a[i+j]の領域を確保 */
{
double *a;

if ( (a=(double *)malloc( ((j-i+1)*sizeof(double))) ) == NULL )
{
printf("メモリが確保できません(from dvector) \n");
exit(1);
}

return(a-i);
}

double func(double x, double y)
{
return( x + y );
}
を追加すれば動くんじゃない?
http://www.ma.is.saga-u.ac.jp/minamoto/book/book8/program/chap2/program29.c
http://www.ma.is.saga-u.ac.jp/minamoto/book/book8/program/chap8/program84.c

投稿日時 - 2006-08-23 19:01:10

お礼

ありがとうございます。動きました

投稿日時 - 2007-01-17 00:04:27

ANo.3

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

がると申します。
とりあえず単純なコンパイルエラーが出ますので、そこを直してからではないでしょうか?
# それ以外にも問題点山積みなコードですが……

もし「どうやってコンパイルエラーを取ったらいいのかわからない」のであれば、せめても、コンパイルして、エラーメッセージ貼り付けて、自分なりの考察を書いて、くらいはしておいたほうがよいと思います。

投稿日時 - 2006-08-23 18:46:47

ANo.1

>プログラムの実行ができません。
なぜ?コンパイルエラー?リンクエラー?
そもそもコンパイラはあるの?

>どこを直したらよいのか教えて下さい。
まず質問の要領を改めてください。
次に、このような質問を無視しない親切な回答者に感謝してください。
どこが悪かったのかを知る機会は滅多にない。

もし環境面の問題ではないとすると、
原因はおそらく定義がないことによるリンクエラー。
提示されたプログラムに文法の誤りはない。

double *dvector(long i,long j);
void free_dvector(double *a,long i);
double func(double x,double y);
double *rk4(double y0,double a,double b, int n,double(*f)());

定義って何?というレベルなら入門書を読んでください。

投稿日時 - 2006-08-23 17:19:48

あなたにオススメの質問