Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何将常量传递给循环中fminbnd(@myfun,x1,x2)中使用的函数_Matlab - Fatal编程技术网

Matlab 如何将常量传递给循环中fminbnd(@myfun,x1,x2)中使用的函数

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); 我的问题是,

我正在为一个通信通道实现一个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);

我的问题是,由于函数
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;%首先定义参数

  • 召唤 使用一个单参数匿名函数捕获 值,并使用两个参数调用myfun:

    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])