| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4118 人关注过本帖
标题:用程序计算乘潮水位
只看楼主 加入收藏
hxyt987
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-11-3
收藏
 问题点数:0 回复次数:11 
用程序计算乘潮水位
手头有一年的实测海洋潮位资料,每隔1小时一个数据。让X轴为时间坐标(单位:小时),Y轴为潮位资料(单位:厘米),如果把这一系列点绘制在图上(相邻的点用直线段连接)形成潮位过程线,你会发现这条曲线类似于正弦(余弦)曲线,且每天有两个高潮和两个低潮。现在想编写个程序计算出这样一个潮位Y,这个潮位Y是处于涨潮过程中的一个潮位,从这个潮位Y时间开始经过整数小时后(比如说3个小时),潮位已经涨到最高点并落潮了,而这时的潮位刚好也等于前面那个潮位Y,也就是说这3个小时之内的潮位都大等于这个潮位Y,是从这个潮位Y上涨并再落潮到这个潮位Y。哪位高手给个思路,怎么求这潮位Y?只需要思路,不需要程序。谢谢!

其实说简单一点就是已知一根长度为3小时且平行于X轴的直线段去卡潮位过程线上面部分弧形,并且两个交点都在弧线(其实都是直线段)上,求这个交点的Y坐标(精确到厘米)。附件中的图就是潮位过程线图,中间的一系列短横线的Y坐标就是我要求的!

如果有港航海洋专业的同志应该知道,我求的其实就是乘潮水位!

重要说明:潮位过程线只不过是把一小时一个的潮位点在图上,相邻的点用直线段连接起来,并不是严格的正余弦曲线,只是有点像而已!数学函数一概不能用!

[[it] 本帖最后由 hxyt987 于 2008-11-4 10:19 编辑 [/it]]

潮位过程线.jpg (58.87 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 潮水 
2008-11-04 09:53
weierstrass
Rank: 1
来 自:上海
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-10-28
收藏
得分:0 
sinX=sin(X+3)
sinX=sinXcos3+cosXsin3
sinX(1-cos3)=cosXsin3
tanX=sin3/(1-cos3)

X=arctan(sin3/(1-cos3))从这里可以算出X,然后代回sinX求出Y

也就是说当时间在arctan(sin3/(1-cos3))到arctan(sin3/(1-cos3))+3这个时间段里所有的Y都大于sinX
再算上sinX的周期性,那就在时间上加上2PI

我不知道你要的是不是这个结果

[[it] 本帖最后由 weierstrass 于 2008-11-4 10:12 编辑 [/it]]
2008-11-04 10:10
hxyt987
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-11-3
收藏
得分:0 
楼上的,不是正余弦曲线啊!只不过类似正余弦曲线!相邻的点是用直线段相连的!数学函数对解题没有任何意义!如果是正余弦就太简单了,不过还是谢谢你!

[[it] 本帖最后由 hxyt987 于 2008-11-4 10:16 编辑 [/it]]
2008-11-04 10:13
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
对一个波来说,用一根横线去卡的话,中间的横线长度应该是从上到下递增的
因此你可以用二分法,先找到一根小于3小时的线,再找一根大于3小时的线,然后不停的取中点,直到满足精度要求

剩下的工作就是怎么取得中间横线的长度了,根据Y值,可以找到这个离这个Y值最近的上下各一个点,然后根据直线方程可以计算该点的X坐标,在另一端也是一样,然后两个X相减就可以了

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-11-04 10:27
hxyt987
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-11-3
收藏
得分:0 
[bo][un]永夜的极光[/un] 在 2008-11-4 10:27 的发言:[/bo]

对一个波来说,用一根横线去卡的话,中间的横线长度应该是从上到下递增的
因此你可以用二分法,先找到一根小于3小时的线,再找一根大于3小时的线,然后不停的取中点,直到满足精度要求

剩下的工作就是怎么取得中 ...



谢谢这位兄弟,先顶再详细看,这个思路很有价值!汗,太久没编程了,书都被同事弄丢了,把这么著名的二分法给忘了!再次谢谢!
2008-11-04 10:32
weierstrass
Rank: 1
来 自:上海
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-10-28
收藏
得分:0 
呵呵,那就不会了
2008-11-04 10:54
hxyt987
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-11-3
收藏
得分:0 
刚才还在想那么多直线段,怎么判断用哪个直线方程,认真一想差点吐血,用前后的潮位资料一卡就知道了!中午回来认真看了一下,版主(现在才知道原来是版主,呵呵)的思路的确可行,接下来编程应该很简单了!太惭愧了,刚毕业的前两年自己还用的很多的二分法给忘了!看来以后要经常来论坛泡泡,把丢掉的知识捡回来,再顺便偷点回去:-D
2008-11-04 13:07
hxyt987
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-11-3
收藏
得分:0 
大功告成,程序计算验证成功,现在的任务就是继续完善程序了!太感谢“永夜的极光”了!现在只要几秒钟就能完成几个星期甚至几个月的工作了(假如用手工摘取计算的话)!
2008-11-05 09:58
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
呵呵,恭喜你啦,编程的魅力就在于此,繁琐的工作也可以变得很轻松

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-11-06 07:43
shxshd
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-7-30
收藏
得分:0 
嗯,我最近也遇到了类似的问题。lz可否具体说说,我打算用matlab实现,但没接触过二分法啊。。用循环呢?是不是比较笨?多谢指教
2010-03-10 21:43
快速回复:用程序计算乘潮水位
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025098 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved