如果我用描述质量弹簧阻尼系统的一阶微分方法得到二阶微分方程,那么如何使用欧拉方法来绘制这个方程时我不知道一阶差分?我想在MatLab中做到这一点。这是一个家庭作业问题,所以我没有发布任何代码..我只想简要介绍一下你是如何做到的。二阶导数为d2(t + 1)=(-1/m)*(c * d1 + k * y)其中c,m,k是常数,y初始为1,d1为一阶微分,从0开始,t是时间。欧拉方法 - MatLab中的弹簧振荡
任何想法?
谢谢:)。
如果我用描述质量弹簧阻尼系统的一阶微分方法得到二阶微分方程,那么如何使用欧拉方法来绘制这个方程时我不知道一阶差分?我想在MatLab中做到这一点。这是一个家庭作业问题,所以我没有发布任何代码..我只想简要介绍一下你是如何做到的。二阶导数为d2(t + 1)=(-1/m)*(c * d1 + k * y)其中c,m,k是常数,y初始为1,d1为一阶微分,从0开始,t是时间。欧拉方法 - MatLab中的弹簧振荡
任何想法?
谢谢:)。
二阶eqn可以转换为一阶微分方程组。
function dy = ex(y)
dy = zeros(2,1);
dy(1) = y(2);
dy(2) = -c/m*y(2) - k/m*y(1);
从这里你可以使用Matlab的内置解算器。 ode23s
会工作得很好:
[t,y] = ode23s(@ex, y0, tspan)
将二阶方程改写为一阶方程组。未知数对应于位置和速度。
一阶微分方程组可能看起来像这样,而y1 = y
。用'
表示时间导数。
y1' = y2
y2' = -c/m*y2 - k/m*y1
有以下形式的解析解(X(t)中,x '(t))的= EXP(A T)*(X(0)中,x'(0 )),其中A是2×2矩阵。如果您不需要使用matlab的ODE解算器,这是找到系统时间演变的正确方法。
为了找到A,写系统以这种形式
所以这里A = [0 1; -k /米-c/m]的
设定K/M = 1,并且C/M = 0.1,我们可以写
t = linspace(0,20, 1000);
A = [0 1; -1 -0.1];
for j = 1:length(t); x(j,:) = expm([0 1; -1 -0.1]*t(j))*[1;0]; end
plot (t,x)
legend ('position', 'velocity');
title ('underdamped spring starting at y = 1; y'' = 0')
谢谢。 y2如何首先定义?我想把这些方程放在一个循环中,当我完成迭代时绘制它们::) – ale 2011-01-27 17:50:08