【Matlab學習手記】Matlab積分問題

一個程序徹底搞懂Matlab的數值積分、符號積分問題。

  1. 數值積分問題,給定被積分函數和積分上下限,使用 integral 函數得到積分值;
  2. 符號積分問題,通常結果是解析解,即需要知道被積分函數的原函數表達式;如果原函數未知或者表達形式過於複雜(同樣沒有明確的表達式),可以自定義一個積分函數(給定一個積分區間,返回一個積分值)來簡短表達;
  3. 一重積分問題本質上得到的是面積,當然可以用積分定義來計算總積分。
function IntegralDemo()
clear; clc;
%% 數值積分
% sample 1
fun1 = @(x) sin(x);
result = integral(fun1, 0, pi);
disp(result);                         % 2.0000
% sample 2
fun2 = @(x) sin(x) ./ x;              % 注意運算符 ./
result = integral(fun2, 0, 1);
disp(result);                         % 0.9461
%% 解析解
syms x t
% sample 3
y1 = sin(x);
f1 = int(y1, x, 0, t);
disp(f1);                             % 1 - cos(t)
% sample 4
y2 = sin(x) / x;
f2 = int(y2, x, 0, t);
disp(f2);                             % sinint(t)
disp(double(subs(f2, t, 1)));         % 0.9461,相當於 sample 2 的結果;
disp(MyIntegral1(fun2, 0, 1, 10000)); % 0.9461, 用自定義的積分方法
disp(MyIntegral2(fun2, 0, 1));        % 0.9461, 用自定義的積分方法
% f2 和 MyIntegral1(fun, 0, t, 10000) 或者 MyIntegral2(fun, 0, t) 等價
% 情況複雜一點,被積分函數沒有原函數或者沒有明確的表達式,可以採用自定義函數這種方法 

function result = MyIntegral1(fun, minX, maxX, intervalCount)
% fun: 函數句柄
% minX: 積分下限
% maxX: 積分上限
% intervalCount: 積分區間份數
% 利用積分的定義來求面積
result = 0;
h = (maxX - minX) / intervalCount;   % 步長
for i = 1 : intervalCount
    result = result + h * fun(minX + (i - 0.5) * h);    % 採用簡單矩形公式:面積 = 底 × 高
end

function result = MyIntegral2(fun, minX, maxX)
% fun: 函數句柄
% minX: 積分下限
% maxX: 積分上限
% 調用 integral 函數
result = integral(fun, minX, maxX); 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章