罗兰关于MATLAB的艺术

将想法转化为MATLAB

ode,从符号到数字代码

在最近的一篇文章中求解常微分方程,读者Jason想知道是否有一种方法来消除使用的手工代数步骤符号数学工具箱.目前还没有一个固定的方法来做它,所以结果是一个MATLAB程序,但你可以在MuPAD,符号数学工具箱的符号引擎。现在,我想向您展示如何在MuPAD找到封闭形式的解决方案的情况下生成ODE解决方案。

内容

定义符号变量

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

信谊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);

再次,重新格式化表达式,以便在post中显示得更漂亮。

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这样我就可以绘制结果了。

f = @(t) f(k,m,t);

情节的解决方案

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

一切都好,如果……

如果MuPAD能找到微分方程的解析解,那就很好了。目前,还没有一种方法可以自动生成一个MATLAB程序,用于定义适合数值求解的ODE。MuPAD本身有可能是合适的数值ODE求解器。你是否遇到过跨越符号和数字世界的问题?你如何处理这些问题?请让我知道在这里




MATLAB®7.10发布

|

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。