Создайте интерполяционные таблицы для функции синуса

Введение

Последующие разделы объясняют, как использовать функцию fixpt_look1_func_approx для создания интерполяционных таблиц. В нем приведены примеры, которые показывают, как создать интерполяционные таблицы для функции sin (2, x) на интервале от 0 до 0,25.

Установите параметры функции для интерполяционной таблицы

Во-первых, задайте значения параметров для fixpt_look1_func_approx функция.

% Required parameters
funcstr = 'sin(2*pi*x)'; % Ideal function
xmin = 0; % Minimum input of interest
xmax = 0.25; % Maximum input of interest
xdt = ufix(16); % x data type
xscale = 2^-16; % x data scaling
ydt = sfix(16); % y data type
yscale = 2^-14; % y data scaling
rndmeth = 'Floor'; % Rounding method
% Optional parameters
errmax = 2^-10; % Maximum allowed error of the lookup table
nptsmax = 21; % Maximum number of points of the lookup table

Параметры errmax, nptsmax, и spacing являются необязательными. Необходимо использовать по крайней мере один из параметров errmax и nptsmax. Если вы используете только errmax параметр без nptsmaxфункция создает интерполяционную таблицу с наименьшим количеством точек, для которых самая худшая ошибка errmax. Если вы используете только nptsmax параметр без errmaxфункция создает интерполяционную таблицу, содержащую самое большее nptsmax точки, который имеет наименьшую ошибку наихудшего случая. Вы можете использовать дополнительный spacing параметр для ограничения интервалов между точками останова интерполяционной таблицы.

Использование errmax с неограниченным интервалом

Создайте интерполяционную таблицу, которая имеет наименьшее количество точек данных для указанной ошибки в худшем случае с неограниченными интервалами.

[xdata,ydata,errworst] = fixpt_look1_func_approx(funcstr, ...
xmin,xmax,xdt,xscale,ydt,yscale,rndmeth,errmax,[]);

Обратите внимание, что nptsmax и spacing параметры не заданы.

length(xdata)
ans = 16

Для аппроксимации требуется 16 точки sin(2πx) в пределах допуска, заданного errmax. Максимальная ошибка:

errworst
errworst = 9.7656e-04

Значение errworst меньше или равно значению errmax.

Постройте график результатов:

figure(1)
fixpt_look1_func_plot(xdata,ydata,funcstr,xmin,xmax,xdt, ...
xscale,ydt,yscale,rndmeth);

Figure contains 2 axes. Axes 1 with title Function sin(2*pi*x) Ideal (red) Fixed-Point Lookup Approximation (blue) contains 2 objects of type line. Axes 2 contains 2 objects of type line, text.

Верхний график показывает идеальную функцию sin(2πx) и приближение интерполяционной таблицы с фиксированной точкой между точками останова. В этом примере идеальная функция и приближение настолько близки друг к другу, что два графиков, по-видимому, совпадают. На нижнем графике отображаются ошибки.

В этом примере Y точек данных, ydata, равны идеальной функции, применяемой к точке в xdata. Однако можно задать другое множество значений для ydata после выполнения fixpt_look1_func_approx. Это иногда может уменьшить максимальную ошибку.

Можно также изменить значения xmin и xmax для вычисления интерполяционной таблицы в подмножестве исходного интервала.

Чтобы найти новую максимальную ошибку после изменения ydata, xmin, или xmax, type

errworst = fixpt_look1_func_plot(xdata,ydata,funcstr,xmin,xmax, ...

xdt,xscale,ydt,yscale,rndmeth)

Использование nptsmax с неограниченным интервалом

Создайте интерполяционную таблицу, которая минимизирует ошибку в худшем случае для заданного максимального количества точек данных с неограниченным интервалом.

[xdata, ydata, errworst] = fixpt_look1_func_approx(funcstr, ...
xmin,xmax,xdt,xscale,ydt,yscale,rndmeth,[],nptsmax);

