找回密码
 免费注册

微信扫码登录

QQ登录

只需一步,快速开始

查看: 7500|回复: 34

节奏定律!!!(蠕爬指南——技术贴)

[复制链接]

285

风云币

0

活动币

648

积分

木甲骑士

积分
648

高崖口妙峰山香山

发表于 2008-9-24 20:57:06 | 显示全部楼层 |阅读模式

亲,以车会友,扩大圈子。注册一下吧?

您需要 登录 才可以下载或查看,没有账号?免费注册

×
QS请自觉绕行。

如果你和我一样,爬山的时候是蠕爬,并且偶尔还需要推车,对山地车只有3个大盘感到强烈不满,希望有5个大盘,那么请进来并往下读。

关于爬山,有一个古老的传说,并且不停的被蠕爬群众所重复发现并实践着。同志们亲切的称呼其为节奏定律。最近有一个关于该定律的重复
发现和实践来自妙峰山,参看
http://www.dongfanghong.com.cn/bbs/viewthread.php?tid=50505&extra=page%3D2
该作者激动的宣称 “运用该定律对业余车友进行教育,可以起到极大的振奋作用,意义不可小视”,却殊不知,他缺乏最重要的一步。

众所周知,勾股定理在国外叫毕达哥拉斯定理,原因无它,盖勾三股四弦五没有证明过程。虽然后来中国的古籍中也发现过证明过程,
但那是后来的事情了,没有毕达哥拉斯早。由此可见证明的地位。

多普勒穷尽一生之力观察行星运行轨迹,归纳出多普勒定律,最后被牛顿拿去,从数学角度证明行星绕太阳乃是椭圆,并且从中得到了万有引力定律,
从而成就其科学史上的大牛地位。由此可见,仅仅观察,实践,归纳只是万里长征的第一步,要完成一个定律,还必须从数学角度清晰的表达和证明。

下面我来完成这一步。

该过程是清晰明了的,因此建模过程不多说了,
用L0表示起始距离,s(t)表示速度,t是时间,那么有:s(t) = L0 - f(s(t)dt),其中f()是从0到t的积分。
(我不知道如何输入积分符号,估计除了上图之外没别的方法)
这是一个常微分方程,解该方程(略去1000字火星文)可得:
s(t) = e ^ (-t + ln(L0)),
其中^表示指数。
(解方程得具体过程我相信大多数群众都不关心,有关心者请自行回家翻看数学书,也别问我,我15年前学过数学分析,11年前学过泛函分析,
可是我现在连最简单的极限题不看书都不知道怎么做。)

由上式可知,起始时,s(0) = L0,也即速度等于距离。到达终点时,s(t)=0,而t是无穷大。由此可知,如果完全按照速度等于距离的骑法是绝对骑不到目的地的。

因此我们需要修正。修正的方法非常简单,也即,各位蠕爬的同志,请加上一个限定条件,即你的最小速度。
例如我能用小盘加大飞,在不下车的情况下(通常需要z字形爬坡),速度为2km。如果我坚持不到那个时候下来推车,那么速度为4km。那么把这个速度代入公式,
就可以精确的计算出爬山所需要的时间了。记住!该公式计算的时间是你从开始爬到速度降低到2km或者4km的时间,别忘了加上你最后那2km或者4km爬或者推
所需要的那一个小时。最后能够保持2km或者4km是件多么伟大的事情,这一下子就让这个函数的结果不再是无穷大了!


也许你和我一样,由于长时间从事让人变得弱智的IT行业养家糊口,已经退化到了最简单的极限题不看书都做不出来,mm偶尔问你一个概率题你都瞠目结舌,
没有关系。下面这个简单的程序就是为你准备的。(如果你能坚持看到这里,那么说明你多半曾经热爱过数学,哪怕其实那叫算数。小学的时候你的算术总考一百分。)

事实上,我对以上这个微分方程的解也没有信心,因为长期从事IT并因此把自己搞成了弱智。弱智有弱智的方法,以下这个程序就是我用来检验这个方程解的:


#include "stdafx.h"
#include "math.h"

const double e = 2.71828182845905;
const double count = 100000; // 1/count就是ds
double f1(double s1)
{
    double s = 1;
    double t1 = 0;
    double v = s;
    double t = 0;
    for(double i=0;i<count;++i)
    {
        if(v<s1) break;
        t += (1/count)/v;
        v = (count-i)/count;
    }
    return t;
}

double f2(double s1)
{
    double s = 1;
    double t1 = 0;
    double v = s;
    double t = 0;
    for(double i=0;i<count;++i)
    {
        v = (count-i)/count;
        if(v<s1) break;
        t += (1/count)/v;        
    }
    return t;
}

double f3(double t)
{
    double t1 = 0-t;
    double t2 = log(1.f);
    t1 += t2;
    return pow(e,t1);
}

int _tmain(int argc, _TCHAR* argv[])
{   
    double s1 = 1/10.f;
    double t1 = f1(s1);
    double t2 = f2(s1);
    printf("%f > t > %f\n",t2,t1);

    printf("must be %f\n",t1);
    return 0;
}

这里我简单的把总距离设置为1,s1就是剩余距离。关于这个代码,我不做任何其他解释,因为它已经足够简单。
为了防止误导不合格的IT从业人员,请注意double是有精度限制的,如果需要精度无限高,请自行使用matlab或者
专用计算的无损精度的数学库。


