Я хочу передать простой аргумент в свою функцию ode45
. Моя функция заключается в следующем:
function dxdt = state( t,x,vgth,vgval)
p=1;
k=10^0.7;
window1=1-((2*x)-1).^(2*p);
dxdt=k*(vgval-vgth+1.2)*window1;
end
Основной скрипт такой:
clear all
step=0.01;
t = 0:step:10;
f=2*0.157;
vg = 5*sin(2*f*t);
x0=0.01;
vgth=1.9;
[t,x] = ode45(@(t,x) state1 (t,x,vgth,vg(t)), t, x0);
plot(t,x)
Здесь, когда я исключаю параметр vg(t)
при передаче аргумента, все работает просто отлично. Но это не работает с vg(t)
в аргументе.
ode45(@(t,x) state1(t,x,@(u) 5*sin(2*f*u), vgth) , ... )
? Или просто какode45(@(t,x) state1(t,x,vg(t), vgth) , ... )
с предопределенной функциейvg
. - person Lutz Lehmann   schedule 04.11.2015[t,x] = ode45(@(t,x) state1 (t,x,vgth,vg(t)), t, x0);
и моя основная функция какfunction dxdt = state( t,x,vgth,vg(t))
..Но это дает мне ту же ошибку - person AK K Khan   schedule 04.11.2015state
, является просто числом, поэтому используйтеfunction dxdt = state( t,x,vgth,vgval)
, гдеvgval
(или любое другое имя) понимается как содержащий значениеvg(t)
в вызове изode45
. - person Lutz Lehmann   schedule 04.11.2015function dxdt = state( t,x,vgth,vgval)
, и мой сценарий теперь[t,x] = ode45(@(t,x) state1 (t,x,vgth,vg(t)), t, x0);
.. Вы это имеете в виду? - person AK K Khan   schedule 04.11.2015vg
не является функцией. Измените наvg = @(t) 5*sin(2*f*t);
, чтобы сделать из него функцию. - person Lutz Lehmann   schedule 04.11.2015