Top / PIP / 2019 / hw06and07

パターン情報処理 2019年度 [edit]

第6回と第7回の宿題 [edit]

この2回分はまとめて出題します.

  • 締切: 0531金 13時30分
  • 提出場所: 1-511前に設置の提出BOX.BOXは,0527月以降に設置します.それより前に提出したい方は個別に相談してください.
  • 質問はオフィスアワー等にお気軽にどうぞ(cf. 時間割/2019
  • 龍と三角関数(フーリエ級数展開関係の参考資料...のようなもの)

準備 [edit]

-8.0  0.0
-6.0  0.0
-6.0  -2.0
-4.0  0.0
-2.0  0.0
-2.0  -2.0
-0.0  0.0
 2.0  0.0
 2.0  -2.0
 4.0  0.0
 6.0  0.0
 6.0  -2.0
 8.0  0.0

上記の内容の t012345.txt (t012345 は実際には自分の学籍番号)というファイル名のテキストファイルを作成し,gnuplot でそのグラフを描きなさい. gnuplot の使い方については こちら をたどって参考にしたらよい.また,次の条件でグラフを描くこと.gnuplotに関する補足を読もう.

  • 横軸の範囲は [-8, 8],縦軸の範囲は [-2.5, 1] とする
  • 折れ線グラフとなるように描画スタイルを指定する
  • 横軸縦軸に相当する直線も描画する

問1(解答は第6回配布の紙に記述してください) [edit]

\( f(t) \) の基本周期 \( T \) を答えなさい.さらに,\( -\frac{T}{2} \leq t \leq \frac{T}{2} \) の範囲で \( f(t) \)\( t \) の式で表しなさい.

問2(解答は第6回配布の紙に記述してください) [edit]

\( f(t) \) をフーリエ級数展開したときの展開係数 \( a_0, a_k, b_k (k = 1, 2, \dots ) \) を求めなさい.記号の定義は講義資料の通りとする.

ヒント: この場合,\( f(t) \) は偶関数でも奇関数でもないことに注意

問3(解答は第6回配布の紙に記述してください) [edit]

\( f(t) \) のフーリエ級数展開を \( n \) 番目の成分までで打ち切ったものを \( f_n(t) \)と表すとき,\( f_4(t) \) を式で表しなさい.

問4(解答の仕方については下記参照) [edit]

gnuplot を用いて \( f(t) \) のグラフと \( f_0(t) \), \( f_1(t) \), \( f_2(t) \), \( f_3(t) \), \( f_4(t) \) 全てのグラフを重ねて描いて,説明と考察を加えなさい.

  • グラフを描く際は,「準備」の指示に従うとともに,以下の「gnuplotに関する補足」の最初の方をよく読んで,標本点数を 1000 にして描画すること
  • グラフはA4の紙に印刷し,学籍番号,氏名を記入すること
  • 説明や考察はグラフを印刷した紙に手書き等で書き加えればよい.裏面も使用する場合は表面を見ればそのことが分かるようにすること.
  • グラフの曲線はどれがどれなのかわかるように工夫すること(手書きで注釈を加える,「補足」の技を使ってラベルに f2(x) とか付くようにする,etc.)

問5(おまけ問題) [edit]

これはおまけ問題です. やらなくても減点にはなりません.やったら棒茄子?

次の手順を実行して開く Notebook の中身を確認しよう.提出法は Notebook の末尾にあります.

  1. ↓の「Open in Colab」をクリック(右クリックして「新しいタブで開く」等にしておくのがよいでしょう).
  2. 以降の操作法については,PIP/2019/hw05 の説明と,開いた Notebook 内の説明を見てください.

gnuplot に関する補足 [edit]

必須かもしれない事項 [edit]

  • 折れ線グラフとなるように描画スタイルを指定するには,次のようにしたらよい
    gnuplot> set style data lines
  • 横軸縦軸に相当する直線を描画するには,次のようにしたらよい
    gnuplot> set zeroaxis
  • gnuplot では円周率 \( \pi \) は pi と書きます.
     gnuplot> plot [0:1/pi] pi*x
  • 関数のグラフを描く際には,デフォルトの設定だと横軸の標本化間隔が広すぎて曲線ががたがたして見えるでしょう.デフォルトの標本点数は次のコマンドを実行するとわかります.
    gnuplot> show samples
    標本点数を10にするには次のようにします.
    gnuplot> set samples 10

楽したいひと向けの事項 [edit]

  • gnuplot に与えるコマンドをあらかじめテキストファイルに書いておいて読み込ませることもできます.例えば
    set yrange [ -2:2]
    plot sin(x)
    replot cos(x)
    
    という内容のファイルを hoge.plt という名前で作っておいたとすると,gnuplot で
    gnuplot>  load  "hoge.plt"
    とすればok.
  • フーリエ級数展開を途中で打ち切ったもののグラフを描く際には,次のようにgnuplot上で関数を定義して使うようにすると楽(間違えたときに修正ややり直しがしやすい)かも
    gnuplot> f0(t) = 「f0(t)の式」
    gnuplot> f1(t) = f0(t) + 「ほげ」 
    gnuplot> f2(t) = f1(t) + 「ふが」
    gnuplot> f3(t) = ...
    gnuplot> plot "tABCDEF.txt" w l, f0(x), f1(x), f2(x), f3(x)
    

まにあむけ [edit]

  • 上記の関数定義では,引数を複数にすることもできます.また,C言語の三項演算子が使えます.例えば
    gnuplot> f(t,a) = t > 0 ? a*t : a*(-t)
    gnuplot> plot f(x,2)
    
    とすると,
    \[ y = a |x| \]
    のグラフを描けます.これをうまく利用すると,場合分けの必要なフーリエ係数を…例えば...
    omega0 = 2*pi/3
    A(k, t) = k % 2 == 0 ? 2.0/k*cos(omega0*k*t) : -2.0/k*cos(omega0*k*t)
    B(k, t) = 0
    
    f0(t) = 1
    f1(t) = f0(t) + A(1,t) + B(1,t)
    f2(t) = f1(t) + A(2,t) + B(2,t)
    f3(t) = f2(t) + A(3,t) + B(3,t)
    f4(t) = f3(t) + A(4,t) + B(4,t)
    
    set samples 1000
    set zeroaxis
    set xrange [-3:3]
    set yrange [-3:5]
    
    plot f0(x)
    pause -1
    replot f1(x)
    pause -1
    replot f2(x)
    pause -1
    replot f3(x)
    pause -1
    replot f4(x)
    
    pause -1 を実行すると,gnuplot がキー入力を待ちます.Enter 押すと次へ進みます.

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-05-20 (月) 18:25:58 (205d)