MATLAB中的fzero函数中的几个输入参数

时间:2018-12-16 10:07:15

标签: matlab

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的单独文件)

1 个答案:

答案 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时,将保存其常量参数。即使您更改Par1Par2specificFunction仍将始终根据创建时的值返回结果。如果您修改参数的值,则必须先执行第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)