定積分について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
初心者

定積分について

#1

投稿記事 by 初心者 » 15年前

#include <stdio.h>
#include <math.h>

/* 関数の定義 */
double func1(double x);
/* 台形公式 */
double traqezoidal( double a, double b, int n, double (*f)() );
/* sinの定義 */
double sin(double x);
/* π/2の定義 */
double M_PI_2;

int main(void)
{
int n=100;

printf("sqrt[5]*1/(4 + sin^2(x))) を [0,π/2]で積分します。分割数は%dです /n", n);
printf("結果は%20.15fです/n", trapezoidal(0.0, M_PI_2, n, func1) );

return 0;
}

/* 台形式 */
double traqezoidal( double a, double b, int n, double (*f)() )
{
double T, h;
int i;

h =( b - a ) /n ; /* 刻み幅の指定 */

/* 台形公式 */
T = ( (*f)(a) + (*f)(b) ) / 2.0;
for ( i = 1; i< n; i++) T += (*f)( a + i*h );
T *= h;

/* π/2の定義 */
M_PI_2 = 1.57079632679489661923;


return T;
}

/* 関数の定義 */
double func1(double x)
{
return( 1.0 / (4 + sin^2(x)) );
}


上のソースをコンパイルすると
(46):error C2297: '+':無効です。右オペランドには型 'double (_cdecl *)(double)'が指定されています。
(46):error C2064: -22 引数を取り込む関数には評価されません。
(46):warning C4033: 'func1' : 関数には戻り値が必要です。
と出ます。

どこを直せば良いのか教えて教えてほしいです。

asdf

Re:定積分について

#2

投稿記事 by asdf » 15年前

sin^2(x) は sin(x) * sin(x)に

printf("結果は%20.15fです/n", trapezoidal(0.0, M_PI_2, n, func1) );

のtrapezoidalをtraqezoidalに

あとは、関数へのポインタの(*f)()を(*f)(double)

とすればよいと思います。

asdf

Re:定積分について

#3

投稿記事 by asdf » 15年前

sin^2(x)というのは、
double func1(double x)
{
return( 1.0 / (4 + sin^2(x)) );
}

のところのことです

初級者

Re:定積分について

#4

投稿記事 by 初級者 » 15年前

誤:traqezoidal
正:trapezoidal

もぐりん

Re:定積分について

#5

投稿記事 by もぐりん » 15年前

こちらの掲示板にも回答が付いていますが・・・。

http://www2.realint.com/cgi-bin/tarticl ... intc+33696

初心者

謝罪

#6

投稿記事 by 初心者 » 15年前

すいません。
マルチポストを行ってしまい大勢の方に迷惑を掛けてしまいました。
自分の作ったソースが間違っていた場合、指摘していただきたいと思いますので今後もよろしくお願いいたします。

閉鎖

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