我怎么能解欧拉方程在符号工具箱5.3 (R2009b) ?

112(30天)
MATLAB的符号工具箱有一个函数执行函数在数学“EulerEquations”做什么,为了计算微分方程听从被积函数的功能?

接受的答案

MathWorks支万博1manbetx持团队
不幸的是,在R2009b象征性功能不可用,在R2012a介绍了这个特性。所以,你需要使用MuPad。
没有写函数,解决了在MATLAB欧拉拉格朗日方程。然而,可以编写一个程序,这样做,因为问题归结为求解一个象征性的颂歌,当被积函数的功能,MuPad也可以。
我们可以在两个方面:
1)在MuPad
诀窍是分化完成的步骤,依赖于在中介变量(函数“y (x)”及其一阶导数)是由一个哑变量,substittuted执行差异化然后替换一次。
例如在MuPad,质量弹簧系统,人会进行如下:
T: = (1/2) * m * diff (x (T), T) ^ 2
V: = (1/2) * k * x (t) ^ 2
李:=过程
term1: = diff (L | (diff (x (t), t) = xdot], xdot) | [xdot = diff (x (t) t)]
term1d: = diff (term1, t)
term2: = diff (L | x (t) = p, p) | (p = x (t))
EulerLagrangeEq: = term2-term1d
索尔:=颂歌::解决({EulerLagrangeEq x (0) = x0, x ' (0) = 0}, x (t))
2)在MATLAB:
您需要创建一个函数来执行符号函数的导数对因变量,e。g对y (x)。
然后,使用这个函数定义欧拉拉格朗日方程和在您的测试不同类型的拉格朗日。
这里有一个例子:
函数depVar res = diffDepVar(有趣)
信谊xx
res = diff(潜艇(乐趣、depVar xx), xx);
res =潜艇(res, xx, depVar);
结束
然后,测试在不同类型的被积函数:
1。Arclength:
信谊x y (x)
arcFun =√1 + diff (y, x) ^ 2)
ds = EulerLagrange (arcFun, x, y, diff (y))
ds =简化(ds)
dsolve (ds)%根据需要指定条件。见文档。
2。总非强制弹簧-质量系统的能量
信谊m k t X (t)
信谊(x1, x2) x3
信谊柯PE TE L
EulerLagrange = @(有趣,x1, x2, x3) diff (diffDepVar(有趣,x3), x1) -
diffDepVar(有趣,x2)
克= 1/2 * m * diff (X, t) ^ 2
PE = 1/2 * k * X (t) ^ 2
L = KE - PE
dL = EulerLagrange (L, t, X, diff (X))
DX = diff (X)
dsolve (dL)%根据需要指定条件。见文档。
2的评论

登录置评。

更多的答案(3)

弗兰克·霍夫曼
弗兰克·霍夫曼 2019年6月14日
实现是不正确的,如果变量及其导数均发生在乐趣。
例子:
信谊x (t) t
dx = diff (x, t);
diffDepVar (x * dx, x)
ans (t) =
0
但它显然应该
ans (t) =
dx
1评论
弗兰克·霍夫曼
弗兰克·霍夫曼 2019年6月14日
编辑:弗兰克·霍夫曼 2019年6月14日
解决方案是导数的面具
diffDepVar
函数res = diffDepVar(乐趣、depVar Var)
信谊xx yy
res = diff(潜艇(有趣,[depVar Var], [xx yy]), xx);
res =潜艇(res, [xx yy], [depVar Var]);
结束
现在
diffDepVar (x * dx, x, dx)
ans (t) =
diff (x (t), t)
欧拉函数的修改
EulerLagrange = @(有趣,x1, x2, x3) diff (diffDepVar(有趣,x3 x2), x1) -
diffDepVar(有趣,x2, x3)

登录置评。


彼得亚雷Maciejewski
彼得亚雷Maciejewski 2015年3月23日
我不明白MuPad版本,更精准的导数的时刻。我必须准备Furuta摆状态空间,我计算能量,但我不知道如何实现在MuPad欧拉。谢谢的帮助。
1评论
Christoph
Christoph 2015年3月27日
正是你不明白什么?请理解,你需要更具体的如果你想在这里得到帮助……

登录置评。


维特尔肯定
维特尔肯定 2020年10月16日
这mupad代码是有缺陷的。
例如让我们计算导数的表达式
l := x (t) * diff (x (t), t)
term2: = diff (L | x (t) = p, p) |(p = x (t)]
然后te resoult错误0, diff (x (t) t)。
顺便说一句,我要找的正确方法。:-)
1评论
默罕默德Shehu
默罕默德Shehu 2021年4月9日
你是对的。然而,正确的synthax应该:
term2: = diff (L | (x (t) = p, diff (x (t), t) =问],p) | [p = x (t) = diff (x (t) t)]

登录置评。

s manbetx 845


释放

R2009b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的