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

Введение

Разделы, которые следуют, объясняют, как использовать функцию 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);

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

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

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

Найти новую максимальную погрешность после изменения ydataxmin , или xmaxВвод

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);

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

В предыдущих двух примерах, функциональном fixpt_look1_func_approx создает интерполяционные таблицы с неограниченным интервалом между точками. Можно ограничить интервал, чтобы повысить вычислительную эффективность интерполяционной таблицы с помощью параметра интервала. Обе степени двойки, '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);

Используйте 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

Результат требует, чтобы 21 равномерно разнесенная точка достигла максимальной абсолютной погрешности 2^-10.2209.

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

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

Используйте 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);

Используйте 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);

Определение И 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

Для просмотра документации необходимо авторизоваться на сайте