Как я могу имитировать с помощью ввода с ODE45 - MATLAB - PullRequest
0 голосов
/ 01 мая 2020

У меня есть две функции:

A = @(x, y, z) [10*y - 10*x; 28*x - z*x - y; x*y - 8/3*z]
B = @(u) [u; 0; 0]

Как я могу имитировать их в MATLAB с помощью управляющей переменной u? Управляющая переменная u меняется во времени.

1 Ответ

1 голос
/ 01 мая 2020

Вы можете использовать:

[t,out] = ode45(@(t,vars) myfunction(t,vars,U),tsim,xyz0);
x = out(1);
y = out(2);
z = out(3);

Где U - это значение u , tsim - время моделирования (окончательное время o вектор времени) и xyz0 - вектор начального состояния переменных x , y и z в виде [x0 y0 z0 ]. myfunction определяется как:

function dxyz= myfunction(t,vars,u)

    x = vars(1);
    y = vars(2);
    z = vars(3);

    % u varying with a condition
    if t>1
        u = newValue;
    end

    % u is a function of time u=f(t)
    u = 2*t;

    A = [10*y - 10*x; 28*x - z*x - y; x*y - 8/3*z];
    B = [u; 0; 0];
    dxyz = A+B;

end
...