c语言怎么编求导
答案:5 悬赏:30 手机版
解决时间 2021-11-27 06:35
- 提问者网友:皆是孤独
- 2021-11-26 09:18
c语言怎么编求导
最佳答案
- 五星知识达人网友:患得患失的劫
- 2021-11-26 10:18
求导数有两种,一种是表达式求导,一种是数值求导。
- 表达式求导:需要对表达式进行词法分析,然后用常见的求导公式进行演算,求得导函数。在这方面,数学软件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) //判断新旧导数值之差是否满足精度,满足则得结果,不满足则返回
全部回答
- 1楼网友:有你哪都是故乡
- 2021-11-26 13:46
你定义的f的两个参数是float型,在main函数中f的参数又变成long double型了,明显不对
- 2楼网友:你哪知我潦倒为你
- 2021-11-26 13:25
float f(float x,float y)你定义的时候是浮点型,而且你之后的确有小数,所以你后面 long double 应该改成float,还有printf("%d\n",dd2);把%d改成%f
- 3楼网友:雾月
- 2021-11-26 12:19
if (fabs(dd1-dd2) printf("%lf\n",dd2);//dd2为实型double,要使用lf格式输出
- 4楼网友:雪起风沙痕
- 2021-11-26 11:38
#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;
}
}
#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)
//如果想打印整数,则需要将dd2先强制性转换成int型,即 printf("%d\n", (int)dd2 );
else
{ dd1=dd2;
goto loop;
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