我想实现以上目标:
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>
答案 0 :(得分:1)
为了使用m
作为变量,您需要定义一个函数句柄。所以你需要写:
cond = @(m) ((pi/3) <= alpha) & (alpha <= (2*pi/3)) & (m <= Z) & (Z <= ze);
但是,您不能在nnz
例程中使用函数句柄,因为它只接受矩阵作为输入。但是,问题的解决方案是在cond
中只有布尔变量。这意味着,您可以简单地将cond
求和,并获得与nnz
相同的结果。
我看到的唯一问题是如何在fminsearch
中实现总和。不幸的是,我无法访问fminsearch
,但我会假设您可以使用reshape
执行某些操作,然后使用单位向量乘以点(即.*
)以获得总和。但你必须尝试一下,不确定。