カテゴリー

最新の記事

最近のコメント

最近のトラックバック

月別アーカイブ

ブログ検索

RSSフィード

ブロとも申請フォーム

この人とブロともになる

スポンサーサイト

スポンサー広告
--.--.--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ベンチャーブログのランキングに参加しています。
下のバナーをクリックして応援していただけると嬉しいです。
にほんブログ村 ベンチャーブログへ

向かい風とギア付き自転車の速度

Scheme/Gauche
2008.12.07
Newton法が簡単に解けたので、「向かい風はなぜ強く感じるか」で導き出した方程式を解いてみたいと思う。

この方程式は、連続的に変化するギヤを持つ自転車を想定し、向かい風の風速を w 、無風状態の巡航速度を v0 、ケイデンス一定、かける力一定の場合、自転車の速度 v がどうなるのかを考えたものだ。この方程式が正しいかどうかはよくわからないが、とりあえず解いてみよう。方程式は以下の通りである。

 f(v) = v*v*v + 2*w*v*v + w*w*v - v0*v0*v0 = 0


これを前回作成したnewton関数で解く。ついでにリファクタリングも行っておく。前回のnewton関数は、再帰ループに入るたびに微分関数のdefineを評価していたので、このdefine部分と再帰ループ部分を分離するのだ。以下のようになる。

 (define (newton func a dx dy)
  (define (deriv x) (/ (- (func (+ x dx)) (func x)) dx))
  (define (newton-rec a)
   (cond ((< (func a) dy) a)
    (else (newton-rec (- a (/ (func a) (deriv a)))))))
  (newton-rec a))


パラメーターとしてwとv0を与えて解く必要があるので、これらのパラメーターを受け取ってnewton関数を実行するspeed関数を定義する。

 (define (speed w v0)
  (newton (lambda(x)
       (+ (* x x x) (* 2 w x x) (* w w x) (* -1 v0 v0 v0)))
       1000 0.001 0.001))


実数解がひとつしかない3次方程式の場合、初期値が中途半端だと無限ループに入る可能性があるため、ある程度大きな値を初期値にしておく。計算精度はそれほど必要ないので、dx、dy共に0.001程度にした。

このspeed関数を、wの値を変えながら計算し、wとvの関係を求めていく。またv0も複数のパターンを用意する。たとえばwを0~30の間で2ずつ変化させて、v0=15とv0=30のvの値を求めるには、次のようなプログラムを実行すればいい。

 (use srfi-1)

 (map (lambda(w)
  (print "w=" w
      " v(15)=" (speed w 15)
      " v(30)=" (speed w 30)))
  (iota 16 0 2))


上記プログラムをちょっと手直しし、v0=5、15、25、35、45、w=-30~+30で、vがどのようになるのかをグラフ化してみた。

グラフ

方程式が正しいかどうかはともかくとして、手軽に解ける手段を持つのは悪くない。グラフを見ると、v0が変化してもグラフの傾きはそれほど変わらない。これは無風状態の巡航速度との比率で考えれば、v0が大きいほど風の影響が小さく感じられることを意味する。

もちろんwではなくw/v0の影響という観点で見れば影響はすべての場合でほぼ同じになる。しかしw/v0ではなくwの影響を考えた方が実感には合うだろう。つまり同じ風が吹いていた場合、無風状態の巡航速度が速いライダーほど、風の影響を感じなくなるのだ。

私自身の経験から言えば、この結論は妥当性があると思う。以前に比べて巡航速度が上がった結果、あまり向かい風が気にならなくなっているからである。

みなさんはどう思われるだろうか。
スポンサーサイト

ベンチャーブログのランキングに参加しています。
下のバナーをクリックして応援していただけると嬉しいです。
にほんブログ村 ベンチャーブログへ

FC2Ad

相続 会社設立

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。