Fortran Coder

查看: 7085|回复: 5
打印 上一主题 下一主题

[通用算法] 找最大值的问题

[复制链接]

55

帖子

16

主题

0

精华

专家

F 币
621 元
贡献
265 点

规矩勋章

跳转到指定楼层
楼主
发表于 2015-6-16 08:28:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看了一些程序,发现找数组中最大值的程序总是会乘一个数(程序部分如下):
x是数组::x(1:xrand)

[Fortran] 纯文本查看 复制代码
 xmax = 1.0d-10
  Do loop=1, Nrand
    If( xmax<x ) Then
      xmax=x
    EndIf
  EndDo
  xmax = 1.01d0*xmax


xmax =  1.01d0*xmax  这一句
据说是为了;不让最大值出现在边界上’。为什么要这么做?
谢谢!

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

沙发
发表于 2015-6-16 09:02:34 | 只看该作者
这代码很罗嗦,用一句话就可以实现

xmax = 1.01d0* maxval( x(1:Nrand) )

就可以了

至于为什么要乘 1.01,我想是为了得到一个比最大值还要大一点点的数。
这是具体算法问题。

55

帖子

16

主题

0

精华

专家

F 币
621 元
贡献
265 点

规矩勋章

板凳
 楼主| 发表于 2015-6-16 09:04:47 | 只看该作者
楚香饭 发表于 2015-6-16 09:02
这代码很罗嗦,用一句话就可以实现

xmax = 1.01d0* maxval( x(1:Nrand) )

看好多程序都会这样处理最大值.....实在不明白为什么要乘1.01 = = 主要想不明白边界值到底有什么影响= =

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

地板
发表于 2015-6-16 09:17:37 | 只看该作者
这是算法的问题。

反正我从来不乘~不知道为什么别人要乘。

135

帖子

15

主题

0

精华

版主

F 币
1159 元
贡献
637 点

爱心勋章管理勋章

5#
发表于 2015-6-16 14:26:09 | 只看该作者
你看到的乘以1.01的这种求最大值得算法 是不是大部分出现在求坐标范围的时候? 如果是,那么乘以1.01显然是为了最大值点落在坐标范围里面,而不是落在边界上。

评分

参与人数 1F 币 +10 贡献 +10 收起 理由
aliouying + 10 + 10 赞一个!

查看全部评分

55

帖子

16

主题

0

精华

专家

F 币
621 元
贡献
265 点

规矩勋章

6#
 楼主| 发表于 2015-6-16 16:50:43 | 只看该作者
珊瑚虫 发表于 2015-6-16 14:29
你看到的乘以1.01的这种求最大值得算法 是不是大部分出现在求坐标范围的时候? 如果是,那么乘以1.01显然是 ...

恩。大多在求坐标范围里这么用。我主要也是不大明白为什么需要最大值落在坐标范围内....
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-29 02:05

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表