版主不加精我跟你急,除非你能找到我解方程的错误或者找到代码的错误!

speed-time2.jpg
喝奶有风险,投胎需谨慎

244

风云币

0

活动币

974

积分

木甲骑士

积分
974
QQ
发表于 2008-9-24 21:08:32 | 显示全部楼层
。。。。。。。。。。。。。。
绝对初学者.....大家多包涵,谢谢,谢谢!!!!

6万

风云币

9

活动币

9万

积分

管理员

高调做事,低调做人

积分
90419

坚持不懈安全骑行勇敢无畏浪迹天涯终身成就

QQ
发表于 2008-9-24 21:22:35 | 显示全部楼层
好文啊,好文。呵呵,是楼主原创吗?
风云信条:戴头盔,不喝酒,慢下坡。不抛弃队友,不放弃努力。

2254

风云币

0

活动币

6336

积分

银甲骑士

左手

积分
6336

潭柘寺黄花城终身成就高崖口十三陵妙峰山香山

发表于 2008-9-24 21:35:20 | 显示全部楼层
晕就一个字。
骑行交流的空间:bbs.lifeingo.com

285

风云币

0

活动币

648

积分

木甲骑士

积分
648

高崖口妙峰山香山

 楼主| 发表于 2008-9-24 21:45:30 | 显示全部楼层
我前几天无意中看到红方红的关于节奏定律的帖子,于是就寻思着进行理论上的提升。

一开始我努力恢复记忆试图直接解出这个常微分方程,但是实在是干IT太久了,人已经废了,我当时只能
得出这是一个不收敛级数,势应该接近级数1/n之和。

后来我就花几分钟写了一个程序,大致验证了自己的想法,并且作为实际使用足够了,但是——缺乏清晰且
优美的精确解一直让我无法满意。我很为自己对此不满足感到满意——多年的IT只是让我残废,还没有彻底杀死我。

今天下班之后比较有空,于是我花了些时间彻底研究了一下这个问题,并且请教了网上一个哥们——该哥们游离于
力学和IT之间——因此数学功底相当深厚。最后得到了一个很优美的精确解,我对此相当满意——该问题终于有了一个
完美的结果。
喝奶有风险,投胎需谨慎

6万

风云币

9

活动币

9万

积分

管理员

高调做事,低调做人

积分
90419

坚持不懈安全骑行勇敢无畏浪迹天涯终身成就

QQ
发表于 2008-9-24 21:53:13 | 显示全部楼层
我置疑“S(t)是速度”这个说法。L0是距离,后边那个积分的结果,也是距离。两个距离相减,怎么等于速度呢?单位都不同。
我理解,S(t)应该是距离终点的距离,也就是剩下多少路没走,而L0则是一开始时距离终点的距离。
风云信条:戴头盔,不喝酒,慢下坡。不抛弃队友,不放弃努力。

285

风云币

0

活动币

648

积分

木甲骑士

积分
648

高崖口妙峰山香山

 楼主| 发表于 2008-9-24 21:58:33 | 显示全部楼层
请看东方红原帖

妙峰山一小时自行车车程定理妙峰山全程21公里, 21公里以我休闲的车速就可以完成,所以妙峰山车程一小时
骑完最初的缓坡,发现到顶还有十三公里,这时候看到速度表上显示,现在车速13, 妙峰山车程还有一小时
当看到妙峰山8公里路标的时候,惊喜的发现,这和码表上显示的完全一致,一时间感觉那个路标就是一个有魔力的限速标志,妙峰山车程还有一小时
最后一个路标显示妙峰山还有四公里,这时候我正努力推车,所以妙峰山车程一小时

我认为该定律由我最先发现并证明,如果无异议,这就叫节奏定律,运用该定律对业余车友进行教育,可以起到极大的振奋作用,意义不可小视


============================================
s(t)是速度,也是剩下的距离。

节奏定律就是速度==剩下的距离。

[ 本帖最后由 alpha 于 2008-9-24 21:59 编辑 ]
喝奶有风险,投胎需谨慎

6万

风云币

9

活动币

9万

积分

管理员

高调做事,低调做人

积分
90419

坚持不懈安全骑行勇敢无畏浪迹天涯终身成就

QQ
发表于 2008-9-24 22:00:42 | 显示全部楼层
这是啥定律?数学上说得通??速度怎么会等于长度单位呢?
风云信条:戴头盔,不喝酒,慢下坡。不抛弃队友,不放弃努力。

285

风云币

0

活动币

648

积分

木甲骑士

积分
648

高崖口妙峰山香山

 楼主| 发表于 2008-9-24 22:01:29 | 显示全部楼层
单位问题很简单,这不是一个物理题,所以不存在量纲的问题。

节奏定律中所说的速度==剩下的距离,速度用时速,距离用km。
这其实只是一个数学题。
喝奶有风险,投胎需谨慎

6万

风云币

9

活动币

9万

积分

管理员

高调做事,低调做人

积分
90419

坚持不懈安全骑行勇敢无畏浪迹天涯终身成就

QQ
发表于 2008-9-24 22:01:41 | 显示全部楼层
我晕,看明白了,原来是恶搞的。
风云信条:戴头盔,不喝酒,慢下坡。不抛弃队友,不放弃努力。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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