Несколько входных параметров в функции fzero в MATLAB - PullRequest
0 голосов
/ 16 декабря 2018
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 голосов
/ 17 декабря 2018

Вы можете использовать анонимные дескрипторы:

% 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...