24小时热门版块排行榜    

查看: 912  |  回复: 4

421562339

新虫 (小有名气)

[求助] 有关MATLAB数学计算编程问题的求助 已有1人参与

各位虫友,能不能用MATLAB帮我计算一下,这些公式是根据Kliein & Theilacker的倾斜面辐射计算公式(见图片1),我们编写的程序内循环为计算倾斜面1到12月的辐射,然后求年总辐射;外循环为倾斜面角度,0到90度,程序编写的目的是为了求倾斜面的最佳倾角,即倾角为多少时倾斜面接受的年辐射最大,我们编写的程序循环计算有问题,每次运行出来的结果与我们输入的纬度及月平均水平面总辐射无关,最佳倾角总是为90度减去0度,如果外循环倾角的取值范围发生变化,计算结果总为末值减去初始值,不是我们想要的结果,应该是程序出问题了,以下是我们编写的程序,望各位虫友指教。
%倾斜面月平均太阳辐照量计算(klien&Theilacker)
%r---a对于朝向赤道的倾斜面上,在北半球朝南的倾斜面上,其月平均太阳总辐照量与水平面上月平均总辐照量之比
%输入月平均辐射总h(i),散射辐射d(i),和直接辐射b(i)
%输入当地纬度a
%c(i)----第i月的太阳赤纬角
%c=23.45*sin[360/365*(284+n)](n--为一年中丛元旦算起的天数)
a=input('输入当地纬度(度):')
j=0;
sum_i=0;
for t=0:0.5:90
     j=j+1
   for i=1:1:12
       h=[237.2 310.3 429.5 541.5 628.2 621.1 625.7 578.3 436.0 352.0 263.9 212];
       d=[149.0 178.8 258.1 304.7 324.1 299.7 271.6 240.2 213.6 181.8 148.9 133.7];
       b=h-d
      n=[17,47,75,105,135,162,198,228,258,288,318,344];
      c(i)=23.45*sind(360/365*(284+n(i)));
  s=acosd(-tand(a)*tand(c(i)));
  ss=min(s,acosd(-tand(a-t)*tand(c(i))));
  sss=acosd(-tand(a-t)*tand(c(i)));
  dd=sind(s)-pi/180*s*cosd(s);
  aa=0.409+0.5016*sind(s-60);
  bb=0.6609-0.4767*sind(s-60);
  r=cosd(a-t)/dd*cosd(a)*((aa-d(i)/h(i))*(sind(ss)-pi/180*ss*cosd(sss))+bb/2*(pi/180*ss+sind(ss)*(cosd(ss)-2*cosd(sss))))+d(i)/2*h(i)*(1+cosd(t))+0.1*(1-cosd(t));
  ht=r*h(i);
   sum_i=ht+sum_i;
   end
   sum(j)=sum_i;
   fprintf('sum(j)=%d\n',sum(j))
end   
       hy=max(sum(j));
      find(j==max(sum(j)));
      tt=(j-1)*0.5;
      fprintf('hy=%d\n,tt=%d\n',hy,tt)

有关MATLAB数学计算编程问题的求助
{P39N7KG@Q$KPWM$H0MIX1V.png
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

激光、阳光、光伏、光电
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

happy123xp

银虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
点号,在乘号除号前全加点号试试。在外面不方便看你具体程序。

[ 发自小木虫客户端 ]

» 本帖已获得的红花(最新10朵)

加油。
2楼2015-08-31 13:44:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

421562339

新虫 (小有名气)

送红花一朵
引用回帖:
2楼: Originally posted by happy123xp at 2015-08-31 13:44:10
点号,在乘号除号前全加点号试试。在外面不方便看你具体程序。

麻烦你回去仔细看看,谢谢,点乘点除我都试过了,不合适。谢谢
激光、阳光、光伏、光电
3楼2015-09-01 10:07:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

happy123xp

银虫 (小有名气)

【答案】应助回帖

回去跑了一下楼主的程序,并没有解决楼主的疑问,但是却发现了几个问题。
1.当输入纬度为20时,计算错误,出现了sss是复数的情况,是sss的反三角函数里面的计算值超过了1,怀疑c(i)计算式有问题。
2.无论怎么变化纬度,居然总的最大辐射量没怎变,查后发现r计算式有问题,应把dd*cosd(a)都括起来,不然计算顺序有问题。
3.最后几句话也有问题,max函数里面的矩阵不要j,应为sum,你想想,你的j最后值肯定是181,max(sum(j)得到的永远是sum里面最后一个,find没起到作用,应改为 hy=max(sum); [rows,cols]=find(hy==sum);tt=(cols-1)*0.5;。
4.罗里吧嗦一大堆,最后还是发现问题还是没解决,程序应该是没有问题了,但是得到的sum矩阵里面的元素总是递增的,所以导致,最后一个总是最大的,所以找到的cols总是181,总是90度。
最后,我不了解楼主研究领域,但是总是觉得楼主某个理论环节有问题,才会出现这样的问题,楼主可以参考参考我说的,谢谢。

» 本帖已获得的红花(最新10朵)

加油。
4楼2015-09-01 16:56:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

421562339

新虫 (小有名气)

送红花一朵
引用回帖:
4楼: Originally posted by happy123xp at 2015-09-01 16:56:51
回去跑了一下楼主的程序,并没有解决楼主的疑问,但是却发现了几个问题。
1.当输入纬度为20时,计算错误,出现了sss是复数的情况,是sss的反三角函数里面的计算值超过了1,怀疑c(i)计算式有问题。
2.无论怎么变化 ...

谢谢,看到你指出的问题了,我们会仔细检查,望常常指导。
激光、阳光、光伏、光电
5楼2015-09-02 10:14:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 421562339 的主题更新
信息提示
请填处理意见