Пустые скобки говорят функции игнорировать параметр errmax. Опускание errmax заставляет функцию возвращать интерполяционную таблицу размера, заданную nptsmax, с наименьшей ошибкой наихудшего случая.

length(xdata)
ans = 21

Функция возвращает вектор xdata с 21 точкой. Максимальная ошибка:

errworst
errworst = 5.1139e-04

Значение errworst меньше или равно значению errmax.

Постройте график результатов:

figure(2)
fixpt_look1_func_plot(xdata,ydata,funcstr,xmin,xmax,xdt, ...
xscale,ydt,yscale,rndmeth);

Figure contains 2 axes. Axes 1 with title Function sin(2*pi*x) Ideal (red) Fixed-Point Lookup Approximation (blue) contains 2 objects of type line. Axes 2 contains 2 objects of type line, text.

Ограничение интервала

В предыдущих двух примерах функция fixpt_look1_func_approx создает интерполяционные таблицы с неограниченным интервалом между точками. Можно ограничить интервалы, чтобы улучшить вычислительную эффективность интерполяционной таблицы с помощью параметра spacing. Обе степени двойки, 'pow2'и даже интервалы, 'even'увеличьте вычислительную скорость интерполяционной таблицы и используйте меньше памяти только для чтения команд (ROM). Однако установка любого из ограничений интервалов наряду с errmax обычно для достижения той же степени точности требуется больше точек данных в интерполяционной таблице, чем без ограничений интервалов. Для получения дополнительной информации см. Эффекты Интервала по скорости, ошибкам и использованию Памяти.

Использование errmax с четным интервалом

Создайте интерполяционную таблицу с равномерными интервалами точек по оси Х и заданной ошибкой в худшем случае.

spacing = 'even';
[xdata,ydata,errworst] = fixpt_look1_func_approx(funcstr, ...
xmin,xmax,xdt,xscale,ydt,yscale,rndmeth,errmax,[],spacing);
length(xdata)
ans = 20
errworst
errworst = 9.2109e-04

Постройте график результатов:

figure(3)
fixpt_look1_func_plot(xdata,ydata,funcstr,xmin,xmax,xdt, ...
xscale,ydt,yscale,rndmeth);

Figure contains 2 axes. Axes 1 with title Function sin(2*pi*x) Ideal (red) Fixed-Point Lookup Approximation (blue) contains 2 objects of type line. Axes 2 contains 2 objects of type line, text.

Использование nptsmax с четным интервалом

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

spacing = 'even';
[xdata, ydata, errworst] = fixpt_look1_func_approx(funcstr, ...
xmin,xmax,xdt,xscale,ydt,yscale,rndmeth,[],nptsmax,spacing);
length(xdata)
ans = 21
errworst
errworst = 8.3793e-04

Для достижения максимальной абсолютной ошибки 2^-10.2209.

Постройте график результатов:

figure(4)
fixpt_look1_func_plot(xdata,ydata,funcstr,xmin,xmax,xdt, ...
xscale,ydt,yscale,rndmeth);

Figure contains 2 axes. Axes 1 with title Function sin(2*pi*x) Ideal (red) Fixed-Point Lookup Approximation (blue) contains 2 objects of type line. Axes 2 contains 2 objects of type line, text.

Использование errmax с степенью двойки интервалов

Создайте интерполяционную таблицу, которая имеет степень двойки интервалов и заданную ошибку в худшем случае.

spacing = 'pow2';
[xdata, ydata, errworst] = ...
fixpt_look1_func_approx(funcstr,xmin, ...
xmax,xdt,xscale,ydt,yscale,rndmeth,errmax,[],spacing);
length(xdata)
ans = 33

33 точки необходимы для достижения ошибки наихудшего случая, заданной errmax. Чтобы убедиться, что эти точки расположены равномерно, введите

widths = diff(xdata)
widths = 32×1

    0.0078
    0.0078
    0.0078
    0.0078
    0.0078
    0.0078
    0.0078
    0.0078
    0.0078
    0.0078
      ⋮

Это генерирует вектор, записи которого являются различиями между последовательными точками в xdata. Каждый вход widths является 2^-7.

