解非线性方程

时间:2019-05-15 18:52:30

标签: matlab equation solver

我的功能代码有一些问题。主要思想是获取参数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 :(得分:0)

几乎所有匿名函数都需要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);