罗兰在MATLAB的艺术

把想法变成MATLAB

常微分方程,从象征性的数字代码

在最近一篇文章中求解常微分方程杰森,读者想知道如果有一个方法手动代数步骤使用符号数学工具箱。目前不是一个罐头的方法结果是一个MATLAB程序,但你可以这样做MuPAD符号数学工具箱,象征性的引擎。现在,我想向你们展示如何生成ODE的解决方案的情况下MuPAD发现封闭的解。

内容

定义符号变量

让我们首先定义变量需要描述一个简单谐振子方程,使用相同的符号,上面的帖子链接。

信谊xtk

解决系统

使用函数dsolve,我们找到了解决方案。

索尔= dsolve (' m * D2x + k * x (t)”,“x (0) = 0”,“Dx (0) = 1”,“t”);

重新格式化显示的解决方案适合发布。

csol = char (sol);disp (csol (1:45) disp (csol(46:结束)
(m * exp ((t * (- k * m) ^ (1/2)) / m)) / (2 * (- k * m) ^ (1/2)) - m / (2 * exp ((t * (- k * m) ^ (1/2)) / m) * (- k * m) ^ (1/2))

将解决方案从MuPAD

使用matlabFunction我下生成一个函数处理,MATLAB版本的解决方案。

f = matlabFunction (sol);

再一次,重新格式化表达式显示更多的好文章。

cf = func2str (f);disp (cf(一)disp ([' 'cf (66)):)
@ (k、m t) m。* exp (t。*√(m - k . *)) / m)。* 1.0. /√(m - k . *) * (1.0. / 2.0) - m。* exp (- (t。* sqrt (m - k . *)) / m)。* 1.0. /√(m - k . *) * (1.0. / 2.0)

为质量和弹簧常数设置值

我使用相同的值k我引用的文章中使用。

k = 10;m = 1;

我现在创建一个速记函数值k所以我可以画出结果。

fnew = @ (t) f (k、m t);

情节的解决方案

t = 0:0.01:10;情节(t, fnew (t))

好,如果……

这是好如果MuPAD能找到微分方程的解析解。目前,没有一种方法来自动生成方程组的MATLAB程序定义ODE适合解决数值。MuPAD本身解决数值赋这可能是合适的。你有跨符号和数字世界的问题吗?你如何处理它们?请让我知道在这里




使用MATLAB®7.10发表

|

评论

要发表评论,请点击此处登录到您的MathWorks帐户或创建一个新帐户。