<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/nryutryu/">
    <title>nryutryu @ ウィキ</title>
    <link>http://w.atwiki.jp/nryutryu/</link>
    <atom:link href="https://w.atwiki.jp/nryutryu/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>nryutryu @ ウィキ</description>

    <dc:language>ja</dc:language>
    <dc:date>2010-06-22T02:08:08+09:00</dc:date>
    <utime>1277140088</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/nryutryu/pages/16.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/nryutryu/pages/15.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/nryutryu/pages/14.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/nryutryu/pages/13.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/nryutryu/pages/1.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/nryutryu/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/nryutryu/pages/3.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/nryutryu/pages/4.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/nryutryu/pages/5.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/nryutryu/pages/6.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/nryutryu/pages/16.html">
    <title>実験：野球ボールの軌道計算</title>
    <link>https://w.atwiki.jp/nryutryu/pages/16.html</link>
    <description>
      next up previous
次へ: レポートに関して 上へ: 実験1：C++/Octaveによる微分方程式の数値解法 戻る: 例題

実験：野球ボールの軌道計算

前節までで学習したオイラー法を用いて，ピッチャーが投げた野球ボールを打者が打った時のボールの軌道を計算するプログラムをC++言語を用いて作成しよう．

まず，ボールの運動に関する基礎方程式を説明する．運動を記述するには，投射物の位置ベクトル $$ r(t)$$ と速度ベクトル $$ v(t)$$ を計算する必要がある．この運動方程式は，
$$\displaystyle \frac{dv}{dt} = \frac{1}{m}F_{a}(v) - g \hat{y}; \hspace{10mm} \frac{dr}{dt} = v$$ 	  	  	(14)

となる．ただし，$$ m$$ は投射物の質量， $$ F_{a}(v)$$ は空気抵抗による力，$$ g$$ は重力加速度，$$ \hat{y}$$ は鉛直方向の単位ベクトルである．実際の空気抵抗の計算は非常に複雑になるので，ここでは次の近似式を用いることとする．
$$\displaystyle F_{a} = - \frac{1}{2}C_{d} \rho A \vert v\vert v$$ 	  	  	(15)

ここで，$$ C_{d}$$ は抵抗計数，$$ \rho$$ は空気の密度，$$ A$$ は投射物の横断面積である．

空気抵抗を無視できる場合，運動方程式は以下の方法で解析的に解くことができる．
$$\displaystyle r(t) = r_{1} + v_{1}t - \frac{1}{2}g t^{2} \hat{y}$$ 	  	  	(16)

ただし， $$ r_{1}\equiv r(t=0)$$ と $$ v_{1}\equiv v(t=0)$$ は位置と速度の初期値である．

以下にプログラムの概要をまとめる．


