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的单独文件(
您可以使用匿名句柄:
% 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)