我正在为通信频道实现ML接收器。
为此,我需要在x
(16QAM)范围内找到x = 0 to 15
以下函数的最小值
f = abs( rx(n) - (h'*h)*x )^2 ;
我必须在循环(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)
。
答案 0 :(得分:0)
您可以使用匿名函数在单独的文件中调用函数来执行此操作:
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
答案 1 :(得分:0)
您需要使用rx(n)作为第二个参数创建一个函数,然后将其转换为循环内的单个参数匿名函数。
以下是MATLAB文档中的一个示例(用于'fminsearch'函数):
如果参数化了fun,则可以使用匿名函数进行捕获 与问题有关的参数。例如,假设你想要 最小化由以下定义的myfun的目标函数 功能文件:
function f = myfun(x,a)
f = x(1)^2 + a*x(2)^2;`
请注意,myfun有一个额外的参数a,因此您无法将其直接传递给> fminsearch。优化a的特定值,例如a = 1.5。
- 将值分配给a
a = 1.5; % define parameter first
- 醇>
呼叫 fminsearch使用单参数匿名函数捕获它 a的值并用两个参数调用myfun:
x = fminsearch(@(x) myfun(x,a),[0,1])
希望有所帮助(抱歉文本格式不好)。