双精度数据类型是Matlab的默认值,即使它满足逻辑值?

hm2xizp9  于 2023-11-21  发布在  Matlab
关注(0)|答案(1)|浏览(202)
a=0.336;
Ta=9.476;
Te=1.208;
Tw=1.498;
eqh=[0.661;0.619;0.568];
ex=[-1.24;-1.346;-1.441];
en=-ex;
ey=[0.376;0.705;0.968];
eqx=[-0.309;-0.357;-0.392];
eh=[1.594;1.583;1.545];
eyqh=[0.642;0.78;0.897];
a0=a*Ta*Te^2;
r = -100:1:100;
[bt,Td]=meshgrid(r);
 i=1;
        figure('Name','Stable');
        Kp=1./bt;
        exqh(i)=en(i).*eqh(i)+eqx(i).*eh(i);
        Ki=1./(bt.*Td);
        a1=Ta.*Tw.*eqh(i)+a.*Te^2.*en(i)+a.*Te^2.*ey(i).*Kp;
        a2=a.*Te^2.*Ki*ey(i)+Ta+Tw.*exqh(i)-eyqh(i).*Kp.*Tw;
        a3=en(i)+ey(i).*Kp-eyqh(i).*Ki.*Tw;
        a4=ey(i).*Ki;
        condition1 =a1>0; output = ones(length(r));condition2=zeros(size(condition1));condition3=zeros(size(condition1));condition4=zeros(size(condition1));
        for j=1:numel(a1)
            condition2(j)=det([a1(j) a0;a3(j) a2(j)])>0;
            condition3(j) =det([a1(j) a0 0;a3(j) a2(j) a1(j);0 a4(j) a3(j)])>0;
            condition4(j)=det([a1(j) a0 0 0;a3(j) a2(j) a1(j) a0;0 a4(j) a3(j) a2(j);0 0 0 a4(j)])>0;
        end
            output(~(condition1 & condition2 & condition3 & condition4)) = 0;
            imshow(output, 'xdata', r, 'ydata', r);
            axis on;

字符串
在这种情况下,条件1是逻辑的,但条件2、条件3和条件4不是逻辑的,而是双精度的。
第一个问题:为什么条件2、3和4不符合逻辑?第二个问题:如何将条件2、条件3和条件4改为符合逻辑?

eqzww0vc

eqzww0vc1#

在使用zeros预分配condition2condition3condition4时,您没有指定类型。当类型没有指定时,默认情况下会分配double数据类型。将类型指定为'logical'以获得逻辑类型,即

condition2 = zeros(size(condition1),'logical');

字符串
对其他人也是如此。

相关问题