想写个数值微分的C语言程序,用中心差商求一阶导数,初学C语言,哪位大神或者学长学姐能帮忙看看,谢谢
答案:1 悬赏:50 手机版
解决时间 2021-03-23 06:07
- 提问者网友:姑娘长的好罪过
- 2021-03-22 14:42
想写个数值微分的C语言程序,用中心差商求一阶导数,初学C语言,哪位大神或者学长学姐能帮忙看看,谢谢
最佳答案
- 五星知识达人网友:一袍清酒付
- 2021-03-22 16:18
typedef double(*FUN_TYPE)(double);
double derive(double x0, double h, FUN_TYPE fun)
{
return (fun(x0 + h) - fun(x0 - h)) / 2.0 / h;
}
int main()
{
double d = 1.15;
double dd = derive(d, 0.01, exp);
cout << dd << endl;
}追问typedef是什么?请问这是c还是C++啊?最后一排也没看懂,能写简单点吗?
对了,最后一排都没有定义吧追答哦你要写c啊,那改成printf("%lf", dd);就行了,反正就是输出dd的值。
cout是c++的东西
typedef就是定义一个类型,我定义了FUN_TYPE这个类型,
这个类型实际上是接受一个double参数,返回一个double值的函数指针
这样的话derive不仅能计算exp这个函数,还能计算其他的函数,比如sin log等,只要是一个double参数,一个double返回值的,都可以往里代。
比如计算sinx在x=1处的近似导数
double dd = derive(1, 0.01, sin);追问T^T能把我的代码改正确吗?我真的没办法了,不太会C语言,没学过,选了计算物理,老师要求用C。因为不太懂,所以希望帮我改一下我的代码,让我知道怎么错了,谢谢啦O(∩_∩)O追答第一
double cf(x, h, f)
double x, h, (*f)(double);
{}这个风格是K & R c,现在已经很少用了
这样写
double cf(x, h, double(*f)(double))
{
dy =((*f)(x + h) -(*f)(x- h)) / (2 * h);
return dy;
}第二,这个没有必要,这不和exp是一样的嘛
double f(double x)
{
double y;
y = exp(x);
return(y);
}
main里面这样写
double x, h, dy, error;
x = 1.15;
h = 0.1;
dy = cf(x, h, exp);//这里直接用exp做参数,不用f。
error = dy - exp(1.15);//计算误差 刚看到步长要变
main里面这样调:
for(h = 0.1;h>0;h-=0.01)
{
dy = cf(x, h, exp);
error = dy - exp(1.15);
printf("error = %lf
", error);
}追问谢谢O(∩_∩)O!谢谢O(∩_∩)O!
double derive(double x0, double h, FUN_TYPE fun)
{
return (fun(x0 + h) - fun(x0 - h)) / 2.0 / h;
}
int main()
{
double d = 1.15;
double dd = derive(d, 0.01, exp);
cout << dd << endl;
}追问typedef是什么?请问这是c还是C++啊?最后一排也没看懂,能写简单点吗?
对了,最后一排都没有定义吧追答哦你要写c啊,那改成printf("%lf", dd);就行了,反正就是输出dd的值。
cout是c++的东西
typedef就是定义一个类型,我定义了FUN_TYPE这个类型,
这个类型实际上是接受一个double参数,返回一个double值的函数指针
这样的话derive不仅能计算exp这个函数,还能计算其他的函数,比如sin log等,只要是一个double参数,一个double返回值的,都可以往里代。
比如计算sinx在x=1处的近似导数
double dd = derive(1, 0.01, sin);追问T^T能把我的代码改正确吗?我真的没办法了,不太会C语言,没学过,选了计算物理,老师要求用C。因为不太懂,所以希望帮我改一下我的代码,让我知道怎么错了,谢谢啦O(∩_∩)O追答第一
double cf(x, h, f)
double x, h, (*f)(double);
{}这个风格是K & R c,现在已经很少用了
这样写
double cf(x, h, double(*f)(double))
{
dy =((*f)(x + h) -(*f)(x- h)) / (2 * h);
return dy;
}第二,这个没有必要,这不和exp是一样的嘛
double f(double x)
{
double y;
y = exp(x);
return(y);
}
main里面这样写
double x, h, dy, error;
x = 1.15;
h = 0.1;
dy = cf(x, h, exp);//这里直接用exp做参数,不用f。
error = dy - exp(1.15);//计算误差 刚看到步长要变
main里面这样调:
for(h = 0.1;h>0;h-=0.01)
{
dy = cf(x, h, exp);
error = dy - exp(1.15);
printf("error = %lf
", error);
}追问谢谢O(∩_∩)O!谢谢O(∩_∩)O!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