Matlab幂函数随机出现故障

时间:2018-12-21 10:11:51

标签: matlab exponential

tk=linspace(0,1,101);
R = 35.9; L = 3.98; C = 0.000360; P = ceil(R/(2*L));
M = ceil(sqrt( (1/(L*C)) - ( (R^2)/ (4*(L^2)) )));
syms q(t);
syms i(t);
q(t) = 40*exp((-R/(2*L))*t).*cos(t*sqrt((1/(L*C))-((R^2)/(4*L^2))));
i(t) = diff(q);
exact_intensity_values = 1:101;
aux = 1:101;
for ix = 1:101
    exact_intensity_values(ix) = i(tk(ix));
    disp('exact intensity value');
    disp(exact_intensity_values(ix));
    aux(ix) = (exact_intensity_values(ix))^(-1/(P * tk(ix)));
    disp('aux value exact');
    disp((aux(ix))^(-P * tk(ix)));
end

因此,有时两个显示的值应该是相同的,但有时却有很大不同。我在做什么错了?

这里有一些例子,我不会全部张贴。通常,当精确强度值是负值时,辅助值是对称的,就像在绝对值相同但正值中一样。其他时候,数字彼此无关。其他时候它们是相同的。我完全迷路了,我已经调试了很长时间了。

这个是针对tk(ix)= 0的。这毫无意义。

精确强度值 -180.4020

精确的辅助值 1

编辑-现在,我考虑得更多了,因为tk(1)= 0,我们有了exact_intensity_values(ix)^(-1/0),这很可能会引起问题。可以安全地忽略这一点。

这些具有正确的绝对值,但符号不正确。

精确强度值  -422.8061

精确的辅助值   422.8061

精确强度值  -616.2485

精确的辅助值   616.2485

这些是正确的: 精确强度值   464.3460

精确的辅助值   464.3460

精确强度值   412.2708

精确的辅助值   412.2708

精确强度值   337.3326

精确的辅助值   337.3326

精确强度值   246.4757

精确的辅助值   246.4757

这些精确数值为负但正确:

精确强度值   -48.4391

精确的辅助值  -48.4391 + 0.0000i

精确强度值  -132.0104

精确的辅助值   -1.3201e + 02 + 2.2673e-14i

精确强度值  -199.6144

精确的辅助值   -1.9961e + 02 + 6.9122e-14i

我看不到任何导致某些值正确而其他值不正确的模式,这似乎是绝对随机的。我已经尝试了^和幂函数,但结果却完全相同...

MATLAB版本:9.5.0.944444(R2018b)

编辑#2:因此,该值仅对于曲线的第一个值不正确。这是图形,第一个具有所有正确的值,第二个具有不正确的值以及一些正确的值。 enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

我知道您说过您已经解决了这个问题,但是我正在提供此答案,以确保问题不会一直没有答案。

看起来“非常不同”的值只是具有 small 虚构分量。否则,实际部分似乎是相同的(在数值误差内),并且只有符号是不同的(这可能是复式双打的默认显示格式):

  • -1.3201e+02的含义可能与-132.0104相同。
  • -1.9961e+02的含义可能与-199.6144相同。
  • 0.0000i2.2673e-14i6.9122e-14i的意思是0实际上是,但是不是是数字 em>。

我建议用real()包围真实的值。

另请参阅:Why is 24.0000 not equal to 24.0000 in MATLAB?