人生的意义就是思考其意义分享 http://blog.sciencenet.cn/u/qianlivan 天体物理工作者,家乡云南昆明。

博文

关于科研中的主观能动性(一)参数拟合

已有 5277 次阅读 2012-3-5 22:05 |个人分类:思考|系统分类:科研笔记| 科研, 能动性

       科研是什么?就我自己的经历来看,除了看文献、记笔记、写文章,最多的活动就是处理数据、拟合、画图。其中拟合模型参数是科研中很重要的一部分。
      
       刚开始做研究的时候,总是想使用一种拟合方法,直接找到最佳解。数值方法书里介绍的方法大多都有一个限制,只能找到局部极值,也就是说初始值必须足够靠近 极值。后来看到一些随机算法可以找到全局最佳解。所以后来拟合参数的时候都用这些方法,把程序打开,乱扔几个初值,然后就等着。有段时间导师找我要计算结 果,我的答案都是“正在算”。这么算了几次之后,我觉得有点不对,不会每个人拟合参数都那么费劲吧?我去问教我编程的师兄,他只说了一句话:“人是有主观能动性的,你取个靠近最佳解的初值不就得了?”听了这句话,我恍然大悟,确实,科研是人做的,干嘛把活儿都交给电脑去。通常的参数拟合,我们其实对于参数的值都是有个大概的谱的,取个靠近最佳解的初值是有可能的。很多时候,在初值上多考虑一下比寻找更强大拟合程序更有效。

       前段时间读到一篇文章讲平方根函数的代码(http://www.cnblogs.com/pkuoliver/archive/2010/10/06 /sotry-about-sqrt.html)。这篇文章介绍的函数计算1/sqrt(x),效率非常惊人,比系统中的平方根函数还快,但是思想却非常 简单,就是“找一个足够靠近结果的初值”,然后做一次迭代!当然这个函数里找“足够靠近结果的初值”的方法相当出人意料,最佳值也是经过实验确定的。但是从这里也可以看到,找到一个靠近结果的初值是多么的重要!对于研究而言,买更好的计算机不如开发更好的算法。但是对于研究中特定的参数拟合问题,开发更好的算法不如发挥主观能动性,找更好的初值。

附:上述文章中提供的最精简的1/sqrt(x)函数代码
float InvSqrt(float x)

     float xhalf = 0.5f*x;
     int i = *(int*)&x; // get bits for floating VALUE
     i = 0x5f375a86- (i>>1); // gives initial guess y0
     x = *(float*)&i; // convert bits BACK to float
     x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy
     return x;
}   


https://blog.sciencenet.cn/blog-117333-544468.html

上一篇:时空观与人生观
下一篇:关于科研中的主观能动性(二)画图
收藏 IP: 123.113.32.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-18 19:18

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部