2013-04-12 3 views
1

Я не знаком с Matlab. Я решаю первое дифференциальное уравнение вида dS (t)/dt = F (S (t)) (S (0)) с использованием ode45. Но тогда у меня есть второе дифференциальное уравнение для решения, которое задано dX (t)/dt = G (X (t), S (t)) (X (0)). Как я могу использовать результаты на S для решения уравнения на X?Дифференциальное уравнение Matlab

Я хочу, чтобы значения S (1) и G (1) решений S (и G). Первая идея, которая у меня была, была довольно «наивной». Я сначала создать функцию, которая дает мне значение S (т) при т в [0,1]:

function dS=equation1(t,S) 
dS=F(S); 
end 

function S=solve1(S0,t) 
if t==0 
    S=S0; 
else 
[~,V]=ode45(@equation1,[0 t],S0); 
S=V(end,:) 
end 

А потом я создаю вторую функцию для решения второго уравнения:

function dX=equation2(t,X) 
dX=G(X,solve1(t)); 
end 

function G=solve2(X0,t) 
[~,V]=ode45(@equation2,[0 t],X0); 
end 

и в конце G (1) = solve2 (X0,1) и S (1) = solve1 (S0,1). Но я чувствую, что есть намного лучший способ сделать это! Спасибо за помощь!

ответ

0

Это в основном расширение дифференциального уравнения для включения большего количества параметров, что можно сделать довольно просто. Так, если S:

ds[1] = s[1] - s[2]; 
ds[2] = 3*s[1] + 0.5*s[2]; 

Теперь скажем, что X является дифференциальным уравнением 2-го порядка. Расширение X также будет содержать S (обозначаемое здесь как x [3] и x [4]):

dx[1] = a1*x[1] + b1*x[2] + c1*x[3] + d1*x[4] 
dx[2] = a2*x[1] + b2*x[2] + c2*x[3] + d2*x[4] 
dx[3] = x[3] - x[4]; 
dx[4] = 3*x[3] + 0.5*x[4]; 
Смежные вопросы