gpt4 book ai didi

matlab - 如何在 MATLAB 中传递一个带有固定参数的函数作为参数

转载 作者:行者123 更新时间:2023-12-05 04:14:38 30 4
gpt4 key购买 nike

我想将一个带有参数的函数传递给另一个将函数处理程序(指针)作为参数的函数,但需要修复函数处理程序的一些参数。如何在 MATLAB 中做到这一点?

具体来说,我想使用 fminsearch(fun,x0) 最小化函数 h(eta)。一个明显的问题是,如果我传递 x0 中的所有参数,它将针对所有参数最小化它,但这不是我想要做的。我真正想做的是:

enter image description here

我已经尝试了以下方法,据我测试它似乎有效:

function [ h ] = function_returner( x )
%
t = -10000;
h = @(eta)-10*x + t + eta^2;
end

和测试它的脚本:

h = function_returner(0);
h(3) %-9991
[x,fval,exitflag] = fminsearch(h,[10]) %returns [0, -10000, 1]

返回正确的最小值和获得最小值的 x 的正确值。我想确定的是,在我返回函数处理程序后,h 的固定变量确实保持固定。即,如果 h 被传递,如何确保变量不会仅仅因为它们进入与函数处理程序具有相同变量名称的环境而改变值?

我还写道:

x = inf;
t = inf;
eta = inf;
h = function_returner(0);
h(3) %-9991
[x,fval,exitflag] = fminsearch(h,[10]) %returns [0, -10000, 1]

它似乎没有受到影响(即它按照我希望的方式工作)。但为了安全起见,我希望不会有一些奇怪的边缘条件导致这不起作用。

最佳答案

你的担心是不必要的。 :-) 事实是,当您创建一个匿名函数时,用于其定义的所有外部变量都是卡住,因此您不必担心该函数会改变您背后的行为通过修改后的参数返回。要对此进行测试,请尝试此脚本:

a = 1;
b = 2;

f = @(u,v) u*a + v*b;
x = f(1,1); %// x is 3 = 1*1 + 1*2

a = 2;
b = 3;

g = @(w) f(w,a)
y = g(1); %// y is 5 = f(1,2) = 1*1 + 2*2

关于matlab - 如何在 MATLAB 中传递一个带有固定参数的函数作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34795427/

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