首页 > 其他分享 >C语言的导数和积分

C语言的导数和积分

时间:2022-12-15 21:47:02浏览次数:50  
标签:导数 积分 dd1 float C语言 dx dd2

用C进行导数和积分的运算

进行求导

设一个dx,利用f(x)-f(x-dx)/dx或f(x)-f(x+dx)/dx进行计算。

float qd(float x)
{ 
	float dx=0.01,y;
	y1=(sin(x)+cos(x)-sin(x-dx)-cos(x-dx))/dx; //即f'(x)=[f(x)-f(x-dx)]/dx
	return(y);
}

不断缩小dx的值,以提高精度。

float qd(float x)
 {
   float dx=0.01,dd1,dd2;//设置两个导数变量,让两变量相减求误差
   do
  {
   dd1=(f(x+dx)-f(x))/dx;
   dx=0.5*dx;//不断缩小dx的值,
   dd2=(f(x+dx)-f(x))/dx;
  }//通过不断迭代,让两变量的差不断缩小
   while(fabs(dd1-dd2)>=1e-06);//确定所需要的精度
   return(dd1);
 }

进行积分

确定每个小区间的值

float jf(float a,float b)//确定目标区间
{
    float s=0,d=0.0001;
    for (i=a;i<b;i+=d) //将目标区间分为1/d个小区间,并递进Xi
	{
		s+=f(i)*d;//即∑f(ξi)*dXi,为了简化计算使用Xi代替ξi
	}
    return(s);
}

确定小区间的数目

float jf(float a,float b)//确定目标区间
{
	float s=0,x=a,N=100000;
	for(int i=1;i<1+N;i++)//将目标区间分为N个小区间,一般越小越好。但由于浮点精度,不易过小
	{	
        x=(x+(b-a)/N);//不断递进Xi的i值
		s+=f(x)*((b-a)/N);//即∑f(ξi)*dXi,为了简化计算使用Xi代替ξi
	}
	return s;
}		

综上,C可以通过简单的代码来实现求导与积分的计算。

标签:导数,积分,dd1,float,C语言,dx,dd2
From: https://www.cnblogs.com/dawnyulin/p/16986060.html

相关文章