- 积分
- 15
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-7-18
- 最后登录
- 1970-1-1
![未绑定新浪微博用户 新浪微博达人勋](source/plugin/sina_login/img/gray.png)
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
情况是这样的,希望大神们给答疑解惑。
原理如下:
有个公式,是计算风成浪的,要先算小风区长度,然后一步就可以得到波高。风区长度是13个方向上的长度加权值,这个也好办。
以A点为例,某个方向上的风区长度,是从A点向该方向上画射线,射线与陆地的交点到A点的距离即为该方向的风区长度。
思路与步骤:
依照上述原理,我先生成一个100*100的矩阵,相当于100*100的网格。大于0的代表陆地,小于0的代表水域。
1,先用find函数,找出所有水域网格,以减少计算的工作量;
2,假定第一个方向的角度为r,先让步长n=1,n作为三角形的一个直边,n*tan(r)是另一个直边的端点。若端点小于0,则n=2,直到端点大于0为止。
然后进行下一个方向的判断。
3,该点的13个方向找完以后,再进行其他网格点的计算。
4,加权风区长度,该步时间很短。可以忽略。
问题:
调试过后,发现可以运算,但耗时太长。同样的目的,其他人用fortran程序,耗时不到20分钟,而我的matlab需要3小时以上。
个人觉得,我的算法上还存在优化的空间,请大神们指教。看如何提升效率?
|
|