官方接单发单平台上线!有接单发单需求的请直接发布需求,或注册接单!点击此处查看详情!

matlab用ode45和symbolic方法 用这两种方法画这个方程的图

时间:2024-02-11 浏览:226 分类:Matlab程序代做

91代做网-专注各种程序代做

包括但不限于:各类毕设课设、作业辅导、代码答疑、报告论文、商业程序开发、论文复现和小程序开发等。

也欢迎各行业程序员加入我们,具体请联系客服详聊:QQ号:,微信号:,接单Q群:

就是用ode45symbolic方法 用这两种方法画这个方程的图
然后有几个已知条件 m=10 k=160 b=0(最好可以方便调节 后面我想让他不等于0) F0=200 w0=2
画出来应该差不多是这个样子

function rk=w2(t,x)
rk=[x(2);-16*(x(1))+20*sin(2*t)];
timerange=[0 20];
initialvalues=[-3 0];
[t,x]=ode45(@w2,timerange,initialvalues);
plot(t,x(:,1))
xlabel('time(s)')
ylabel('displacement(m)')
hold on
t=0:0.1:20;%(w=2)
x=(5.*sin(2.*t))/6 - 3.*cos(4.*t) - (5.*sin(4.*t))/3 - (5.*sin(6.*t))/8 + (5.*sin(10.*t))/24 + (5.*sin(4.*t).*(6.*tan(t).^2 - 3.*tan(t).^4 + 1))/(3.*(tan(t).^2 + 1).^3);
plot(t,x);
xlabel('time(s)')
ylabel('displacement(m)')
hold off
然后这个是代码 给你们提供一个大概的思路
这个代码上半部分是ode45 下半部分是symbolic方法

function solve_differential_equation()
    m = 10;
    k = 160;
    b = 0;
    F0 = 200;
    w0 = 2;

    % 使用ode45求解微分方程
    timerange = [0 20];
    initialvalues = [-3 0];
    [t, x] = ode45(@(t,x) w2(t,x,m,k,b,F0,w0), timerange, initialvalues);
    
    % 绘制数值解
    figure;
    plot(t, x(:,1));
    xlabel('time(s)');
    ylabel('displacement(m)');
    hold on;

    % 使用符号方法求解微分方程
    syms t x(t)
    eqn = diff(x, t, 2) + (k/m)*x == (F0/m)*sin(w0*t);
    cond = [x(0) == -3, diff(x)(0) == 0];
    xSol(t) = dsolve(eqn, cond);
    
    % 绘制解析解
    t = linspace(0, 20, 200);
    x = double(xSol(t));
    plot(t, x);
    
    legend('Numerical Solution (ode45)', 'Analytical Solution');
    hold off;
end

function dxdt = w2(t, x, m, k, b, F0, w0)
    dxdt = [x(2); -(k/m)*x(1) + (F0/m)*sin(w0*t)];
end

首先,你使用了ode45函数来解决微分方程,但是在函数w2中使用了ode45函数来重新计算微分方程的解,这是不正确的。其次,下半部分是使用符号方法直接给出了解析解,但是你没有将符号解与数值解进行比较。

让我们重新调整你的代码,首先使用ode45函数求解微分方程,并将结果绘制成图表。然后,我们可以使用符号方法得到解析解,并将其与数值解进行比较。这样你就能更好地理解两种方法的异同了。


客服