【问题标题】:MATLAB - how to create condition with specific requirementsMATLAB - 如何创建具有特定要求的条件
【发布时间】:2017-02-26 22:09:42
【问题描述】:

我正在模拟水加热,我需要创建某些条件,但我不知道如何正确创建它。

所需的水温为 55 °C。最低温度为 50 °C。最高温度为 70 °C。

我有 2 种加热方式 - 将水加热到所需温度 55 °C 的电加热和可以将水加热到最高温度的光伏加热。

我需要创建仅在温度降至 50 °C 以下时打开电加热并在达到 55 °C 后停止的条件。如果温度在 50 到 55 之间且之前没有降至 50 °C 以下,则只能进行光伏加热并且关闭电加热。

全年每分钟检查一次温度。条件会放在for循环中。

现在,我没有条件要求温度(55°C),如下所示:

for i = 1:525600
    if (temeprature(i) < 70)
           heating = 1; %heating from photovoltaic
       else
           heating = 0; % heating off
       end
         if (temperature(i) < 50)
          heating = 2; % electric heating when there is not enough power from PV                   
         end
   if heating==0
     calculations
     calling functions
     etc.
     ...
    end
   if heating==1
     calculations
     calling functions
     etc.
     ...
    end 
   if heating==2
     calculations
     calling functions
     etc.
     ...
    end 
 computing temperature with results from conditions
 end

感谢您的建议。

【问题讨论】:

  • 你需要一个switch语句,case(temp50 && temp
  • 也许我不明白你的意思,但我不认为这会做的事情。我不希望它跳入光伏加热......一旦它下降到 50 以下,电加热将持续到 55。温度可以上升 0.1 或 0.5°C(取决于加热器的功率)。另外,我需要循环来计算分钟数。如果它跳入 while 它不会计算“i”,直到退出 while 循环(或者我错了吗?)。也许简化(现在)会更好。假设只有电加热是可能的。这意味着“加热器==2”和“加热器==0”条件。
  • 温度在 50 到 55 之间,没有热量。如果低于 50,则加热至 55。

标签: matlab simulation statements


【解决方案1】:

我会为电加热创建一个具有持久变量的函数:

function [el, pv] = whatHeating(T)
persistent elHeat
if (isempty(elHeat))
    elHeat = false; % Initialize to false. The only thing where it matters is if you start at 50<T<55.
end

if (T < 50)
    elHeat = true;
elseif (T > 55)
    elHeat = false;
end
el = elHeat; % You can't return persistent variable directly.

if (T > 70)
    pv = false;
else
    pv = true;
end

然后你只需在你的主函数中调用这个函数。

【讨论】:

  • 如果我使用(调用)你的函数,而不是我第一篇文章中这样的 if 条件:[el, pv] = whatHeating(T(i))if el==true calculations calling functions etc. ... endif el==false calculations calling functions etc. ... endif pv==true calculations calling functions etc. ... end 只有光伏供暖和电一直在休息。编辑:我不知道如何将整个代码块添加到注释中,所以我这样做了。
  • @LamaObecna 我试过了,它似乎对我来说很好用。不知道是什么问题。 T = [53, 52, 51, 50, 49, 51, 53, 55, 57, 60, 63, 67, 70, 72, 75, 70, 60, 55, 53, 51, 49, 51, 53, 56 , 60];生产 el = [0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0] 和 pv = [1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1]。测试代码为 i = 1 :length(T) [el(i), pv(i)] = whatHeating(T(i));结束
  • 我想问一下你是否会这么好心,看看剧本。我在这里上传了它:webshare.cz/file/6QL57g2rv6/simulation-7z 我真的不明白为什么它不起作用。我将大部分内容从我的母语(捷克语)改写成英语。有3个文件,你的函数,我的模拟和PV数据(自动加载)。我删除了现在不重要的所有内容。主要的“事情”发生在 for 循环中(正如我在第一篇文章中发布的那样),语法相同。其他东西仅用于定义和显示结果的参数。绘制了一张带有一年中温度的图表。
  • 可以在参数powerPV中设置PV的功率。如果将其设置为 0 kW,则只能使用电加热。现在它符合我的基本条件,你的功能只需要从评论部分删除。无论如何,我真的很感谢你的帮助。
  • @LamaObecna 我检查了你的东西并用加热器注释掉了行并使用了那些 pv/el 变量。我还保存了 wasel(i) =el;黄蜂(i)=pv;似乎“你应该加热”工作正常。但是您可能在实际加热计算中犯了错误(或者只是使用了不足的加热器来满足您想要的水量)。例如,第一个点的温度下降到 50 度以下,即使电加热是打开的。
猜你喜欢
  • 2022-07-29
  • 2023-01-12
  • 2022-06-25
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 2020-02-24
  • 2020-02-04
  • 1970-01-01
相关资源
最近更新 更多