手算一个定积分,算到一半不确定,打开 MATLAB 敲 int,结果返回的式子里还带着 int,等于没算。不是命令错了,是这个积分没有解析解。这种情况在概率积分、贝塞尔函数上很常见,符号引擎也拿它没办法。
matlab 积分 分两条路:符号积分用 int,数值积分用 integral,符号解要 Symbolic Math Toolbox。先定义符号变量:syms x; f = x^2*exp(x); F = int(f, x),定积分加上下限就是 int(f, x, 0, 1)。结果想转小数用 double(F) 或者 vpa(F)。
int 的第二个参数是积分变量,别漏。MATLAB 命令窗口里符号结果默认显示分数和根号,不会自动转小数。
没有解析解就转数值
integral(@(x) exp(-x.^2), 0, Inf) 直接给数值结果。函数句柄里必须用点运算,x.^2、x./2 这种,写成 x^2 会报矩阵维度错误。二重积分用 integral2,三重用 integral3,区域不规则的先查文档确认参数顺序,积分上限写 Inf 也行,发散的话会给警告。
离散数据用 trapz
只有一串采样点、没有函数表达式时,trapz(x, y) 按梯形法算面积,点越密越准。trapz 对不均匀采样直接用 x 做间距,别自己乘 delta。老代码里的 quad、quadl 已经不推荐,新写的统一用 integral。
几个容易踩的坑
符号结果里出现 int,说明没积出来,可以试试 simplify,或者加假设 assume(x, 'positive'),复杂式子先化简再积分,成功率会高一些。积分区间里有奇点,数值结果会报警告,最好拆区间。角度和弧度混用,算出来差得离谱,sin 里要给弧度。
先用 int 试解析解,几十秒出不来就换 integral,别跟符号引擎较劲。matlab 积分 的结果对不对,拿一个能手算的简单例子验证一遍最稳妥。数值积分结果带误差,默认精度 1e-6,需要更准就调 AbsTol 和 RelTol,调太小会变慢。