関数の形が既知ではなく、1変数とそれに対応する関数値のベクトルのみが分かっている場合に、どのように積分を行いますか。
5 ビュー (過去 30 日間)
古いコメントを表示
MathWorks Support Team
2013 年 10 月 25 日
回答済み: MathWorks Support Team
2013 年 10 月 25 日
x, f(x) というデータについての列ベクトルがあり、その関数の形が既知ではない場合に、
f(x) の x のデータのある範囲において積分を行う方法を教えてください。
採用された回答
MathWorks Support Team
2013 年 10 月 25 日
次のように 2通りの方法が考えられます。
1. trapz 関数を用いる方法
trapz 関数を用いて、台形積分法に則った積分近似を計算します。
ベクトル x y が存在する場合、次のように計算を実行します。
trapz(x,y)
一定間隔の場合、そうでない場合、複素数の場合に対応しています。
詳細は、コマンドウィンドウから help 、 doc に続けて関数名をタイプインし、参照することができます。
2. ode45 等の微分方程式を解く関数を用いる方法
ode45 等の微分方程式を解く関数を用いて、その入力引数に関数ハンドルとして指定した方程式を積分することができます。
関数の詳細は、help 、 doc に続けて関数名をコマンドウィンドウ上でタイプインし、参照することができます。
一例として、ode45 関数を用いて積分を行う事例を以下に示します。
本ページ下部からダウンロード可能な function MATLAB ファイル'odefcn.m' のように方程式を定義し、
次のスクリプトのように MATLAB コマンドラインから実行します。
ut = 0:1/100:10; % 時間ベクトル --- x に相当
u = abs(sin(2*pi*ut)); % 入力信号 --- f(x) に相当
opt = odeset('MaxStep',1/100);% 最大ステップサイズの規定
[T Y] = ode45(@(t,y) odefcn(t,y,ut,u),[0 5],0,opt); % 0~5秒まで積分、y(0)=0
plot(T,Y) % 時間 対 積分結果の表示
Y(end) % --- 積分結果の最終値
(odefcn.m の内容)
function dydt = odefcn(t,y,ut,u)
u = interp1(ut,u,t);
dydt = u;
関数の値の変化に伴い、逐次適したステップサイズを選択した計算がされるため、精度面で有用であると言えます。
0 件のコメント
その他の回答 (0 件)
参考
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!