MATLABでテイラー展開してグラフ化するプログラムを書いた。以下コード
close all
f = @(x) cos(x);
a = 0;
n = 15;
x_range = [-2*pi, 2*pi];
[x_vals, y_original_vals, y_taylor_vals]=plotTaylorSeries(f, a, n, x_range);
% プロット
figure;
plot(x_vals, y_original_vals, 'b-', 'DisplayName', 'Original Function');
hold on;
plot(x_vals, y_taylor_vals, 'r--', 'DisplayName', sprintf('Taylor Series (n=%d)', n));
xlabel('x');
ylabel('y');
legend;
title(sprintf('Taylor Series Approximation (Order %d) at x = %d', n, a));
hold off;
function [x_vals, y_original_vals, y_taylor_vals] = plotTaylorSeries(f, a, n, x_range)
% f: 関数ハンドル
% a: テイラー展開の中心
% n: テイラー展開の次数
syms x;
% 元の関数
y_original = f(x);
% テイラー展開
taylor_series = taylor(y_original, x, 'Order', n+1, 'ExpansionPoint', a);
% プロットのために数値計算用の関数に変換
f_taylor = matlabFunction(taylor_series);
f_original = matlabFunction(y_original);
% x の範囲を設定
x_vals = linspace(x_range(1), x_range(2), 1000);
% 元の関数とテイラー展開の評価
y_original_vals = f_original(x_vals);
y_taylor_vals = f_taylor(x_vals);
end
plotTaylorSeries
関数・・・与えられた関数 \(f\)、テイラー展開の中心\(a\)、次数\(n\)、および\(x\)の範囲x_rangeを引数として受け取る。
- 関数
f
をシンボリック変数\(x\)を用いて表現し、taylor
関数を使って指定した中心\(a\)と次数\(n\)でテイラー展開を行う。 matlabFunction
を使って、シンボリック表現を数値計算用の関数に変換する。- 指定された\(x\)の範囲
x_range
に対して、元の関数とテイラー展開の関数を評価する。 - 評価した結果をプロットし、元の関数とテイラー展開の近似を比較する。
コメント