gpt4 book ai didi

matlab - 最小化具有大向量变量的函数的最佳方法?

转载 作者:行者123 更新时间:2023-12-02 22:32:08 25 4
gpt4 key购买 nike

我正在尝试最小化作为 1x25 向量 (weights_vector) 函数的函数。换句话说,我试图在向量中找到使函数最小化的值。

函数定义为:

    function weights_correct = Moo(weights_vector)

corr_matrix = evalin('base', 'corr_matrix');
tolerance = evalin('base', 'tolerance');
returns = evalin('base', 'returns');

weights_correct = weights_vector'*corr_matrix*weights_vector - tolerance*returns'*weights_vector;

end

在这个函数上,我调用:

    weights_correct = fminsearch(@Moo, weights_vector);

迭代直到我看到错误

    "Exiting: Maximum number of function evaluations has been exceeded
- increase MaxFunEvals option."

这让我相信我没有正确地最小化。怎么回事?

最佳答案

在这里使用 evalin 很愚蠢。多次调用 evalin 将无缘无故地低效。如果您努力学习将 evalin 用于错误的目的,请努力学习如何使用函数句柄。

您甚至不需要定义 m 文件,尽管您可以这样做。一个简单的函数句柄就足够了。

Moo = @(w_v) w_v'*corr_matrix*w_v-tolerance*returns'*w_v;

然后调用更好的优化器。在 25 个变量的问题上使用 fminsearch 是疯狂的。如果您经常进行优化,那么优化工具箱是值得投资的。

weights_correct = fminunc(@Moo, weights_vector);

或者,您可以在一行中完成所有操作。

weights_correct = fminunc(@(w_v) w_v'*corr_matrix*w_v-tolerance*returns'*w_v, weights_vector);

请注意,当您在此处创建函数句柄时,MATLAB 会传入这些数组的值。

最后,max function evals 的问题是您正在做的事情的症状。对于 fminsearch,25 个变量在任何合理的时间内都无法期望收敛。您当然可以更改限制,但最好是一开始就使用正确的工具。

关于matlab - 最小化具有大向量变量的函数的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12064018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com