我在 R 中模拟了太阳,但不能在 Simulink 中做同样的事情

I modelled the sun in R, but can't do the same in Simulink

我是建模系统方面的新手。在朋友的帮助下,我们在 R

中创建了这个模型
hours <- seq(6+20/60, 18+31/60, 0.01)

h_radians <- (pi/12) * (hours - (12+26/60))

doy <- 268

decl_radians <- 23.45 * sin(2*pi*(284+doy)/365) * pi / 180

lat_radians <- 23.45 * pi / 180

sin_gamma <- sin(lat_radians)*sin(decl_radians) + cos(lat_radians)*cos(decl_radians)*cos(h_radians)

m <- 1/sin_gamma


irradiance[is.na(irradiance)] <- 0
irradiance <- 1353 * sin_gamma * 0.687 ^ (m ^ 0.678)

输出就是这样;

当我试图将这个数学模型移动到 simulink 时,无法做到。这就是我试图做的

其实我无法想象时间在Simulink中是如何使用的。你能帮我解决我的问题吗?

您可以简单地使用 Matlab 函数块来进行计算,就像您在 R 中所做的那样:

function irr = irradiance(h,day,lat)
  h_radians = (pi/12) * (h - (12+26/60));
  decl_radians = lat * sin(2*pi*(284+day)/365) * pi / 180;
  lat_radians = lat * pi / 180;
  sin_gamma = sin(lat_radians)*sin(decl_radians) + cos(lat_radians)*cos(decl_radians)*cos(h_radians);
  m = 1./sin_gamma;
  pow = m .^ 0.678;
  pow(imag(pow)~=0)=NaN;
  irr = 1353 .* sin_gamma .* 0.687 .^pow;
end

那么你应该配置求解器来定义模拟持续时间/步骤: 模拟将 运行 12 小时,步长为 0.01 小时。
由于你想在6h和18h之间模拟,我在模拟时钟块中添加了6个小时。
毫不奇怪,结果类似于您在 R 中得到的结果:Simulink 也可以“模拟太阳”!