Начальное условие для ode45? - PullRequest
0 голосов
/ 14 марта 2019

Мне нужно использовать ode45, чтобы найти приблизительные значения решения при t = 1, 1,5 и 3, а затем построить решение на [0,5,4]

    %% 7) exp(y)+(t*(exp(y)-sin(y))*y'=0, y(2)=1.5
% 7a) Find approximate values of the solution at t=1, 1.5, and 3 then plot
% the solution on [0.5,4].

[t,y]=ode45(@(t,y) -exp(y)./(t.*(exp(y))-sin(y)),0.5:.2:4,1.5)

Как показано выше, начальное условие начинается с t = 2, а не 0. Как вы используете ode45 с начальным условием, начинающимся с t = 2? Я также должен найти приблизительные значения ниже t = 2.

1 Ответ

2 голосов
/ 14 марта 2019

Так как y (2) = 1,5 означает при t = 2, y = 1,5, вы можете сначала использовать ode45, чтобы получить ответы от t = 2 до t = 4 из кода ниже.

tspan1 = [ 2 : 0.05 : 4];
[t1,y1]=ode45(@(t,y) -exp(y)./(t.*(exp(y))-sin(y)),tspan1,1.5);

%% Index of t(3) is ((3/0.05) -1 )
y_when_t_3 = y1(((3/0.05) -1 ))

Затем вы можете использовать функцию в обратном направлении, чтобы получить значения до 2. Как показано ниже.

tspan2 = [ 2 : -0.05 : 0.5];
[t2,y2]=ode45(@(t,y) -exp(y)./(t.*(exp(y))-sin(y)),tspan2,1.5);

y_when_t_1 = y2(length(tspan2)-((1/0.05) -1 ))
y_when_t_1_5 = y2(length(tspan2)-((1.5/0.05) -1 ))

Теперь у вас есть значения t (1), t (1.5) и t (3). Осталось построить. Вы можете использовать ниже код для построения

t1 = t1';
t2 = t2';
y1 = y1';
y2 = y2';

t_plot = [fliplr(t2),t1(2:end)];
y_plit = [fliplr(y2),y1(2:end)];

plot(t_plot,y_plot);
xlabel("t");
ylabel("y");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...