我的第一次迭代被跳过了——MATLAB
我试图从我的函数中获取输出,但是第一次迭代被跳过。 我一直得到ZETA=1.000,而不是ZETA=-18.7026 请帮忙我的第一次迭代被跳过了——MATLAB,matlab,controls,evolutionary-algorithm,Matlab,Controls,Evolutionary Algorithm,我试图从我的函数中获取输出,但是第一次迭代被跳过。 我一直得到ZETA=1.000,而不是ZETA=-18.7026 请帮忙 EIG = [ -18.7026; -4.6179 + 7.4827j; -4.6179 - 7.4827j; -1.1268 + 4.3335j; -1.1268 - 4.3335j; -0.3372 ] for i = 1:6; SIG(i) = real(EIG(i)); OMG(i) = imag(EI
EIG = [
-18.7026;
-4.6179 + 7.4827j;
-4.6179 - 7.4827j;
-1.1268 + 4.3335j;
-1.1268 - 4.3335j;
-0.3372 ]
for i = 1:6;
SIG(i) = real(EIG(i));
OMG(i) = imag(EIG(i));
if OMG(i) == 0;
ZETA(i) = SIG(i);
else
ZETA = -SIG ./(sqrt(SIG.^2 + OMG.^2));
end
end
您忘记在
else
子句中包含索引。请尝试以下方法:
EIG = [
-18.7026;
-4.6179 + 7.4827j;
-4.6179 - 7.4827j;
-1.1268 + 4.3335j;
-1.1268 - 4.3335j;
-0.3372 ]
for i = 1:6;
SIG(i) = real(EIG(i));
OMG(i) = imag(EIG(i));
if OMG(i) == 0;
ZETA(i) = SIG(i);
else
ZETA(i) = -SIG(i) ./(sqrt(SIG(i).^2 + OMG(i).^2));
end
end
就可读性和数学严谨性而言,这可能是一个更好的版本:
EIG = [...
-18.7026;
-4.6179 + 7.4827j;
-4.6179 - 7.4827j;
-1.1268 + 4.3335j;
-1.1268 - 4.3335j;
-0.3372...
];
ZETA = nan(size(EIG(:),1),1);
for i = 1:size(EIG(:),1)
if ~imag(EIG(i))
ZETA(i) = real(EIG(i));
else
ZETA(i) = -real(EIG(i)) /abs(EIG(i));
end
end
谢谢你的帮助!对matlab来说还是个新手。确实更容易阅读,这让我想知道这个计算在数学上是否有意义旁注:我认为
isequal(abs(EIG(I)),abs(real(EIG(I)))
可以简化为~image(EIG(I))
Nice,现在是我提交的版本。