AmosWhite333 2021-10-19 21:54 采纳率: 100%
浏览 37
已结题

Matlab中关于微分方程问题的求解

img


如图所示,希望可以帮忙看看~初学matlab很多格式都没有掌握。
而且看到了一则警告,说后续版本中会禁用字符串类型,最好能用符号变量。谢谢啦

  • 写回答

1条回答 默认 最新

  • joel_1993 2021-10-19 22:33
    关注

    你好,鉴于你是初学者,我这里给你示范一下数值方法和符号方法分别怎么求解:
    (1)数值方法:定义ode->给定初值和时间范围->ode函数求解->画图

    % 定义ode
    odefun = @(t, y) [y(2) ; -2*y(2) + 2*y(1)]; % y(1)表示y的, y(2)表示y的一阶导数,记住[dy; dy'] = ode(t,y)*dt
    tspan = [0,10]; % 求解的时间范围
    y0 = [1; 1]%求解的初始y值, 第一个1指的是初始y(t=0),第二个是初始y'(t=0)
    [t, y] = ode45(odefun, tspan, y0); %求解用ode45显式算法, 得到的t有1列,得到的y有两列(分别是y和y')
    figure(1);clf % 创建figure(1)图像并清楚图像上的数据
    plot(t,y)%画两列图,第一条线是y-t图,第二条是y'-t图
    legend('y(t)', 'y''(t)')%给两条曲线做标记
    

    这样就得到了数值解的图像了

    img

    (2)符号解: 定义符号->定义方程和条件->用dsolve求得符号解->用matlabFunction或者eval(subs())获取实际数值并画图。

    syms y(t) t %定义函数y(t)和t
    eq = diff(y,2) + 2*diff(y,1) - 2*y;%方程
    Dy = diff(y,1);%求一次导
    conds = [y(0)==1, Dy(0)==1];%初始条件
    y = dsolve(eq, conds)%求解符号解
    dy = diff(y,t);%得到导数
    y = matlabFunction(y);
    dy = matlabFunction(dy);
    figure(2); clf
    fplot(y, [0,10],'r--')%直接画y-t图
    hold on
    fplot(dy, [0,10],'b-')%直接画y'-t图
    legend('y(t)', 'y''(t)')%给两条曲线做标记
    

    符号解图像

    img

    可见两者是差不多的,但是数值解求解快速,适用面广,符号解只有特定方程才会有解。
    有帮助望采纳,谢谢啦

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月27日
  • 已采纳回答 10月19日
  • 创建了问题 10月19日

悬赏问题

  • ¥15 用C语言输入方程怎么
  • ¥15 网站显示不安全连接问题
  • ¥15 github训练的模型参数无法下载
  • ¥15 51单片机显示器问题
  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案
  • ¥50 winform中使用edge的Kiosk模式
  • ¥15 关于#python#的问题:功能监听网页
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题