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