\begin{itembox}[c]{プログラム概要} \begin{itemize} \item ボールの初期位置 $$r_{1... ...�屬鯢充┐垢襦\item ボールの軌道をグラフ表示する． \end{itemize}\end{itembox}

// baseball.cpp: オイラー法を用いて野球ボールの軌道を計算するプログラム
#include &quot;NumMeth.h&quot;

void main() {

  //* ボールの初期位置及び初期速度を設定する．
  double y1, speed, theta;
  double r1[2+1], v1[2+1], r[2+1], v[2+1], accel[2+1]; 
    cout &lt;&lt; &quot;高さの初期値(メートル) : &quot;; cin &gt;&gt; y1;
  r1[1] = 0; r1[2] = y1;    // 初期位置ベクトル
  cout &lt;&lt; &quot;初期速度(m/s) : &quot;; cin &gt;&gt; speed;
  cout &lt;&lt; &quot;初期角度(度) : &quot;; cin &gt;&gt; theta;
  const double pi = 3.141592654;
  v1[1] = speed*cos(theta*pi/180);   // 初期速度 (x)
  v1[2] = speed*sin(theta*pi/180);   // 初期速度 (y)
  r[1] = r1[1]; r[2] = r1[2];   // 初期位置および初期速度を設定
  v[1] = v1[1]; v[2] = v1[2];

  //* 物理パラメータを設定(質量, Cd値など)
  double Cd = 0.35;       // 空気抵抗(無次元)
  double area = 4.3e-3;   // 投射物の横断面積(m^2）
  double grav = 9.81;     // 重力加速度(m/s^2)
  double mass = 0.145;    // 投射物の質量(kg)
  double airFlag, rho;
  cout &lt;&lt; &quot;空気抵抗(あり:1, なし:0) : &quot;; cin &gt;&gt; airFlag;
  if( airFlag == 0 )
    rho = 0;   // 空気抵抗なし
  else
    rho = 1.2;   // 空気の密度(kg/m^3)
  double air_const = -0.5*Cd*rho*area/mass;   // 空気抵抗定数

  //* ボールが地面に着くまで, あるいは最大の刻み数になるまでループ
  double tau;
  cout &lt;&lt; &quot;時間刻みτ(秒) : &quot;; cin &gt;&gt; tau;
  int iStep, maxStep = 1000;   // 最大の刻み数
  double *xplot, *yplot, *xNoAir, *yNoAir;
  xplot = new double [maxStep + 1];
  yplot = new double [maxStep + 1];
  xNoAir = new double [maxStep + 1];
  yNoAir = new double [maxStep + 1];
  for( iStep=1; iStep&lt;=maxStep; iStep++ ) {

    //* プロット用に位置(計算値および理論値)を記録する
    xplot[iStep] = r[1];   // プロット用に軌道を記録
    yplot[iStep] = r[2];
    double t = ( iStep-1 )*tau;   // 現在時刻
    xNoAir[iStep] = r1[1] + v1[1]*t; // 位置(x)
    yNoAir[iStep] =  ??????          // 位置(y)

    //* ボールの加速度を計算する
    double normV = sqrt( v[1]*v[1] + v[2]*v[2] );
    accel[1] = air_const*normV*v[1];   // 空気抵抗
    accel[2] = air_const*normV*v[2];   // 空気抵抗
    accel[2] -= grav;                  // 重力

    //* オイラー法を用いて, 新しい位置および速度を計算する

	/*
	ここにオイラー法のアルゴリズムを書く
	*/


    //* ボールが地面に着いたら(y &lt; 0)ループを抜ける

	/*
	if文を使って書く
	*/

  }

  //* 最大到達高さと滞空時間を表示する
  cout &lt;&lt; &quot;最大到達高さは&quot; &lt;&lt; r[1] &lt;&lt; &quot;メートル&quot; &lt;&lt; endl;
            滞空時間の表示をここに書く

  //* プロットする変数を出力する
  //   xplot, yplot xNoAir, yNoAir
  ofstream xplotOut(&quot;xplot.txt&quot;), yplotOut(&quot;yplot.txt&quot;), 
    xNoAirOut(&quot;xNoAir.txt&quot;), yNoAirOut(&quot;yNoAir.txt&quot;);

  int i;
  for( i=1; i&lt;=iStep+1; i++ ) {
    xplotOut &lt;&lt; xplot[i] &lt;&lt; endl;
    yplotOut &lt;&lt; yplot[i] &lt;&lt; endl;
  }
  for( i=1; i&lt;=iStep+1; i++ ) {
    xNoAirOut &lt;&lt; xNoAir[i] &lt;&lt; endl;
    yNoAirOut &lt;&lt; yNoAir[i] &lt;&lt; endl;
  }

  delete [] xplot, yplot, xNoAir, yNoAir;  // メモリを開放

}

問題:3
    ボールの軌道のグラフを gnuplot で出力せよ．なお，時間刻み $$ \tau$$ は $$ 0 &lt; t \leq 2$$ の間で5個選ぶこと．補助的に Octave を用いてよもい． 
問題:4
    時間刻み $$ \tau$$ の設定によって，計算結果が大きく異なること が確認できるが，その理由を考察せよ． 
問題:5
    オイラー法よりも高精度な数値計算アルゴリズムについて調べて よ．余力のある人は，アルゴリズムを実装しその結果をオイラー法 と比較してみよ． 


Tomoki MIYAZATO 平成16年6月29日    </description>
    <dc:date>2010-06-22T02:08:08+09:00</dc:date>
    <utime>1277140088</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/nryutryu/pages/15.html">
    <title>例題</title>
    <link>https://w.atwiki.jp/nryutryu/pages/15.html</link>
    <description>
      それでは，簡単な例題を見てみよう．

$$\displaystyle \frac{d}{dt}x=-x, \hspace{5mm} x(0)=1$$ 	(11)

この(一階の)微分方程式には解析解が存在して，

$$\displaystyle x(t) = e^{-t}$$ 	(12)

となる．

問題:2
    微分方程式([*])の解を導出して確かめよ． 

これをオイラー法で計算すると，
$$\displaystyle x_{n+1}$$ 	$$\displaystyle =$$ 	$$\displaystyle x_{n} - x_{n} \tau$$ 	(13)

となる．     </description>
    <dc:date>2010-06-22T01:57:44+09:00</dc:date>
    <utime>1277139464</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/nryutryu/pages/14.html">
    <title>オイラー法</title>
    <link>https://w.atwiki.jp/nryutryu/pages/14.html</link>
    <description>
      最も原始的な解法で，「刻み幅」と呼ぶ量 $$ \tau$$ を定めて，独立変数のとびとびの値
$$\displaystyle t_{n} = a + n\tau \hspace{10mm} (n = 0,1,2,\cdots )$$ 	  	  	(8)

における未知関数の値 $$ x^{i}(t_{n})$$の近似値$$ x^{i}_{n}$$を，
$$\displaystyle x^{i}_{n+1} = x^{i}_{n} + \tau f^{i}_{n}, \hspace{10mm} f^{i}_{n} \equiv f^{i}(x^{1}_{n}, \cdots, x^{m}_{n}, t_{n} )$$ 	  	  	(9)

によって次々と $$ (n=0,1,\cdots)$$ 定めていく方法である．

この公式は $$ t=t_{n}$$における微分方程式([*])の左辺を
$$\displaystyle \frac{d}{dt}x^{i} \fallingdotseq \frac{x^{i}_{n+1} - x^{i}_{n}}{t_{n+1} - t_{n}} = \frac{x^{i}_{n+1} - x^{i}_{n}}{\tau}$$ 	  	  	(10)

で置き換えたものの，分母を払って移項したものであると思えば良い1．

問題:1
    実際にオイラー法を適用しようとすると，幾つかの問題のために 精度が悪く使われることはほとんどない．オイラー法の問題点を説 明せよ．     </description>
    <dc:date>2010-06-22T01:34:28+09:00</dc:date>
    <utime>1277138068</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/nryutryu/pages/13.html">
    <title>数式２</title>
    <link>https://w.atwiki.jp/nryutryu/pages/13.html</link>
    <description>
      独立変数を $$ t$$，$$ t$$ の未知関数(従属変数とも言う)を $$ x(t)$$ として， $$ x(t)$$ の満たすべき二つの条件，すなわち

   1. 微分方程式：
      $$\displaystyle \frac{d}{dt}x = f(x,t) \hspace{10mm} (a \leq t \leq b)$$ 	  	  	(1)

   2. 初期条件：
      $$\displaystyle x(a) = x_{0}$$ 	  	  	(2)

を与えて関数 $$ x(t) (a\leq t \leq b)$$ を求める，と言うのが問題である．

``連立&#039;&#039;方程式の場合も，未知関数が $$ x^{1}(t), \cdots, x^{m}(t)$$ と，$$ m$$ 個あること以外は形式的には全く同じで，

   1. 微分方程式：
      $$\displaystyle \frac{d}{dt}x^{i} = f^{i}(x^{1}, \cdots, x^{m}, t) \hspace{10mm} (i=1, \cdots, m; a \leq t \leq b)$$ 	  	  	(3)

   2. 初期条件：
      $$\displaystyle x^{i}(a) = x^{i}_{0} \hspace{10mm} (i=1, \cdots, m)$$ 	  	  	(4)

を与えて $$ x^{i}(t) (a \leq t \leq b)$$ を求めることが問題である．

``高楷&#039;&#039;の微分方程式，たとえば
$$\displaystyle \frac{d^{3}}{dt^{3}}x = f(x, \frac{dx}{dt}, \frac{d^{2}x}{dt^{2}}, t)$$ 	  	  	(5)

の様なものも，未知関数の数を増やして
$$\displaystyle x^{1} = x, x^{2} = \frac{dx}{dt}, x^{3} = \frac{d^{2}x}{dt^{2}}$$ 	  	  	(6)

とおけば
$$\displaystyle \frac{dx^{1}}{dt}$$ 	$$\displaystyle =$$ 	$$\displaystyle x^{2}$$ 	 
$$\displaystyle \frac{dx^{2}}{dt}$$ 	$$\displaystyle =$$ 	$$\displaystyle x^{3}$$ 	 
$$\displaystyle \frac{dx^{3}}{dt}$$ 	$$\displaystyle =$$ 	$$\displaystyle f(x^{1}, x^{2}, x^{3}, t)$$ 	(7)

という1階微分方程式の形に帰着できる．     </description>
    <dc:date>2010-06-22T00:25:38+09:00</dc:date>
    <utime>1277133938</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/nryutryu/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/nryutryu/pages/1.html</link>
    <description>
      **@wikiへようこそ
-ウィキはみんなで気軽にホームページ編集できるツールです。
-このページは自由に編集することができます。
-メールで送られてきたパスワードを用いてログインすることで、各種変更（サイト名、トップページ、メンバー管理、サイドページ、デザイン、ページ管理、等）することができます

**まずはこちらをご覧ください。
-[[@wikiの基本操作&gt;http://atwiki.jp/guide/category2.html]]
-[[用途別のオススメ機能紹介&gt;http://atwiki.jp/guide/category22.html]]
-[[@wikiの設定/管理&gt;http://atwiki.jp/guide/category6.html]]

**分からないことは？
-[[@wiki ご利用ガイド&gt;http://atwiki.jp/guide/]]
-[[よくある質問&gt;http://atwiki.jp/guide/category1.html]]
-[[無料で会員登録できるSNS内の@wiki助け合いコミュニティ&gt;http://sns.atfb.jp/view_community2.php?no=112]]
-[[@wiki更新情報&gt;http://www1.atwiki.jp/guide/pages/264.html]]
-[[@wikiへのお問合せフォーム&gt;http://atwiki.jp/helpdesk]]
等をご活用ください

**@wiki助け合いコミュニティの掲示板スレッド一覧
#atfb_bbs_list(112)

**その他お勧めサービスについて
-[[大容量１Ｇ、PHP/CGI、MySQL、FTPが使える無料ホームページは@PAGES&gt;&gt;http://atpages.jp/]]
-[[無料ブログ作成は@WORDをご利用ください&gt;&gt;http://atword.jp/]]
-[[2ch型の無料掲示板は@chsをご利用ください&gt;&gt;http://atchs.jp/]]
-[[フォーラム型の無料掲示板は@bbをご利用ください&gt;&gt;http://atbb.jp/]]
-[[お絵かき掲示板は@paintをご利用ください&gt;&gt;http://atpaint.jp/]]
-[[その他の無料掲示板は@bbsをご利用ください&gt;&gt;http://atbbs.jp/]]
-[[無料ソーシャルプロフィールサービス @flabo(アットフラボ)&gt;&gt;http://sns.atfb.jp]]

**おすすめ機能
-[[気になるニュースをチェック&gt;http://atwiki.jp/guide/17_174_ja.html]]
-[[関連するブログ一覧を表示&gt;http://atwiki.jp/guide/17_161_ja.html]]

**その他にもいろいろな機能満載！！
-[[@wikiプラグイン&gt;http://atwiki.jp/guide/category17.html]]
-[[@wiki便利ツール&gt;http://atwiki.jp/guide/category32.html]]
-[[@wiki構文&gt;http://atwiki.jp/guide/category16.html]]
-[[@wikiプラグイン一覧&gt;http://www1.atwiki.jp/guide/pages/264.html]]
-[[まとめサイト作成支援ツール&gt;http://atwiki.jp/matome/]]

**バグ・不具合を見つけたら？ 要望がある場合は？
お手数ですが、メールでお問い合わせください。
    </description>
    <dc:date>2010-06-21T23:39:45+09:00</dc:date>
    <utime>1277131185</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/nryutryu/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/nryutryu/pages/2.html</link>
    <description>
      **メニュー
-[[トップページ]]
-[[プラグイン紹介&gt;プラグイン]]
-[[まとめサイト作成支援ツール]]
-[[メニュー]]
-[[メニュー2]]

----

**リンク
-[[@wiki&gt;&gt;http://atwiki.jp]]
-[[@wikiご利用ガイド&gt;&gt;http://atwiki.jp/guide/]]

**他のサービス
-[[無料ホームページ作成&gt;&gt;http://atpages.jp]]
-[[無料ブログ作成&gt;&gt;http://atword.jp]]
-[[2ch型掲示板レンタル&gt;&gt;http://atchs.jp]]
-[[無料掲示板レンタル&gt;&gt;http://atbbs.jp]]
-[[お絵かきレンタル&gt;&gt;http://atpaint.jp/]]
-[[無料ソーシャルプロフ&gt;&gt;http://sns.atfb.jp/]]

// リンクを張るには &quot;[&quot; 2つで文字列を括ります。
// &quot;&gt;&quot; の左側に文字、右側にURLを記述するとリンクになります


//**更新履歴
//#recent(20)

&amp;link_editmenu(text=ここを編集)
    </description>
    <dc:date>2010-06-21T23:39:45+09:00</dc:date>
    <utime>1277131185</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/nryutryu/pages/3.html">
    <title>右メニュー</title>
    <link>https://w.atwiki.jp/nryutryu/pages/3.html</link>
    <description>
      **更新履歴
#recent(20)


&amp;link_editmenu2(text=ここを編集)
    </description>
    <dc:date>2010-06-21T23:39:45+09:00</dc:date>
    <utime>1277131185</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/nryutryu/pages/4.html">
    <title>プラグイン/ニュース</title>
    <link>https://w.atwiki.jp/nryutryu/pages/4.html</link>
    <description>
      * ニュース
@wikiのwikiモードでは
 #news(興味のある単語)
と入力することで、あるキーワードに関連するニュース一覧を表示することができます
詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/17_174_ja.html


-----


たとえば、#news(wiki)と入力すると以下のように表示されます。


#news(wiki)
    </description>
    <dc:date>2010-06-21T23:39:45+09:00</dc:date>
    <utime>1277131185</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/nryutryu/pages/5.html">
    <title>まとめサイト作成支援ツール</title>
    <link>https://w.atwiki.jp/nryutryu/pages/5.html</link>
    <description>
      * まとめサイト作成支援ツールについて
@wikiには[[まとめサイト作成を支援するツール&gt;&gt;http://atwiki.jp/matome/]]があります。
また、
 #matome_list
と入力することで、注目の掲示板が一覧表示されます。

利用例）#matome_listと入力すると下記のように表示されます
#matome_list
    </description>
    <dc:date>2010-06-21T23:39:45+09:00</dc:date>
    <utime>1277131185</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/nryutryu/pages/6.html">
    <title>プラグイン/編集履歴</title>
    <link>https://w.atwiki.jp/nryutryu/pages/6.html</link>
    <description>
      * 更新履歴
@wikiのwikiモードでは
 #recent(数字)
と入力することで、wikiのページ更新履歴を表示することができます。
詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/17_117_ja.html


-----


たとえば、#recent(20)と入力すると以下のように表示されます。


#recent(20)
    </description>
    <dc:date>2010-06-21T23:39:45+09:00</dc:date>
    <utime>1277131185</utime>
  </item>
  </rdf:RDF>
