我是学的c++,可能不太一样吧,但是大体应该是一样的。
那个调用的函数,被调用的那个long double dcmtcf(x,y),在c++中应该是在xy前面加上定义的类型的。long double dcmtcf(double x,double y)
1、要有函数,设置成double类型的参数和返回值。
2、根据导数的定义求出导数,参数差值要达到精度极限,这是最关键的一步。根据导数的定义求出导数,参数差值要达到精度极限,这是最关键的一步。
初等函数是由幂函数、指数函数、对数函数、三角函数、反三角函数与常数经过有限次的有理运算(加、减、乘、除、有理数次乘方、有理数次开方)及有限次函数复合所产生、并且在定义域上能用一个解析式表示的函数。
所以将函数的类型枚举为:
monomial_type, exp_type, ln_type, sin_type, cos_type, tan_type, arcsin_type, arccos_type,arctan_tpye(这里暂时只考虑以e为底的指数和对数函数)
利用+ - 将每个部分分开(这里暂时没有考虑通过× ÷构造的符合函数,如果要考虑需要完善数据结构),比如说f(x)=sin(ln(x))-2x^2+3,解析成sin(ln(x)) 和 -2x^2 和 3
数据结构类似:
{部分数量,第一部分参数,第二部分参数}
然后每一个部分的数据结构类似{层数,{第一层系数,第一层函数类型,第一层幂次数},{第二层系数,第二层函数类型,第一层幂次数} }
那刚才的f(x)=sin(ln(x))-2x^2+3为例子
sin(-05ln(x)):
{2,{1,sin_type,0,1},{-05,ln_type,1},{1,monomial_type,2}}
-2x^2:
{1,{-2,monomial_type,2}}
+3:
{1,{3,monomial_type,0}}
PS:常数可以归为幂次数为0的幂函数。
相当于f(x)=sin(ln(x))-2x^2+3对应的数据结构:
{3, {2,{1,sin_type,0,1},{-05,ln_type,1},{1,monomial_type,2}}, {1,{-2,monomial_type,2}},{1,{3,monomial_type,0}}}
然后按照求导的规则从里到外对这些数据结构进行 *** 作就可以了
类似下面用c struct描述的数据结构:
struct elem_function;
struct elem_func_part ;
struct elem_func_layer;
struct elem_function
{
unsigned int part_cnt;
elem_func_part parts[MAX_SIZE];
};
struct elem_func_part
{
unsigned int layer_cnt;
elem_func_layer layers[MAX_SIZE];
}
struct elem_func_layer
{
double coef;
func_type type;
double exp;
}
typedef unsigned int func_type;
#define monomial_type 0x0;
#define exp_type 0x1;
以上就是关于请教c程序 差分求导全部的内容,包括:请教c程序 差分求导、二阶导数用C语言怎么表示、如何用C++编程实现初等函数的求导问题,我根本没有思路。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)