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

hm2xizp9  于 2023-11-21  发布在  Matlab
关注(0)|答案(1)|浏览(255)
  1. a=0.336;
  2. Ta=9.476;
  3. Te=1.208;
  4. Tw=1.498;
  5. eqh=[0.661;0.619;0.568];
  6. ex=[-1.24;-1.346;-1.441];
  7. en=-ex;
  8. ey=[0.376;0.705;0.968];
  9. eqx=[-0.309;-0.357;-0.392];
  10. eh=[1.594;1.583;1.545];
  11. eyqh=[0.642;0.78;0.897];
  12. a0=a*Ta*Te^2;
  13. r = -100:1:100;
  14. [bt,Td]=meshgrid(r);
  15. i=1;
  16. figure('Name','Stable');
  17. Kp=1./bt;
  18. exqh(i)=en(i).*eqh(i)+eqx(i).*eh(i);
  19. Ki=1./(bt.*Td);
  20. a1=Ta.*Tw.*eqh(i)+a.*Te^2.*en(i)+a.*Te^2.*ey(i).*Kp;
  21. a2=a.*Te^2.*Ki*ey(i)+Ta+Tw.*exqh(i)-eyqh(i).*Kp.*Tw;
  22. a3=en(i)+ey(i).*Kp-eyqh(i).*Ki.*Tw;
  23. a4=ey(i).*Ki;
  24. condition1 =a1>0; output = ones(length(r));condition2=zeros(size(condition1));condition3=zeros(size(condition1));condition4=zeros(size(condition1));
  25. for j=1:numel(a1)
  26. condition2(j)=det([a1(j) a0;a3(j) a2(j)])>0;
  27. condition3(j) =det([a1(j) a0 0;a3(j) a2(j) a1(j);0 a4(j) a3(j)])>0;
  28. 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;
  29. end
  30. output(~(condition1 & condition2 & condition3 & condition4)) = 0;
  31. imshow(output, 'xdata', r, 'ydata', r);
  32. axis on;

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

eqzww0vc

eqzww0vc1#

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

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

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

相关问题