ode,从符号到数字代码
在最近的一篇文章中求解常微分方程,读者Jason想知道是否有一种方法来消除使用的手工代数步骤符号数学工具箱.目前还没有一个固定的方法来做它,所以结果是一个MATLAB程序,但你可以在MuPAD,符号数学工具箱的符号引擎。现在,我想向您展示如何在MuPAD找到封闭形式的解决方案的情况下生成ODE解决方案。
内容
定义符号变量
让我们首先定义我们需要描述简谐振子方程的变量,使用与上面链接的相同的符号。
信谊xt米k
解决系统
使用函数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求解器。你是否遇到过跨越符号和数字世界的问题?你如何处理这些问题?请让我知道在这里.
评论
要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。