matlab中符号函数如何求最大值的表达式_matlab求解符号表达式的最值

面向符号表达式的优化函数

花费近一个小时的时间,给你编了个函数,细节上或许还有可完善的地方,但基本框架应该没大问题了。觉得有用就采纳了吧。function [x_opt, fval] = fminunc_sym(f)

% 首先分析表达式中有哪些符号变量

vars=symvar(f);

N = length(vars);

varmap = cell(1, N);

% 要把所有变量替换为向量x的元素,首先单独考虑表达式中有没有x

syms x

idx = find(vars==x);

if ~isempty(idx)

f = subs(f, x, sprintf('x(%i)',idx));

varmap{idx} = x;

end

% 替换表达式中除x之外的变量

for k = 1 : N

if k == idx, continue, end

f = subs(f, vars(k), sprintf('x(%i)',k));

varmap{k} = vars(k);

end

% 转换为关于x的内联函数

f_inline = inline(char(f), 'x');

% 调用优化函数

[x, fval] = fminunc(f_inline, rand(N,1));

% 处理结果:把最优点保存在一个struct中

for i = 1 : N

x_opt.(char(varmap{i})) = x(i);

end

调用实例syms x y z u v w

f = (x-1)^2 + (y-2)^2 + (z-3)^2 + (u-4)^2 + (v-5)^2 + (w-6)^2;

[vars, fval] = fminunc_sym(f)

得到vars =

u: 4.0000

v: 5.0000

w: 6.0000

x: 1.0000

y: 2.0000

z: 3.0000

fval =

2.3870e-012

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值