Xcodeでのc言語のプログクムについて。
Xcodeでのc言語のプログクムについて。
ルンゲークッタ法のプログラムを書いているのですがビルドエラーになってしまい、原因が分かりません。
ビルド結果は、
"_func",referenced from:
_main in main.o
"_dvector",referenced from:
_main in main.o
_rk4 in main.o
symbol(s) not found
collect2: ld returned 1 exit status
プログラムは、
#include <stdio.h>
#include <stdlib.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 ); /* y[0,1,....,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 += y[i];
}
return y;
free_dvector(y, 0); /* 領域の解放 */
}