Максимальная ошибка:

errworst
errworst = 3.7209e-04

Это меньше, чем значение errmax.

Постройте график результатов:

figure(5)
fixpt_look1_func_plot(xdata,ydata,funcstr,xmin,xmax,xdt, ...
xscale,ydt,yscale,rndmeth);

Figure contains 2 axes. Axes 1 with title Function sin(2*pi*x) Ideal (red) Fixed-Point Lookup Approximation (blue) contains 2 objects of type line. Axes 2 contains 2 objects of type line, text.

Использование nptsmax с степенью двойки интервалов

Создайте интерполяционную таблицу, которая имеет степень двойки интервал и минимизирует ошибку наихудшего случая для заданного числа точек.

spacing = 'pow2';
[xdata, ydata, errworst] = ...
fixpt_look1_func_approx(funcstr,xmin, ...
xmax,xdt,xscale,ydt,yscale,rndmeth,[],nptsmax,spacing);
length(xdata)
ans = 17
errworst
errworst = 0.0013

Результат требует 17 точек, чтобы достичь максимальной абсолютной ошибки 2^-9.6267.

Постройте график результатов:

figure(6)
fixpt_look1_func_plot(xdata,ydata,funcstr,xmin,xmax,xdt, ...
xscale,ydt,yscale,rndmeth);

Figure contains 2 axes. Axes 1 with title Function sin(2*pi*x) Ideal (red) Fixed-Point Lookup Approximation (blue) contains 2 objects of type line. Axes 2 contains 2 objects of type line, text.

Определение и errmax, и nptsmax

Если вы включаете оба errmax и nptsmax параметры, функция fixpt_look1_func_approx пытается найти интерполяционную таблицу самое большее с nptsmax точки данных, чья ошибка в худшем случае наиболее errmax. Если она может найти интерполяционную таблицу, удовлетворяющую обоим условиям, она использует следующий порядок приоритета для интервалов:

  1. Степень двойки

  2. Даже

  3. Неограниченный

Если функция не может найти какую-либо интерполяционную таблицу, удовлетворяющую обоим условиям, она игнорирует nptsmax и возвращает интерполяционную таблицу с неограниченным интервалом, чья ошибка в худшем случае наиболее errmax. В этом случае функция ведет себя так же, как если бы nptsmax параметр был опущен.

Следующие примеры иллюстрируют результаты использования различных значений для nptsmax когда вы вводите

[xdata ydata errworst] = fixpt_look1_func_approx(funcstr, ...
xmin,xmax,xdt,xscale,ydt,yscale,rndmeth,errmax,nptsmax);

Результаты для трех различных настроек для nptsmax являются следующими:

  • nptsmax = 33; - функция создает интерполяционную таблицу с 33 точками, имеющими степень двойки интервалов, как в примере 3.

  • nptsmax = 21; - Потому что errmax и nptsmax условия не могут быть удовлетворены степенью двойки интервалов, функция создает интерполяционную таблицу с 20 точками, имеющими четные интервалы, как в примере 5.

  • nptsmax = 16; - Потому что errmax и nptsmax условия не могут быть удовлетворены ни степенью двойки, ни даже интервалом, функция создает интерполяционную таблицу с 16 точками, имеющими неограниченное расстояние, как в примере 1.

Сравнение результатов примера

В следующей таблице приведены результаты для примеров. Когда вы задаете errmaxчетное интервал требует больше точек данных, чем неограниченное, и степень двойки интервалов требует больше точек, чем четное расстояние.

ПримерОпцииИнтервалОшибка в худшем случаеЧисло точек в таблице

1

errmax=2^-10

'unrestricted'

2^-10

16

2

nptsmax=21

'unrestricted'

2^-10.933

21

3

errmax=2^-10

'even'

2^-10.0844

20

4

nptsmax=21

'even'

2^-10.2209

21

5

errmax=2^-10

'pow2'

2^-11.3921

33

6

nptsmax=21

'pow2'

2^-9.627

17