Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement 如何在modelica中的if语句中使用Multiple And运算符?_If Statement_Operator Keyword_Modelica_Dymola - Fatal编程技术网

If statement 如何在modelica中的if语句中使用Multiple And运算符?

If statement 如何在modelica中的if语句中使用Multiple And运算符?,if-statement,operator-keyword,modelica,dymola,If Statement,Operator Keyword,Modelica,Dymola,我正在对热传递中的LMTD方法进行编码,在同时使用and运算符两次以上时遇到了一些错误 if (del_T1 > beta) and (del_T2 > beta) and (del_T1<>del_T2) then T_LMTD = (del_T1-del_T2) / ( (log(del_T1)) - (log(del_T2))); elseif (del_T1 > beta) and (del_T2 > beta) and (del_T1==

我正在对热传递中的LMTD方法进行编码,在同时使用and运算符两次以上时遇到了一些错误

if (del_T1 > beta) and (del_T2 > beta) and (del_T1<>del_T2) then
    T_LMTD = (del_T1-del_T2) / ( (log(del_T1)) - (log(del_T2)));
  elseif (del_T1 > beta) and (del_T2 > beta) and (del_T1==del_T2) then
    T_LMTD = (del_T1-del_T2) / 2;
  elseif (del_T1 > beta) and (del_T2 < beta) then
    T_LMTD = (del_T1 - beta) / ( (log(del_T1/beta)) * (1 - zeta * (del_T2 - beta)));
  elseif (del_T1 < beta) and (del_T2 > beta) then
    T_LMTD = (del_T2 - beta) / ( (log(del_T2/beta)) * (1 - zeta * (del_T1 - beta)));
  elseif (del_T1 < beta) and (del_T2 < beta) then
    T_LMTD = beta / ( (1 - zeta * (del_T1 - beta))  * (1 - zeta * (del_T2 - beta)));
  else
    T_LMTD = beta / ( (1 - zeta * (del_T1 - beta))  * (1 - zeta * (del_T2 - beta)));
  end if;
如果(del_T1>beta)和(del_T2>beta)以及(del_T1del_T2),那么
T_LMTD=(delu T1-delu T2)/(log(delu T1))-(log(delu T2));
elseif(del_T1>beta)和(del_T2>beta)和(del_T1==del_T2)然后
T_LMTD=(del_T1-del_T2)/2;
elseif(del_T1>beta)和(del_T2beta)然后
T_LMTD=(del_T2-β)/(log(del_T2/β))*(1-zeta*(del_T1-β));
elseif(del_T1
不幸的是,当我仅在一行中使用And运算符两次以上时才模拟模型时,错误消息如下所示


如何多次使用And运算符?或者因为其他问题?

问题不是and运算符而是相等运算符,
del_T1del_T2
del_T1==del_T2

如果您删除了和部分,它们将生成错误消息“连续时间内的非真实方程不合法:”

如果您成功生成了代码,则会给出更准确的错误消息: 无法比较Real类型的变量是否相等

Modelica规范第3.5节中规定

解决这个问题的办法是用“足够近”来代替它;e、 g.将
del_T1==del_T2
替换为
abs(del_T1-del_T2)beta)和(del_T2>beta)以及abs(del_T1-del_T2)>tol
T_LMTD=(delu T1-delu T2)/(log(delu T1))-(log(delu T2));
elseif(del_T1>beta)和(del_T2>beta)以及abs(del_T1-del_T2)和(del_T2beta)然后
T_LMTD=(del_T2-β)/(log(del_T2/β))*(1-zeta*(del_T1-β));
elseif(del_T1

(显然变量声明可以更改。)

“和”当然可以多次使用。但是有了这段代码就很难帮上忙了。你能提供一个完整的工作示例吗?
  Real T_LMTD;
  input Real del_T1;
  input Real del_T2;
  input Real zeta;
  parameter Real beta=0.7;
  parameter Real tol=1e-6;
equation 
 if (del_T1 > beta) and (del_T2 > beta) and abs(del_T1-del_T2)>tol then
    T_LMTD = (del_T1-del_T2) / ( (log(del_T1)) - (log(del_T2)));
  elseif (del_T1 > beta) and (del_T2 > beta) and abs(del_T1-del_T2)<tol then
    T_LMTD = (del_T1-del_T2) / 2;
  elseif (del_T1 > beta) and (del_T2 < beta) then
    T_LMTD = (del_T1 - beta) / ( (log(del_T1/beta)) * (1 - zeta * (del_T2 - beta)));
  elseif (del_T1 < beta) and (del_T2 > beta) then
    T_LMTD = (del_T2 - beta) / ( (log(del_T2/beta)) * (1 - zeta * (del_T1 - beta)));
  elseif (del_T1 < beta) and (del_T2 < beta) then
    T_LMTD = beta / ( (1 - zeta * (del_T1 - beta))  * (1 - zeta * (del_T2 - beta)));
  else
    T_LMTD = beta / ( (1 - zeta * (del_T1 - beta))  * (1 - zeta * (del_T2 - beta)));
  end if;