数値計算法演習課題 次のページに続きます.

数値計算法 演習課題 6
2015/06/02
以下の課題を行い,レポートを提出しなさい.なお,授業のページの「レポート作成について」の項目を
しっかりと確認しなさい.また,レポートの作成にあたって参考にした文献や Web ページは,その出典を明
示しなさい.課題を行うに当たり,HP 上の「参考資料」を参考にしなさい.
課題 1.
(1.1)
マクローリン展開を用いた近似について理解する.
sin(x) のマクローリン展開を n 次で打ち切った多項式を Pn (x) とする.多項式の次
数 n と値 x0 を与えると多項式の値 Pn (x0 ) を返す関数 mysin を作成しなさい.
• 関数の入力 x をベクトルで与えた場合でも正しく動作するように演算子の使い方に気をつけなさい
• 隣り合う項の関係を用いて,べき乗を何度も計算する必要のないプログラムとすることが望ましい
(1.2)
x=
π
4
において n を変えて近似値を計算し,MATLAB の sin 関数と結果の比較
を行いなさい.結果はグラフや表などを用いてわかりやすくまとめなさい.
(1.3)
(1.1) で作成した関数を用いて,多項式の次数 n が 1, 3, 5, 7 のときのグラフを区間
[0,π] で出力しなさい.
(1.4)
次数 n を十分に大きくすると,項を足し込んでも多項式の値の計算に寄与しなくな
る.その理由について考えなさい.
ヒント:足し込む項の値を確認すると非常に小さくなっていることが見てとれる
次のページに続きます.
課題 2.
マクローリン展開を用いた指数関数 ex の近似を考える.
(2.1)
指数関数 ex のマクローリン展開を n 次で打ち切った多項式を Qn (x) とする.
(2.1-1)
Qn (x) の k 番目の項と k + 1 番目の項の関係を示しなさい.
(2.1-2)
(1.1) と同様にして,多項式の値 Qn (x0 ) を返す関数 myexp を作成しなさい.
(2.1-3)
n = 200 とし,区間 [-50,50] で myexp 関数と MATLAB の exp 関数との相対誤差のグラフを描
きなさい.ただし,真値は exp 関数の値とする,
(2.2)
(2.1) で用いたような多項式による ex の近似は,x > 0 では誤差があまり発生して
いない.そのため,x < 0 においては ex = 1/e−x の関係を用いることで誤差の改善
ができる.この改良を施した関数 myexp2 を作成しなさい.
(2.3)
(2.2) とは別の改善方法として,元の級数をより速く収束する級数に変形する方法
が考えられる.例えば,e12.3 の計算はマクローリン展開を用いると
e12.3 = 1 + 12.3 +
12.32 12.33
+
+ ···
2!
3!
(1)
となる.この級数は収束するが,分子が指数関数的に増加するので,途中で打ち切ったとき
の誤差は非常に大きくなる.そこで,式 (1) を
e12.3 = e12 ė0.3 = e12 (1 + 0.3 +
0.32 0.33
+
+ · · ·)
2!
3!
(2)
というように変形する.式 (2) では分子が指数関数的に減少するため,収束が速く,途中
で打ち切ったときの誤差が小さくなり,ex を精度良く計算できる.この改善を施した関数
myexp3 を作成しなさい.ただし,e の値には exp(1) の値を用いてよい.また,整数部の
取り出しには fix 関数を用いて良い.
(2.4)
n を 200 と 1000,区間を [− 50,50] と [− 500,500] とし,各組み合わせ (4 通り) で,
作成した関数 myexp,myexp2,myexp3 と MATLAB の exp 関数との相対誤差
のグラフを描きなさい.このとき,n と区間の組み合わせごとにグラフを描きなさ
い.また,legend 関数を用いて,凡例をつけなさい.