Степенная функция Matlab случайно дает сбой - PullRequest
0 голосов
/ 21 декабря 2018
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

Итак, иногда два отображаемых значения совпадают, как это и должно быть, но иногда они очень разные.Что я делаю не так?

Вот несколько примеров, я не буду публиковать их все.Обычно, когда точное значение интенсивности является отрицательным, значение aux является его симметричным, как в том же абсолютном значении, но положительном.В других случаях цифры не имеют ничего общего друг с другом.В других случаях они одинаковы.Я полностью потерян, я отлаживал это в течение долгого времени.

Это для tk (ix) = 0. Это не имеет никакого смысла.

точное значение интенсивности-180.4020

вспомогательное значение точно 1

Edit - Теперь, когда я думаю об этом немного больше, это, вероятно, имеет смысл, так как 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

Я не вижу ни одногозакономерность того, что некоторые значения являются правильными, а другие неправильными, кажется абсолютно случайной.Я пробовал и ^, и функцию power, но результаты точно такие же ...

MATLAB Версия: 9.5.0.944444 (R2018b)

Редактировать # 2: Значения тольконеверно для первых значений кривой.Вот графики, первый имеет все правильные значения, а второй имеет неправильные значения, а также некоторые правильные.enter image description here

enter image description here

1 Ответ

0 голосов
/ 23 декабря 2018

Я знаю, что вы сказали, что решили эту проблему, но я предоставляю этот ответ, чтобы вопрос не остался без ответа.

Похоже, что "очень разные" значения просто имеют маленький мнимый компонент.В противном случае действительная часть выглядит одинаково (в пределах числовой ошибки), и отличаются только обозначения (что, вероятно, является форматом отображения по умолчанию для сложных двойных чисел):

  • -1.3201e+02 вероятно означает, чтото же самое, что -132.0104.
  • -1.9961e+02 вероятно означает то же самое, что и -199.6144.
  • 0.0000i, 2.2673e-14i и 6.9122e-14i означает 0 практически , но не численно .

Я бы посоветовал окружать значения, которые должны быть действительными, с помощью real().

См. Также: Почему 24,0000 не равно 24,0000 в MATLAB?

...