プロが教えるわが家の防犯対策術!

c言語で積分をしています。

a~bまで積分する関数を
dobule integral(double (*f)(double), double a, double b)
{
・・・・・・
return s; /*sが計算結果*/
}
としています。


fx=x*x を積分するときは
double fx(double x)
{
return x*x;
}
を用意して、

main()
{
double ans = integral(fx, 0.0, 1.0);
}
という具合で現在やっています。


本題なのですが、
main関数の中でxを宣言して、そのxで同じように積分をしたいのです。
どうすればよいのでしょうか?
良い方法があれば教えて頂きたいです。

A 回答 (3件)

No2の方が既に書いてますように、gxを定義して、gxを呼び出す形になると思います。

mainの中で、x1=x/3を定義するのは、無理があります。ここでxは、本来、integral関数の中で、a~bまでxを変化させる時の用途で用いられます。従って、integral関数の中でのみ、意味があります。
従って
double gx(double x)
{
double x1;
x1 = x/3.0;
return fx(x);
}
の関数を定義します。
main関数で
ans = integral(gx,0.0,1.0);
とすれば、integral関数の中からgxを呼び出すはずですので、このようにするのが最も素直な方法かと思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。
いろいろ考慮しているところです。

お礼日時:2003/12/06 17:24

「main関数の中で」というのは、何をなさりたいのかよく分かりませんが、


(x/3)*(x/3)を積分したいのであれば、手っ取り早いのは
double gx(x){ return fx(x/3.0); }
として、integralの引数にgxを渡すことですよね。
それではだめなのでしょうか。
    • good
    • 0

すいません。

質問の意味がよくわかりません。
>main関数の中でxを宣言して、そのxで同じように積分をしたいのです。
xとは、変数名のことですか。それとも関数名のことですか。
もし、fx=xを積分したいのなら、
double fx(double x)
{
return x;
}
とすれば、良いと思いますが。
なにをなさりたいのか、もうすこし具体的に説明していただけませんでしょうか。

この回答への補足

すいませんでした。
具体的に説明させてもらいます。

いまfxは
double fx(double x)
{
   x*x;
}
として、変えないとします。

で、(x/n)^2 や、(x-m)^2 を積分したいときに、
main関数の中で double x1 を宣言して
x1 = x1/n;
とします。
このx1をfxのxとして積分したいのです。

このとき、各関数をどのように呼び出して受け渡せばいいのかが分かりません。

どうも説明がしにくいのですが、伝わるでしょうか?

補足日時:2003/11/04 15:44
    • good
    • 0
この回答へのお礼

たびたびすいません。
要するに、
double fx(double x)
{
return x*x;
}
として、(x/3)*(x/3) を積分するには?ってことです。
mainの中で
double x, x1; double (*func)(double);

x1 = x/3;
func=fx;
(*func)(x_dash);
integral(…, func)
としてもうまくいかないんです。

お礼日時:2003/11/04 16:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!