Как избавиться от этой числовой проблемы в MATLAB?

#matlab #precision #floating-accuracy

Вопрос:

У меня есть массив для представления времени, которое идет:

 t = linspace(-30,30,N);
 

Затем я выполняю следующую операцию:

 plot(sech(t)   1e-4 - sech(t))
 

что дает следующий сюжет:

сюжет

Обычно это не было бы большой проблемой, но иногда я имею дело с сигналами с величинами порядка 1e-4 , и это начинает мешать там.

Комментарии:

1. sech(t) находится в диапазоне [0,1]. Значения sech(t) составляют не более 1e 4 раза 1e-4. И, к сожалению, это основано на реалистичной проблеме, которую я пытаюсь смоделировать.

2. Ты ведь на самом деле не замышляешь заговор sech(t) 1e-4 - sech(t) , не так ли? Если бы вы хотели это спланировать, вы могли 1e-4 бы вместо этого спланировать. Покажите фактическое выражение, которое вы строите.

3. О, это не то, что я замышляю. Я имею дело с проблемой, когда я получаю сигнал, возмущенный постоянным током (sech(t) 1e-4), и я заранее знаю фактический сигнал (sech(t)). Поэтому здесь мне нужно вычесть два, чтобы получить возмущение. У меня возникли некоторые проблемы, потому что, когда я выполнял вышеуказанную операцию, я получал совершенно неверное решение своей проблемы, но когда я вручную предоставлял 1e-4, я получал правильное решение. Вот тогда-то я и подумал, что придумаю это, и увидел вот это…..

4. .. В идеале, для какой-либо другой операции, которую я буду выполнять, мне нужно, чтобы ввод был 1e-4. Я не должен заранее знать разницу в постоянном токе между двумя сигналами. Ошибка точности, похоже, связана с чем-то.

5. Вы знаете, что ошибка здесь незначительна, а кажущаяся величина является искажением масштаба графика? Неразумно строить график с вертикальным масштабом, который варьируется где-то около 10^-12 относительно значения. Установите ось y в диапазоне от 0 до 2e-4, чтобы сигнал 1e-4 находился посередине и не было никаких видимых изменений.