MATLABでテイラー展開してグラフ化するプログラムを書いた

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を引数として受け取る。

  1. 関数 f をシンボリック変数\(x\)を用いて表現し、taylor 関数を使って指定した中心\(a\)と次数\(n\)でテイラー展開を行う。
  2. matlabFunction を使って、シンボリック表現を数値計算用の関数に変換する。
  3. 指定された\(x\)の範囲 x_range に対して、元の関数とテイラー展開の関数を評価する。
  4. 評価した結果をプロットし、元の関数とテイラー展開の近似を比較する。

コメント

タイトルとURLをコピーしました