Matlab求解常微分方程无法理解此函数的描述

u2nhd7ah  于 2023-02-09  发布在  Matlab
关注(0)|答案(1)|浏览(156)

我偶然发现了这个matlab代码可以解决这个问题

y'''(t) + a y(t) = -b y''(t) + u(t)

但是我对ode_system函数定义感到困惑,特别是y(2) y(3)部分。
ode_system函数中的y(2) y(3)部分让我很困惑,它对总体解决方案有何贡献

% Define the parameters a and b
a = 1;
b = 2;
    
% Define the time horizon [0,1]
time_horizon = [0, 1];
    
% Define the initial conditions for y, y', and y''
initials = [0; 0; 0];
    
% Define the function handle for the input function u(t)
%sin(t) is a common example of a time-varying function.
% You can change the definition of u to any other function of time,
% such as a constant, a step function, or a more complex function, depending on your needs
    
u = @(t) sin(t);
    
% Define the function handle for the system of ODEs
odefunction = @(t, y) ode_system(t, y, a, b, u);
    
% Solve the ODEs using ode45
[t, y] = ode45(odefunction, time_horizon, initials);
    
% Plot the solution
plot(t, y(:,1), '-', 'LineWidth', 2);
xlabel('t');
ylabel('y');
    
function dydt = ode_system(t, y, a, b, u)
    
%Define the system of ODEs
    
dydt = [y(2); y(3); -b*y(3) + u(t) - a*y(1)];
    
end
kiz8lqtg

kiz8lqtg1#

这更像是一道数学题,而不是Matlab题。
我们希望重写常微分方程,使其左侧只有一个时间导数,右侧没有导数。

y'''(t)+ay(t)=-by''(t)+u(t)

通过令z = y'和x = z'(= y''),我们可以重写为:

x'(t)+a y(t)=-b x(t)+u(t)

所以现在我们有三个方程:

y' = z
z' = x
x' = -b * x + u - a *y

我们也可以把它看作一个向量方程,其中v =(y,z,x),那么右边的方程就是,

v(1)' = v(2)
v(2)' = v(3)
v(3)' = -b * v(3) + u - a * v(1)

这就是你的问题。

相关问题