#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' : 関数には戻り値が必要です。
と出ます。
どこを直せば良いのか教えて教えてほしいです。
定積分について
Re:定積分について
sin^2(x) は sin(x) * sin(x)に
printf("結果は%20.15fです/n", trapezoidal(0.0, M_PI_2, n, func1) );
のtrapezoidalをtraqezoidalに
あとは、関数へのポインタの(*f)()を(*f)(double)
とすればよいと思います。
printf("結果は%20.15fです/n", trapezoidal(0.0, M_PI_2, n, func1) );
のtrapezoidalをtraqezoidalに
あとは、関数へのポインタの(*f)()を(*f)(double)
とすればよいと思います。
Re:定積分について
sin^2(x)というのは、
double func1(double x)
{
return( 1.0 / (4 + sin^2(x)) );
}
のところのことです
double func1(double x)
{
return( 1.0 / (4 + sin^2(x)) );
}
のところのことです