美赛吧 关注:6,228贴子:23,665

微分方程的解析解

只看楼主收藏回复

尝试发个简易的教程,关于三大数学软件求解微分方程符号解。


IP属地:河南1楼2014-05-23 11:11回复

    PS:数学软件不是万能的,只能求解 解存在的,或者可以用已知方法求解的。这点尤其要注意。当用多种方法求解都得到空集时,需要检查自己的方程是否有错误。


    IP属地:河南2楼2014-05-23 11:12
    回复
      广告
      立即查看
      Matlab
      Matlab的长处是处理数值,但也可以求解符号形式的解析解。2014最新版本有在线的汉化。然而好像是2008版本之后,Matlab放弃了Maple内核,采用mupad运算符号语言。个人认为mupad不算太优秀。


      IP属地:河南3楼2014-05-23 11:13
      回复
        方法:
        1. 直接求解
        Matlab接受采用Dy的方式定义函数y的导数y’(t),其中默认变量为t;接受Dny的方式定义y的n阶导数y^(n)。这样可以直接求解方程而不需要定义变量。
        特别注意,默认自变量为t。


        IP属地:河南4楼2014-05-23 11:13
        回复
          格式1
          S = dsolve( ‘eqn’, ‘var’ )
          输入的量:
          eqn:常微分方程F(x,y,Dy,D2y,…,Dny)=0各个等式。
          var:自变量。默认为t。
          格式2
          S = dsolve( ‘eqn1’, ‘eqn2’,…, ‘eqn_m’,‘var’ )
          输入的量:
          eqn:常微分方程eqn1, eqn2,…, eqn_m
          var:自变量。默认为t。


          IP属地:河南5楼2014-05-23 11:14
          回复
            方法2:定义变量
            Matlab中同时支持定义函数再进行运算。这种方法的优点是可以在定义时就声明自变量。
            比如:
            syms a y(t)
            Dy = diff(y);
            dsolve(diff(y, 2) == -a^2*y, y(0) == 1,Dy(pi/a) == 0)
            上式中diff()命令为求导数,第一句话为声明变量。
            对比用之前的方法
            dsolve('D2y=-a^2*y', 'y(0)= 1', 'Dy(pi/a)== 0','x')
            都可以得到结果。


            IP属地:河南7楼2014-05-23 11:15
            回复
              注意:两种方法的单引号使用不同,要特别的注意。


              IP属地:河南8楼2014-05-23 11:16
              回复
                求解方程组
                声明变量求解
                syms x(t) y(t)
                z = dsolve(diff(x) == y, diff(y) == -x)
                或采用直接书写
                z = dsolve('Dx== y', 'Dy == -x','t')
                也都可以。
                不过解有可能返回结构体形式。要想得到解,可以用z.x,z.y展开,或者
                [a,b] = dsolve('Dx== y', 'Dy == -x','t')
                直接得到各个方程的解。


                IP属地:河南9楼2014-05-23 11:16
                回复
                  广告
                  立即查看
                  Matlab绘图
                  现在来画图
                  最简单的例子:
                  s=dsolve('Dy=y')
                  得到s=C10*exp(t)
                  基本思路是用subs或eval命令替代常数,for循环绘制曲线族或者直接绘出某一特解


                  IP属地:河南10楼2014-05-23 11:17
                  回复
                    syms t
                    s=dsolve('Dy=y')
                    s=char(s);
                    for i=-5:5
                    C10=i;%赋值。其中常数项要看你的解对应的是什么,就要改成什么
                    s1=eval(s);
                    ezplot(s1)
                    hold on
                    end
                    hold off


                    IP属地:河南11楼2014-05-23 11:17
                    回复


                      IP属地:河南12楼2014-05-23 11:18
                      回复
                        同理,对于方程组也是如此。
                        例如:
                        [a,b] = dsolve('Dx== y', 'Dy ==-x','t')
                        s=char(s);
                        for i=-5:5
                        C7=i;C8=2*i;%同样,这里在不同电脑对应常数项不同
                        a1=eval(a);
                        b1=eval(b);
                        ezplot(a1);ezplot(b1)
                        hold on
                        end
                        hold off


                        IP属地:河南13楼2014-05-23 11:18
                        回复
                          ezplot简单但不友好。
                          也可构造函数,建立数据,并用plot绘制。
                          还是最简单的例子
                          s=dsolve('Dy=y');
                          C2=1;%同样
                          s=char(s);
                          s=inline(subs(s));
                          k=1:10;
                          y=s(k);
                          plot(k,y)


                          IP属地:河南14楼2014-05-23 11:19
                          回复
                            提示:
                            当遇到
                            Warning: Explicit solution could not befound; implicit solution returned.
                            推荐换一种方法。虽然Matlab帮助文档中有关于这个的解决方法,但总觉得有点不方便和不靠谱。


                            IP属地:河南15楼2014-05-23 11:19
                            回复
                              广告
                              立即查看
                              Mathematica
                              Mathematica是另一个强大的数学软件,符号语言相当强大。不过关于它的资料比较少。同时,Mathematica的语言与C语言有差别。这也是不太流行的原因之一。不过界面简洁,书写优美,界面漂亮。同时,汉化强大。
                              简单介绍一下语法:函数首字母大写,函数括号用[],shift+enter运行语句。推荐有时间的人去学习一下这个学习软件,最基础的入门几天就可以了,对于学工程的也就够用了。


                              IP属地:河南16楼2014-05-23 11:19
                              回复