【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); 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值