オイラーの公式 c言語

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kanaya
記事: 5
登録日時: 9年前

オイラーの公式 c言語

#1

投稿記事 by kanaya » 9年前

以下はdy/dx=4xとしてx0=1,y0=1としてx=2の時のyの値を求めるプログラムです。

コード:

#include <stdio.h>

void ans(double (*func)(double,double), double x0, double y0, double x);
double func1(double x, double y);
int main(int argc, char* argv[])
{
	ans(func1,1,1,2);
	return 0;
}
void ans(double (*func)(double,double), double x0, double y0, double x)
{
	int N=10;
	int i;
	double xn;
	double yn;
	double h;

	xn=x0;
	yn=y0;
	h=(x-x0)/N;

	printf("#i\tx\ty\n");
	for(i=0;i<=N;i++)
	{
		printf("%d\t%f\t%f\n",i,xn,yn);
		yn+=h*(*func)(xn,yn);
		xn+=h;
	}
}
double func1(double x, double y)
{
	return 4*x;
}
このプログラムを実行させるとy=6.8という値がでてきます。実際に計算するとy=7になるので値は近似していると言えます。
ここで初期条件をx0=1,y0=1,y1=7としてxが2に近似するようなxの値を求めるプログラムに上のソースコードを書き換えることで変更したいです。3行目と10行目のdouble xをdouble y1に変えるほかどこをどのように変更すればプログラムとして完成するのでしょうか?自分で変更してみてもコンパイルエラーが何度も出てしまったためここに質問させていただく次第です。よろしくお願いします。

超初級者
記事: 56
登録日時: 10年前

Re: オイラーの公式 c言語

#2

投稿記事 by 超初級者 » 9年前

元の問題の解析解である
y = 2x^2 - 1
の逆関数
y = sqrt((x + 1) / 2)
をxについて微分した結果をリターンするよう、
func1の中身を

return 1 / (4 * sqrt((x + 1) / 2));

にします。
#include <math.h>
を忘れずに。

main関数におけるansの呼び出し時に、
最後の引数を7にします。

これでOKのはず。他の箇所には手を入れなくてすむはず。

超初級者
記事: 56
登録日時: 10年前

Re: オイラーの公式 c言語

#3

投稿記事 by 超初級者 » 9年前

ところで、コンパイルエラーの原因を知りたければ、
どんなコードをコンパイルしたときに
何というエラーが出たかを
具体的に書いてください。

単に「コンパイルエラーが出た」という問いかけで
答えられる人はいないと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る