Решить нелинейное уравнение - PullRequest
0 голосов
/ 15 мая 2019

У меня проблемы с кодом функции. Основная идея состоит в том, чтобы получить параметр SI (главный неизвестен), в котором уравнение Q_cal-Q=0. Кто-нибудь может мне помочь?

Большое спасибо.

P=1.94;
Q=1.09;
P5=1.08;
fc=0;
lambda=0.2;
Ts=24;

[SI]=singhandyu(P,Q,P5,lambda,Ts,fc);


    function [SI] =singhandyu(P,Q,P5,lambda,Ts,fc)

    Fc=fc.*Ts; 

f=@(SI)((P5-0.2*SI)*SI)./(P5+0.8*SI);
M=@(SI)max(f(SI),0);
S=@(SI)(SI-M(SI));

Ia=@(SI)lambda.*S(SI);
Q_cal=@(SI)((P-Ia(SI)-Fc).*(P-Ia(SI)-Fc+M(SI)))./(P-Ia(SI)-Fc+M(SI)+S(SI));

H=@(SI)Q_cal(SI)-Q;
S0=0;
SI_sol=fsolve(H,S0)
end

1 Ответ

0 голосов
/ 16 мая 2019

Почти все ваши анонимные функции нуждаются в SI в качестве ввода, но вы не передаете аргумент при вызове ранее определенной функции.

Для пояснения, f требуется один входной аргумент,

f=@(SI)((P5-0.2*SI)*SI)./(P5+0.8*SI);

но при вызове f в следующей строке вы не предоставляете его:

M=@(SI)max(f,0);

Поэтому убедитесь, что вы передаете аргумент каждому вызову функции:

M=@(SI)max(f(SI),0);
S=@(SI)max(SI-M(SI),0);

и т.д.

...