如何在pcolor图中遗漏矩阵元素



我正在使用Matlab的fsolve求解一组非线性联立方程,以找到未知参数x1x2。联立方程有两个独立的参数ab,如root2d函数所定义:

function F = root2d(x,a,b)
F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(a+x(1)^2);
F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - b;
end

我使用以下代码来求解联立方程,并使用pcolor将结果绘制为二维图。

alist = linspace(0.6,1.2,10);
blist = linspace(0.4,0.8,5);
% results
x1list = zeros(length(blist),length(alist));
x2list = zeros(length(blist),length(alist));
% solver options
options = optimoptions('fsolve','Display','None');
for ii = 1:length(blist)
b = blist(ii);

for jj = 1:length(alist)

a = alist(jj);

x0 = [0 0]; % init guess

[xopt,yopt,exitflag] = fsolve(@(x0)root2d(x0,a,b),x0,options);

% optimised values
x1list(ii,jj) = xopt(1);
x2list(ii,jj) = xopt(2);
success(ii,jj) = exitflag; % did solver succeed?

end

end
% plotting
figure
s = pcolor(alist(success>0),blist(success>0),x1list(success>0));
xlabel('a')
ylabel('b')
title('my data x_1')
figure
s = pcolor(alist(success>0),blist(success>0),x2list(success>0));
xlabel('a')
ylabel('b')
title('my data x_2')

然而,我只想绘制x1x2,其中解算器已成功收敛到解。这是success矩阵元素(或exitflag(具有大于0的值的地方。通常,当使用plot函数时,您只需编写x1list(success>0),Matlab省略了(success<=0)的任何解决方案,但pcolor没有该功能。

有办法绕过这个吗?例如,将所有(success<=0)解决方案显示为黑色区域。

是的!

最简单的方法是使它们成为NaN,这样它们就不会被绘制。

只做

x1list(~success)=NaN;
pcolor(alist,blist,x1list)

相关内容

  • 没有找到相关文章

最新更新