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

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页