【问题标题】:Solve nonlinear equation求解非线性方程
【发布时间】:2019-10-02 23:41:52
【问题描述】:

我的函数代码有一些问题。主要思想是获取参数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

【问题讨论】:

  • 请说明问题所在。见How to Ask
  • Matlab 显示以下错误:未定义运算符 '-' for input arguments of type 'function_handle'。
  • 您能否以MCVE 的形式展示您如何调用该函数,因此定义所有输入(如果需要,可以使用一些随机数据)。
  • 在上半部分,我添加了调用函数及其值的方式。

标签: matlab equation solver


【解决方案1】:

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

等等

【讨论】:

  • 之前的问题已经解决了,但现在作为解决方案,我得到了零。代码如下: 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)λ.*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)
  • @RicardoAndresAzuero,您能否通过editing您的问题将您的新更新代码添加到您的问题正文中?这不是很可读
猜你喜欢
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多