永发信息网

c语言怎么编求导

答案:5  悬赏:30  手机版
解决时间 2021-11-27 06:35
c语言怎么编求导
最佳答案
求导数有两种,一种是表达式求导,一种是数值求导。
    表达式求导:需要对表达式进行词法分析,然后用常见的求导公式进行演算,求得导函数。在这方面,数学软件matrix,maple做得非常好。如果自己用C进行编程,不建议。

    数值求导:利用导数的定义,用差分计算,当自变量趋于0时,前后两次差分收敛到需要精度,计算结束。这种方法可以求得某一点的导数。
    例如:
    求一阶导数,原函数 y = f(x), 程序中是float f(float x){ ...}

    dx=0.01;    //设 dx 初值
    do{
        dd1=(f(x0) - f(x0+dx))/dx;    //计算导数dd1
        dx = 0.5 * dx;  // 减小步长
        dd2=(f(x0) - f(x0+dx))/dx;    //计算导数dd2
    }while (fabs(dd1-dd2) >= 1e-06) //判断新旧导数值之差是否满足精度,满足则得结果,不满足则返回
全部回答
你定义的f的两个参数是float型,在main函数中f的参数又变成long double型了,明显不对
float f(float x,float y)你定义的时候是浮点型,而且你之后的确有小数,所以你后面 long double 应该改成float,还有printf("%d\n",dd2);把%d改成%f
if (fabs(dd1-dd2) printf("%lf\n",dd2);//dd2为实型double,要使用lf格式输出
#include
#include
//此处函数定义的时候 返回值和参数类型都是float,最好改为double,与主程序相对应
float f(float x,float y)
{
y=2*x*x+3;
return y;

}

void main()
{

long double dx,dy,dd1,dd2,x,y,x0,eps; //这里只需要定义为double型的变量就可以了
dx=0.5,x0=3,eps=0.000001;
//下边调用的y没有初始化,虽然对程序结果无影响,但是编译时会有警告,建议初始化为0.0
//当然也可以将上边定义的函数f() 的参数改为只有一个 如:double f(double x){},则不需要变量y
dy=f(x0,y)-f(x0+dx,y);
dd1=dy/dx;
loop: dx=0.5*dx;
dy=f(x0,y)-f(x0+dx,y);
dd2=dy/dx;

if (fabs(dd1-dd2) printf("%d\n",dd2); //这里 如果你想打印浮点数 ,那么应该是printf("%.6lf\n",dd2)
//如果想打印整数,则需要将dd2先强制性转换成int型,即 printf("%d\n", (int)dd2 );
else
{ dd1=dd2;
goto loop;
}

}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
中国电信(达玛沟乡电信客服部)地址在什么地方
逆转未来最后什么意思
什么是函数的正交性
瑞典进口洗衣机ask
有关父母爱儿女的俗语
买家退货用到付怎么办?
假期,什么东西好卖
奔日数控蓝屏是怎么回事
Merida(美利达)焦作体育馆旗舰店地址在什么地
伊朗那边上网费用怎么算 因为常年在那边工作
什么是渔具,渔法
倒开水进去杯子里面,会出现图片的杯子叫什么
许寿裳的人物简介
求教涤纶纱中DDB是什么意思。
前任三孟云和林佳为什么分手
推荐资讯
请问极限里分式可以这样化简吗?为什么?
胳膊上部疼痛什么原因
电冰箱R600封口的方法
萨摩什么时候换牙
求驯龙高手第三季全集
请问信用不好是什么意思
博越,最高时速能跑到多少码,要准确率,我问
中国农业银行(江口支行)(江口街中国农业银行)
老师怎么拯救学渣学生
直埋保温钢管φ219*7/φ320*3代表什么意
秀美甲地址在什么地方,我要处理点事!
窑炉使用天然气比电加热窑炉节能吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?