Я хочу передать простой аргумент в моей функции ode45
. Моя функция заключается в следующем:Передача аргументов в 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'. – LutzL
@LutzL ... Я использовал простой способ, который вы описали. Как я использовал следующий код в моем скрипте. '[t, x] = ode45 (@ (t, x) state1 (t, x, vgth, vg (t)), t, x0);' и моя основная функция как 'function dxdt = state (t, x, vgth, vg (t)) '.. Но это дает мне ту же ошибку –
Нет, параметр' state' gets является просто числом, поэтому используйте 'function dxdt = state (t, x, vgth, vgval)' где ' vgval' (или любое другое имя) понимается как содержащее значение 'vg (t)' в вызове от 'ode45'. – LutzL