MATLAB调用上限为参数的integral函数报维度错误求解
MATLAB integral函数矩阵维度报错的原因与修复方案
报错核心诱因
integral数值积分的底层逻辑是批量传入向量格式的采样点到被积函数,要求被积函数接收向量输入时,返回同长度的向量输出。- 出错的匿名函数
f1=@(t) (25.46/t)+0.01519中使用了矩阵右除运算符/:当传入的采样点t是向量时,25.46/t会被MATLAB识别为线性方程组求解运算,对运算维度有严格要求,向量输入无法满足矩阵运算的维度规则,因此触发报错。 - 测试代码中
f2可以正常运行,是因为f2内的t/100是向量除以标量的运算,该场景下/会自动执行逐元素计算,不会触发矩阵运算规则。 - 额外隐患:代码中循环变量命名为
t,被积函数的形参也命名为t,虽然匿名函数形参作用域优先级更高不会直接取值错误,但极易引发变量逻辑混淆,建议修改形参名做区分。
修复方法
- 所有被积函数中,涉及和积分变量相关的乘、除、幂运算,全部替换为逐元素运算符:
- 除法
/替换为./ - 乘法
*替换为.*(标量与向量相乘可省略,但统一写法可避免后续踩坑) - 幂运算
^替换为.^
- 除法
- 建议区分循环变量与被积函数形参的命名,避免逻辑混淆。
修复后的对应代码
将原第28行附近出错的代码修改为:
% 形参改为x和循环变量t做区分,除法使用逐元素运算符./ f1= @(x) (25.46./x)+0.01519 ; anf3=integral(f1,298.15,t);
提示:代码中其余匿名函数(fun2、f2、f3)如果后续触发同类维度报错,按相同规则替换为逐元素运算符即可。
内容的提问来源于stack exchange,提问作者mohammad rezza
相关产品推荐
相关产品推荐

