Matlab 如何将常量传递给循环中fminbnd(@myfun,x1,x2)中使用的函数
我正在为一个通信通道实现一个ML接收器。 为此,我需要找到以下函数关于Matlab 如何将常量传递给循环中fminbnd(@myfun,x1,x2)中使用的函数,matlab,Matlab,我正在为一个通信通道实现一个ML接收器。 为此,我需要找到以下函数关于x的最小值,其范围为x=0到15(16QAM) 我必须在循环中迭代这个(n=1:100)。我发现我可以通过matlab函数x=fminbnd(fun,x1,x2)实现这一点,我可以将函数放在一个单独的.m文件中,如下所示: function f = myfun(x) f = abs( rx(n) - (h'*h)*x )^2 并从中找到x的最小值 x = fminbnd(@myfun,x1,x2); 我的问题是,
x
的最小值,其范围为x=0到15
(16QAM)
我必须在循环中迭代这个(n=1:100
)。我发现我可以通过matlab函数x=fminbnd(fun,x1,x2)
实现这一点,我可以将函数放在一个单独的.m文件中,如下所示:
function f = myfun(x)
f = abs( rx(n) - (h'*h)*x )^2
并从中找到x
的最小值
x = fminbnd(@myfun,x1,x2);
我的问题是,由于函数
rx(n)
的常量在循环中不断变化,如何将其发送到循环中的函数myfun(x)
。您可以使用匿名函数在单独的文件中调用您的函数:
function mainfcnmin
h = [1;1];
rx = 1:3;
for n = 1:length(rx)
x = fminbnd(@(x)myfun(x,rx(n),h),0,15)
end
end
function f = myfun(x,rx,h)
f = abs(rx-(h'*h)*x)^2 ;
end
或者在一个文件中直接在匿名函数中定义函数,如下所示:
h = [1;1];
rx = 1:3;
for n = 1:length(rx)
x = fminbnd(@(x)(abs(rx(n)-(h'*h)*x)^2),0,15)
end
您将需要使用rx(n)作为第二个参数创建一个函数,然后将其转换为循环中的单参数匿名函数 以下是MATLAB文档中的一个示例(“fminsearch”函数): 如果fun是参数化的,则可以使用匿名函数来捕获 该问题取决于参数。例如,假设您想 最小化目标函数myfun,其定义如下 功能文件: 请注意,myfun有一个额外的参数a,因此不能将其直接传递到>fminsearch。为a的特定值进行优化,例如a=1.5
a=1.5;%首先定义参数
x = fminsearch(@(x) myfun(x,a),[0,1])
function f = myfun(x,a)
f = x(1)^2 + a*x(2)^2;`
x = fminsearch(@(x) myfun(x,a),[0,1])