如何将逻辑条件转换为函数的变量

时间:2017-12-05 08:36:14

标签: matlab vectorization

我想实现以上目标:

Rn = 0.009; % Resolution of simulation (in m^3)
Xs = -1 : Rn : 1;
Ys = -1 : Rn : 1;
Zs =  0 : Rn : 1; 

[X Y Z] = meshgrid(Xs, Ys, Zs); 
alpha   = atan2(Z,X);
ze      = x.^2 + y.^2; % define some condition
m       = 0.59; % manual input
cond    = (pi/3 <= alpha)     & ...
          (alpha <= (2*pi/3)) & ...
          (m <= Z)            & ...
          (Z <= ze); % more conditions 

xl = nnz(cond);        % the number of non-zero elements   
f  = abs(xl*1000 - 90) % guessing m to get f as low as possible

如何将m转换为某个f函数的变量,以便我可以致电fminsearch以快速找到m的相应f ≈ 0?< / p>

1 个答案:

答案 0 :(得分:1)

为了使用m作为变量,您需要定义一个函数句柄。所以你需要写:

 cond = @(m) ((pi/3) <= alpha) & (alpha <= (2*pi/3)) & (m <= Z) & (Z <= ze);

但是,您不能在nnz例程中使用函数句柄,因为它只接受矩阵作为输入。但是,问题的解决方案是在cond中只有布尔变量。这意味着,您可以简单地将cond求和,并获得与nnz相同的结果。

我看到的唯一问题是如何在fminsearch中实现总和。不幸的是,我无法访问fminsearch,但我会假设您可以使用reshape执行某些操作,然后使用单位向量乘以点(即.*)以获得总和。但你必须尝试一下,不确定。