当函数的导数在数值上已知时,MATLAB的区别

时间:2014-08-09 14:43:53

标签: matlab

我想在MATLAB中区分以下函数wrt: T( E(X(T),T) / <子> P(T)

我的问题是我在数字上知道x的衍生物(我在一种odefun里面)。 我想使用diff来使我的代码可以推广用于高阶导数,但x的导数现在是常数。我也希望所有这些都在匿名函数中,我可以进行区分并相应地替换x所需的时间和导数,这样我就不必为系统的每个状态编写多个函数。

我的代码如下:

syms q x star;
qd=symfun(90*pi/180+30*pi/180*cos(q),[q]);
p=symfun(79*pi/180*exp(-1.25*q)+pi/180,[q]);
T=log(-(1+star)/star);
e=symfun(x-qd,[x,q]);

我想写一个例如

形式的函数

@(t,y)( d ^ 2 / dt ^ 2 T( e(x(t),t) / p(t))+ d / dt T( e(x(t),t) / <子> p(T))+ T( E(X(T),T) / <子> p(T)))

1 个答案:

答案 0 :(得分:1)

我不确定实施细节,但总的来说这是您可以采取的一种方法。它涉及两个步骤。

    当你进行区分时,T(.)函数用x替换exp(t) exp(t) x diff始终保持在那里以获取更高阶导数和外部函数将同时区分exp(t)。执行exp(t)后,您应该收到一个包含x的表达式(未经过测试,希望情况确实如此)。此时texp(t)的时间导数。现在,您只需要在x中评估此表达式。这样做时,您需要将y替换为exp(t)的导数。我不知道是否可以这样做,如果没有,那么可能使用y=exp(t)代替x并使用约束t来做,但你需要自己想出正确的实现。
  1. 您需要在右侧t替换x(t)的导数。如果您没有特定点exp(t)的值,那么请执行我在评论中建议的内容。预先在许多点预先计算并在此步骤中进行插值。
  2. 这种方法依赖于将x(t)x交换,如果这不起作用,那么我会按照我在评论中建议的那样做。通过已知函数逼近{{1}},并在代码中使用{{1}}而不是{{1}}。