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

MATLAB fminunc求解含向量参数r的目标函数最小值方法

修改方案

问题根源

fminunc调用目标函数时,默认仅会向目标函数传入1个参数,即待优化的变量x。原代码直接将带两个输入参数的rosenbrockwithgrad句柄传给fminunc,运行时会因缺少参数r报错;另外如果r为向量,直接参与计算会导致目标函数返回值为向量,不符合fminunc要求目标函数返回标量的规则。

修改步骤

  • 在调用fminunc前,预先定义好需要传入的向量r的实际值
  • 使用匿名函数绑定额外参数r,构造仅接收x作为输入的目标函数句柄传给fminunc
  • 若r为向量,需根据实际需求对r做标量化处理(如求和、取范数等),保证目标函数最终返回标量

修改后完整代码

主求解代码

x0 = [-1,2,1,2];
% 替换为你实际需要使用的向量r
r = [0.1, 0.2];
% 匿名函数绑定参数r,适配fminunc的入参要求
fun = @(x) rosenbrockwithgrad(x,r);

x = fminunc(fun,x0)


function [f] = rosenbrockwithgrad(x,r)
in = inp();
% 计算目标函数值,若r为向量请做标量化处理,示例为对r求和
% f =  sum(r) + (rose(1,2,x(1),x(2),x(3),x(4),in.ep)+(1-x(1))^2);
f =  r + (rose(1,2,x(1),x(2),x(3),x(4),in.ep)+(1-x(1))^2);
end

function [f1] = rose(m,l,k1,k2,k3,k4,ep)
f1=(100*(k1 - k2)^2)+ep+(k3*l)+(k4*m);
end

输入参数函数(无需修改)

function [in] = inp()
in.ep=-2;
end

关键说明

  • 匿名函数@(x) rosenbrockwithgrad(x,r)会自动捕获当前工作区中r的值,fminunc调用时仅传入优化变量x,不会出现参数缺失问题
  • 如果r是随迭代变化的参数,该方法不适用,需将r的更新逻辑写入目标函数内部
  • 必须保证目标函数返回值为标量,否则fminunc会抛出维度不匹配错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:18:27