c语言用指针函数求积分 c语言函数指针( 二 )


其实,这两种表达在理论上是等价的,不过我发现修改后,在n同样大小的情况下,结果的精度有一点点下降,还真不知为什么???
这样的话lz应该能理解了吧,其实一楼的算法还有不少值得改进的地方 , 希望lz能有所突破c语言用指针函数求积分?。?
求c语言指向函数的指针求定积分公式的原理讲解下面的代码就是使用矩形法求定积分的 。
分别求了sin(x)cos(x)e^x 的定积分
#include iostream
#include cmath
using namespace std;
floatintegral(float (*p) (float), float a, float b, int n);
floatfsin(float);// 对fsin函数作声明
floatfcos(float);// 对fcos函数作声明
floatfexp(float);// 对fexp函数作声明
int main()
{
floata1, b1, a2, b2, a3, b3, c, (*p) (float);
intn= 40;// 划分40个小矩形
cout"input a1,b1(sin(x) 定积分的下限和上限):";//输入求sin(x) 定积分的下限和上限
cina1b1;
cout"input a2,b2:(cos(x) 定积分的下限和上限 )";// 输入求cos(x) 定积分的下限和上限
cina2b2;
cout"input a3,b3:(e^x定积分的下限和上限)";
cina3b3;
p = fsin;
c = integral(p, a1, b1, n);// 求出sin(x)的定积分
cout"The integral of sin(x) is :"cendl;
p = fcos;
c = integral(p, a2, b2, n);// 求出cos(x)的 定积分
cout"The integral of cos(x) is :"cendl;;
p = fexp;
c = integral(p, a3, b3, n);// 求出 的定积分
cout"The integral of exp(x) is :"cendl;
return 0;
}
float integral(float (*p) (float), float a, float b, int n)
//用矩形法求定积分的通用函数
{
inti;
floatx, h, s;
h = (b - a) / n;
x = a;
s = 0;
for (i = 1; i = n; i++)
{
x = x + h;
s = s + (*p) (x) * h;
}
return(s);
}
float fsin(float x)// 计算sin(x) 的函数
{
return sin(x);
}
float fcos(float x)// 计算cos(x) 的函数
{
return cos(x);
}
float fexp(float x)// 计算exp(x)的函数
{
return exp(x);
}
用C语言求积分基本是这样的,用梯形发求定积分,对应于一个积分式就要有一段程序,不过你可以改变程序的一小部分来改变你所要求的积分式 。
以c为例:求f(x)=xsinx从1到2的积分
#include math.h
float integral(float(*fun)(float x),float a,float b,int,n)
{float s,h,y;
int i;
s=(fun(a)+fun(b))/2;
h=(b-a)/n; /*积分步长*/
for(i=1;in;i++)
s=s+fun(a+i*h);
y=s*h;
return y;/*返回积分值*/
}
float f(float x)
{return(x*sinx)/*修改此处可以改变被积函数*/
}
main()
{float y;
y=integral(f,1.0,2.0,150);/*修改此处可以改变积分上下限和步长*/
printf("y=%f\n",y);
}
【c语言用指针函数求积分 c语言函数指针】c语言用指针函数求积分的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于c语言函数指针、c语言用指针函数求积分的信息别忘了在本站进行查找喔 。