You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB调用fminsearch求自定义函数最小值时报错求助

报错排查与修复方案

  • 函数调用与定义名称不匹配
    你声明的自定义函数名为SQ,但调用fminsearch时传入的函数句柄是@crc,Matlab无法找到名为crc的函数,直接触发调用错误。需要将调用代码改为fminsearch(@SQ, x)。
  • 函数返回值未正确赋值
    你在函数开头声明返回变量为crc,但函数末尾只计算了误差变量sqer,没有给crc赋值,函数返回值为空。需要在函数最后添加一行crc = sqer;。
  • Matlab数组索引越界错误
    Matlab数组默认从1开始索引,你代码中循环变量t从0开始,执行I(t)=.1时会触发0索引的越界报错。需要将循环变量调整为从1开始,或给索引做+1偏移,比如用I(t+1)对应t从0到89的取值。
  • 除零错误导致返回非数值
    计算h=pdfz./(1-cdfz)时,当累积分布函数cdfz趋近于1时,分母1-cdfz趋近于0,会生成Inf或NaN,fminsearch无法处理非数值的目标函数输出。可以添加分母截断逻辑,比如改为h=pdfz./max(1-cdfz, 1e-12);避免除零。
  • gamma分布参数约束缺失
    gampdf的形状参数、尺度参数都要求为正数,fminsearch是无约束优化算法,迭代过程中很容易生成负的x分量,导致gampdf返回NaN。可以改用带约束的优化函数比如fmincon,给x的四个分量设置下限为1e-6,或者在自定义函数开头加判断:如果任意x分量小于等于0,直接返回一个很大的误差值。
  • 数组长度不匹配问题
    两个长度为90的数组做卷积,得到的pdfz长度为179,你定义的I数组长度为161,后续截取索引时如果超出数组长度也会触发报错,建议先单独测试自定义函数,输入一个初始x验证输出是否为合法标量数值,再调用优化函数。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:54:05