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); /* 領域の解放 */
}
No.3ベストアンサー
- 回答日時:
> y = dvector( 0, n );/*領域の確保*/
> y = rk4( y0, a, b, n, func );/*ルンゲクッタ法*/
> y = dvector( 0, n );/* y[0,1,....,n]の確保 */
> この部分が、関数の実体なのだと思うのですが、、、
これは関数を呼び出してる部分です。
呼んだ関数の実体(関数の処理が書かれているコード)がどこかにないといけません。
一般的なライブラリ関数なら該当するライブラリをリンクすれば良いのですが、ソース中に直にプロトタイプ宣言が書かれているということはユーザー定義の関数かと思われますので、その関数のソースコードがどこかになくてはいけません。
元のソースをネットなり書籍なりのどここから引っ張ってきたのなら、その近くにあるのかもしれませんので探してください。
No.1
- 回答日時:
> double *dvector(long i, long j); /* ベクトル量領域の確保*/
> double func(double x, double y); /* 関数の定義 */
プロトタイプ宣言されているこの2つの関数が無いと言ってるのですが、関数の実体はどこにありますか?
この回答への補足
y = dvector( 0, n );/*領域の確保*/
y = rk4( y0, a, b, n, func );/*ルンゲクッタ法*/
y = dvector( 0, n );/* y[0,1,....,n]の確保 */
この部分が、関数の実体なのだと思うのですが、、、
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
浮動小数点の定数
-
doubleの変数にintとintの割り...
-
C言語 関数プロトタイプ宣言の...
-
int とdoubleの比較
-
関数におけるif文とreturn文に...
-
c言語で、繰り返し文の中で、0....
-
C 開放してるのにエラー(doubl...
-
(C,C++言語)関数の引数は自動キ...
-
float型とdouble型の変数の違い...
-
C言語 質問です。
-
複利の利率を求めるプログラム...
-
C言語の問題です。
-
2次方程式の解を求めるプログ...
-
C言語の型による処理速度の違い
-
物体が往復する動きを作りたい
-
ボール同士の衝突
-
相互相関関数
-
二次関数で
-
EXE1→DLL→EXE2数値を受け渡す方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
doubleの変数にintとintの割り...
-
c言語で、繰り返し文の中で、0....
-
C 開放してるのにエラー(doubl...
-
C言語を実行すると-infが出てき...
-
float型とdouble型の変数の違い...
-
至急です! マクロ定義で #defi...
-
C言語の型による処理速度の違い
-
関数におけるif文とreturn文に...
-
C言語 関数プロトタイプ宣言の...
-
浮動小数点の定数
-
int とdoubleの比較
-
doubleは常に%lfとするべきなのか
-
difftime()について
-
C言語でdouble型の小数点の引き...
-
たくさんの数の平均を求める方...
-
斜辺と角度て底辺と高さを出したい
-
C言語で台形公式を使った二重積...
-
float?数字の後にLがつくもの
-
listに構造体を格納
おすすめ情報