dT0 = fzero('funzeroproj',1)
如何在fzero函数中具有更多输入参数?我想要的不仅仅是dT0g。例如,我希望TL = pi / 2,而不必进入并在此函数中手动更改它;
function f = funzero(dT0g)
TL = 2*pi/6;
T0 = -2*pi/6;
k = 10;
options = odeset('Events',@yzero);
[x,vinkel,dphikors,vinkele,ie]=ode45(@ode45projekt,[0 k],[T0, dT0g],options);
Tslut = vinkele(2,1)
f = Tslut-TL
end
(保存为名为funzeroproj.m的单独文件)
答案 0 :(得分:1)
您可以使用匿名句柄:
% Some function defined with more than one parameter
function out = genericFunction(x,y,z)
out=x*y+z;
end
然后:
%Define parameters
Par1 = 1;
Par2 = 2;
%Define function handle
specificFunction = @(t) genericFunction(t,Par1,Par2);
%specificFunction only depends on a single parameter
%Solve equation
dT0 = fzero(genericFunction,1)
请注意,当您创建函数句柄specificFunction
时,将保存其常量参数。即使您更改Par1
或Par2
,specificFunction
仍将始终根据创建时的值返回结果。如果您修改参数的值,则必须先执行第specificFunction = @(t) ...
行,然后再通过求解器。
现在,您甚至可以将句柄定义与对求解器的调用放在同一行:
function f = funzero(dT0g,TL,T0,k)
options = odeset('Events',@yzero);
[x,vinkel,dphikors,vinkele,ie]=ode45(@ode45projekt,[0 k],[T0, dT0g],options);
Tslut = vinkele(2,1)
f = Tslut-TL
end
...
TL = 2*pi/6;
T0 = -2*pi/6;
k = 10;
dT0 = fzero(@(x) funzeroproj(x,TL,T0,k),1)