В рамках подготовки курса для бакалавров МФТИ я понял, что в моем блоге не так много заметок по использованию Excel в математике и физике. Каково же было мое удивление, когда я обнаружил, что книг по этой теме на русском языке буквально единицы. Ранее я опубликовал Вильям Дж. Орвис. Excel для ученых, инженеров и студентов. В заметке представлены три варианта нахождения интерполяционного полинома Лагранжа: таблица на листе Excel, функция VBA, функция листа Excel на основе REDUCE и LAMBDA. В заметке использованы материалы книги Алексея Васильева Числовые расчеты в Excel. Бумажная и электронная версии книги доступны на сайте издательства.
Рис. 1. Вычисление интерполяционного полинома по методу Лагранжа; чтобы увеличить изображение кликните на нем правой кнопкой мыши и выберите Открыть картинку в новой вкладке
Скачать заметку в формате Word или pdf, примеры в архиве (внутри файл Excel с поддержкой макросов)
Алгоритм
Задача интерполирования обычно решается для того, чтобы «восстановить» по набору дискретных данных аналитическую функциональную зависимость. Нередко в качестве функции, на основе которой строится интерполяционная зависимость, выбирают полиномиальные выражения. Предположим, имеется набор узловых точек х1, х2, …, хn и набор значений y1, y2, …, yn неизвестной функции в этих точках. Задача – построить зависимость f(x) такую, чтобы соответствующая кривая проходила через все точки (xk, yk) (k = 1, 2, …, n), т.е. необходимо, чтобы для всех k выполнялись соотношения f(xk) = yk.
Для однозначного определения коэффициентов интерполяционного полинома его степень должна быть на единицу меньше, чем количество точек, по которым выполняется интерполирование. Технически коэффициенты полинома можно вычислить несколькими методами. Наиболее популярны полином Лагранжа и полином Ньютона.
Схема Лагранжа предполагает, что соответствующее полиномиальное выражение, построенное по точкам (х0, y0), (х1, y1), …, (хn, yn), ищется в виде
Полином имеет степень n, поскольку строится по n + 1 точке: индексация точек (хm, уm) начинается с нуля, а последний индекс равен n. Функции ϕm(х) являются полиномами степени n, причем такими, что в узловых точках xk имеют место соотношения: ϕm(хk) = 0, если k ≠ m, и ϕm(хk) = 1, если k = m. Эти полиномы вычисляются в виде произведений
для всех m = 0, 1, 2, …, n.
Метод Лагранжа в таблице на листе Excel
Реализуем метод Лагранжа в Excel для табулированной по 11 равноудаленным узловым точкам (на интервале значений аргумента от -2π до 2 π) функции
См. рис. 1. В столбце А – аргумент, В – значение функции, С – значения интерполяционного полинома построенного по методу Лагранжа. Количество точек в столбце А зависит от целей интерполяции. Поскольку мы далее хотим построить график, точек выбрано много и они расположены равномерно на интервале интерполяции. Частота этих точек значительно выше, чем частота узловых точек, на основе которых создается полином.
Ячейки D4:N4 содержат значения узловых точек, на основе которых мы создаем интерполяционный полином. Значения полинома в узловых точках отображаются в ячейках D5:N5. В ячейках D3:N3 указаны индексы узловых точек.
Основные вычисления выполняются в ячейках D7:N107 и, как результат, в ячейках С7:С107 вычисляются значения интерполяционного полинома в точках, которые указаны в ячейках А7:А107. В ячейках D7:N107 содержатся значения функций ϕm(х) для разных аргументов интерполяционного полинома х и разных индексов узловых точек m. В каждой строке диапазона D7:N107 находятся значения функций ϕm(х) для одного и того же аргумента х, но разных индексов m. В столбцах диапазона D7:N107 содержатся значения для разных аргументов х, и одного и того же индекса m. В диапазоне D7:N107 три типа формул: для левого D7: D107 и правого N7:N107 краев и остальных столбцов Е7:М107. С формулами можно ознакомиться в приложенном Excel-файле.
Выделите диапазон А7:С107 и постройте график. Чтобы добавить узловые точки, скопируйте диапазон D4:N5 в буфер обмена, выделите диаграмму, пройдите Главная –> Вставить –> Специальная вставка. Настройте параметры в окне Специальная вставка. Нажмите Ok. Отформатируйте вставленный ряд: отмените линию и добавьте встроенный маркер.
Рис. 2. График функции f(x) = sin(x)/(1 + x2), интерполяционный полином Лагранжа и узловые точки
Видно, что вычисленные нами значения интерполяционного полинома в узловых точках совпадают со значениями функции. В других точках совпадение не столь хорошее. К сожалению, значительные осцилляции на границах интервала интерполирования являются типичными для этого метода.
Функция VBA
Можно упростить вычисления и отказаться от громоздкой промежуточной таблицы с вычислениями, если воспользоваться кодом VBA.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
Function ЛАГРАНЖ(Px As Range, Py As Range, z As Variant) As Double ‘ Переменная для запоминания аргумента полинома Dim x As Double ‘ Значение аргумента полинома x = z ‘ Переменная для запоминания количества узловых точек Dim n As Integer ‘ Вычисляем количество узловых точек n = Px.Count ‘ Целочисленные переменные для операторов цикла Dim i As Integer, j As Integer ‘ Переменная для вычисления значения полинома Dim L As Double ‘ Начальное значение для полиномиальной суммы L = 0 ‘ Переменная для вычисления произведения Dim phi As Double ‘ Внешний цикл For i = 1 To n ‘ Начальное значение для произведения phi = 1 ‘ Первый внутренний цикл For j = 1 To i — 1 ‘ Умножаем на разность аргумента и узловой точки phi = phi * (x — Px.Cells(j).Value) ‘ Делим на разность узловых точек phi = phi / (Px.Cells(i).Value — Px.Cells(j).Value) Next j ‘ Второй внутренний цикл For j = i + 1 To n ‘ Умножаем на разность аргумента и узловой точки phi = phi * (x — Px.Cells(j).Value) ‘ Делим на разность узловых точек phi = phi / (Px.Cells(i).Value — Px.Cells(j).Value) Next j ‘ К полиномиальной сумме добавляем очередное слагаемое L = L + phi * Py.Cells(i).Value Next i ‘ Результат вычислений ЛАГРАНЖ = L End Function |
Пояснение кода
Функция ЛАГРАНЖ() имеет три аргумента: диапазон ячеек со значениями узловых точек (Рх), диапазон ячеек со значениями интерполируемой функции в узловых точках (Ру), а также аргумент, для которого вычисляется значение интерполяционного полинома Лагранжа (z). Функция возвращает числовой результат типа Double.
Поскольку третий аргумент функции может быть как числовым значением, так и ссылкой на ячейку, в теле функции значение этого аргумента записываем в переменную х. Если третий аргумент – число, то процесс «переписывания» ничего не добавляет. Если же третий аргумент – ссылка на ячейку, то присваивание значения ячейки локальной числовой переменной позволяет снять неоднозначность в определении типа третьего аргумента.
Алгоритм использует количество узловых точек. Явно этот параметр в аргументе функции ЛАГРАНЖ() отсутствует. Но он вычисляется, как количество ячеек в диапазоне, переданном первым аргументом функции ЛАГРАНЖ(). Поэтому мы объявляем переменную n = Рх.Count. Свойство Count для диапазона возвращает количество ячеек.
Основные вычисления производятся в блоке из вложенных условных операторов. Для использования в этих операторах объявляются две целочисленные переменные i и j. В переменной L накапливается полиномиальная сумма, а в переменной phi произведение в соответствии с формулой (2).
Перед началом выполнения вложенных операторов цикла переменной L присваивается значение 0. Индексная переменная i во внешнем цикле пробегает значения от 1 до n. В начале каждой итерации переменной phi присваивается значение 1. После этого последовательно запускаются два идентичных цикла. Основное различие между ними – диапазон изменения индексной переменной j. Для первого цикла она изменяется от 1 до i-1, а для второго цикла — от i+1 до n. Таким образом, при фиксированном значении i переменная j пробегает все значения от 1 до n, за исключением значения i. За каждую такую итерацию переменная phi сначала умножается на величину (x-Px.Cells(j).Value), а затем делится на величину (Px.Cells(i).Value-Px.Cells(j).Value). Здесь следует учесть, что Рх.Сеlls(индекс).Value – это значение ячейки с указанным индексом в диапазоне Рх (т.е. это значение узловой точки).
После того как значение переменной phi (для данного значения i) вычислено, командой L = L+phi * Ру.Cells(i).Value к полиномиальной сумме добавляем очередное слагаемое. Здесь Py.Cells(i).Value – ссылка на значение ячейки в диапазоне Ру со значениями табулированной функции. В итоге значение переменной L возвращается как результат функции (команда ЛАГРАНЖ = L).
Работа функции ЛАГРАНЖ()
Функцию ЛАГРАНЖ() можно использовать на рабочем листе. Рассмотрим новый пример. Ячейки А4:В9 содержат данные об узловых точках и значениях функции f(x) = x*exp(-x). При этом в ячейках А4:А9 указаны несколько неравномерно распределенных на интервале от 0 до 7 точек.
Рис. 3. Пользовательская функции для вычисления интерполяционного полинома Лагранжа
Как мы отмечали ранее, интерполяционный полином не везде дает хорошее приближение для табулированной функции, даже с учетом того, что последняя достаточно плавная.
Вычисление полинома Лагранжа на основе функций REDUCE и LAMBDA
В декабре 2020 года Microsoft анонсировал функцию LAMBDA, которая позволяет определять пользовательские функции, написанные на языке формул Excel. А в июле 2021 г. объявил о создании новых функций, основанных на LAMBDA. Я недавно описал работу с LAMBDA и новыми функциями Excel. Не могу сказать, что написание сложных конструкций на основе этих функций проще, чем кода VBA, но как учебный пример, это весьма интересно.[1]
Код функции REDUCE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
=REDUCE( 0; $B$4#; LAMBDA(L;Py; L+REDUCE( 1; $A$4:$A$9; LAMBDA(phi;Px; LET( Ind_x; ПОИСКПОЗ(Px;$A$4:$A$9;0); Ind_y; ПОИСКПОЗ(Py;$B$4#;0); x_i; ИНДЕКС($A$4:$A$9;Ind_y); ЕСЛИ( Ind_x = Ind_y; phi; phi*(D4#-Px)/(x_i-Px) ) ) ) )*Py ) ) |
Описание работы функции REDUCE
Функция REDUCE работает, как обычная функция листа. Внутри ее могут располагаться ссылки на ячейки и динамические массивы. В отличие от функции LAMBDA, функция REDUCE не требует предварительного именования. Алгоритм работы функции REDUCE похож на алгоритм кода VBA в функции ЛАГРАНЖ(): один внешний цикл и один внутренний (в коде VBA два внутренних цикла). Внешний цикл перебирает все i значений диапазона В4:В9 (см. рис. 4), умножая на значения phi, определяемые для каждого i во внутреннем цикле. Во внутреннем цикле задается стартовое значение phi = 1. Далее для фиксированного i перебираются все j значений диапазона А4:А9, и для всех i ≠ j значение phi, полученное на предыдущем шаге, умножается на некое значение, а для i = j значение phi не изменяется. (Благодаря такой проверке, вместо двух внутренних циклов в коде VBA, здесь используется один.)
Посмотрим, как этот алгоритм реализован в коде функции REDUCE. Цель функции REDUCE – обработать массив, и вернуть одно число. Функции REDUCE имеет три аргумента. Первые два – начальное значение (0) и обрабатываемый массив ($B$4#).
Третий аргумент – функция обработки элементов массива
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
LAMBDA(L;Py; L+REDUCE( 1; $A$4:$A$9; LAMBDA(phi;Px; LET( Ind_x; ПОИСКПОЗ(Px;$A$4:$A$9;0); Ind_y; ПОИСКПОЗ(Py;$B$4#;0); x_i; ИНДЕКС($A$4:$A$9;Ind_y); ЕСЛИ( Ind_x = Ind_y; phi; phi*(D4#-Px)/(x_i-Px) ) ) ) )*Py ) |
Рис. 4. Работа функции REDUCE
Функция LAMBDA принимает столько же параметров, сколько передает функция REDUCE:
L – накопитель; Py – массив. L – это то значение, которое вернется функцией после обработки всех элементов массива. Начальное значение L = 0. Это значение определено первым аргументом функции REDUCE. Ру – массив $B$4#. Функция LAMBDA накапливает значения L в элементе формулы L + REDUCE(… Эта запись аналогична более привычной для программистов L = L + REDUCE(…
Функция LAMBDA реализует внешний цикл. Она стартует со значения L = 0 и для всех элементов массива Ру (он же $B$4#) выполняет действие
Здесь реализована сумма произведений элементов Ру и рассчитанных коэффициентов, которые возвращаются внутренним циклом на основе REDUCE(…
Внутренний цикл также основан на REDUCE
REDUCE( 1; $A$4:$A$9; LAMBDA(phi;Px; LET( Ind_x; ПОИСКПОЗ(Px;$A$4:$A$9;0); Ind_y; ПОИСКПОЗ(Py;$B$4#;0); x_i; ИНДЕКС($A$4:$A$9;Ind_y); ЕСЛИ( Ind_x = Ind_y; phi; phi*(D4#-Px)/(x_i-Px) ) ) ) ) |
Результат REDUCE – коэффициент для умножения на элемент массива Ру. Функция REDUCE принимает два аргумента
Начальное значение 1 и массив $A$4:$A$9. Внутри функции массив $A$4:$A$9 понижается до одного значения, путем последовательной обработки всех элементов массива $A$4:$A$9. Обработка выполняется по правилам, описанным внутри LAMBDA:
LAMBDA(phi;Px; LET( Ind_x; ПОИСКПОЗ(Px;$A$4:$A$9;0); Ind_y; ПОИСКПОЗ(Py;$B$4#;0); x_i; ИНДЕКС($A$4:$A$9;Ind_y); ЕСЛИ( Ind_x = Ind_y; phi; phi*(D4#-Px)/(x_i-Px) ) ) ) |
LAMBDA принимает два параметра от REDUCE: начальное значение phi = 1 и массив Рх = $A$4:$A$9. Функция LET не выполняет расчеты, а позволяет упростить восприятие этого фрагмента формулы (подробнее см. здесь). LET определяет три переменные – индекс элемента массива $A$4:$A$9, обрабатываемого на текущем шаге:
Ind_x; ПОИСКПОЗ(Px;$A$4:$A$9;0); |
… индекс элемента массива $B$4#, переданного из внешнего цикла:
Ind_y; ПОИСКПОЗ(Py;$B$4#;0); |
… и значение элемента массива $A$4:$A$9, соответствующего индексу Ind_y из внешнего цикла:
x_i; ИНДЕКС($A$4:$A$9;Ind_y); |
Расчет функции LET происходит внутри оператора ЕСЛИ:
ЕСЛИ( Ind_x = Ind_y; phi; phi*(D4#-Px)/(x_i-Px) ) |
Для всех элементов массива, где Ind_x ≠ Ind_y накапливается новое значение phi:
Как обычно, эта запись эквивалента phi = phi*(…)
Если же индексы равны Ind_x = Ind_y, оставляем значение phi без изменения.
Ссылка на ячейку листа (D4#) – это ссылка на динамический массив аргументов, для которых вычисляется полином Лагранжа. На рис. 4 аргументы размещены в столбце D.
Поскольку использование REDUCE и LAMBDA – это всё же не классический цикл, мне не удалось найти вариант, как обращаться к элементу массива по его индексу. Поэтому в переменных Ind_x и Ind_y реализовано обращение по значению элемента: ПОИСКПОЗ(Px;$A$4:$A$9;0). Такой подход накладывает ограничения на аргументы и значения функции в узловых точках: не должно быть повторений. Если хотя бы в двух узловых точках значения функций совпадают, функция ПОИСКПОЗ() отработает не корректно.
[1] Это оригинальный метод. Он не описан в книге Алексея Васильева «Числовые расчеты в Excel».
Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
Чсил.методы. УП 09.doc
Скачиваний:
25
Добавлен:
29.08.2019
Размер:
3.23 Mб
Скачать
В табличном
процессоре Excel
для интерполяции с помощью формулы
Лагранжа можно воспользоваться
соответствующей таблицей (таблица 5.1).
А также для
аппроксимации Excel
имеет удобные встроенные средства.
Самый наглядный способ – использование
графического представления данных:
-
Необходимо ввести
таблицу данных и построить по ним
точечную диаграмму; -
Выделив диаграмму,
через главное меню выполнить команды
Диаграмма
Добавить линию тренда
(рис. 5.1) Тренд (тенденция) – термин для
обозначения линии графика аппраксимируемой
функции. -
В открывшемся
диалоговом окне на закладке Тип
необходимо
выбрать один из видов функции, предлагаемых
для аппроксимации (рис. 5.1). Таким образом
перебирая различные виды функций можно
подобрать линию тренда наиболее
подходящую к заданным значениям -
В том же диалоговом
окне, перейдя к закладке Параметры
необходимо установить галочку на флажке
показывать
уравнение на диаграмме
– после выполнения команд на диаграмме
появляется уравнение, которое
соответствует линии тренда и является
искомой функцией (рис. 5.2).
В закладке
Параметры
можно также установить галочку на флажке
поместить
на диаграмму величину достоверности
аппроксимации R^2.
В статистике данная величина называется
коэффициентом
детерминированности,она
показывает насколько точной получилась
построенная функция (рис. 5.2).
Рисунок
5.1. Получение линии тренда при аппроксимации
функции в Excel
Рисунок
5.2. Результат аппроксимации функции в
Excel
-
Интерполяцию или
экстраполяцию можно получить, используя
функцию ПРЕДСКАЗ в мастере
функций
(рис. 5.3).
Рисунок
5.3. Нахождение интерполяционного значения
функции в табличном процессоре Excel
Задания для самостоятельного решения
x |
2,0 |
2,2 |
2,4 |
2,6 |
2,8 |
3,0 |
f(x) |
8,69 |
11,44 |
14,70 |
18,53 |
22,98 |
28,10 |
1. Для таблично заданной
функции получить эмпирическую формулу
с помощью математических программных
средств (табличный процессор Excel,
MATCAD,
MATLAB).
x |
1,4 |
1,5 |
1,6 |
1,7 |
1,8 |
1,9 |
f(x) |
-1,67 |
-1,80 |
-1,93 |
-2,05 |
-2,18 |
-2,30 |
2. Для таблично заданной
функции получить эмпирическую формулу
с помощью математических программных
средств (табличный процессор Excel,
MATCAD,
MATLAB).
Практическая работа №6
Тема: «Составление
интерполяционного многочлена Лагранжа»
Цели:
освоение применения интерполяционного
многочлена Лагранжа для вычисления
значения функции по промежуточному
значению аргумента;
Задание1.
Для функции, заданной таблицей узловых
значений, составить формулу интерполяционного
многочлена Лагранжа, вычислить с его
помощью одно значение функции для
промежуточного значения аргумента х*.
Исходные данные
для задания 1:
Вариант 1.
х*
= 0,7
х |
-1 |
0 |
3 |
4 |
f(x) |
-3 |
5 |
2 |
-6 |
Вариант 2.
х*
= 2,4
х |
2 |
3 |
5 |
6 |
f(x) |
4 |
1 |
7 |
2 |
Вариант 3.
х*
= 0,7
х |
0 |
2 |
3 |
5 |
f(x) |
-1 |
-4 |
2 |
-8 |
Вариант 4.
х*
= 7,3
х |
7 |
9 |
13 |
15 |
f(x) |
2 |
-2 |
3 |
-4 |
Вариант 5.
х*
= 3,6
х |
-3 |
-1 |
3 |
5 |
f(x) |
7 |
-1 |
4 |
-6 |
Вариант 6.
х*
= 1,7
х |
1 |
2 |
4 |
7 |
f(x) |
-3 |
-7 |
2 |
8 |
Вариант 7.
х*
= 2,7
х |
2 |
4 |
5 |
7 |
f(x) |
9 |
-3 |
6 |
-2 |
Вариант 8.
х*
= 0,7
х |
-4 |
-2 |
0 |
3 |
f(x) |
2 |
8 |
5 |
10 |
Вариант 9.
х*
= 2,8
х |
2 |
4 |
7 |
8 |
f(x) |
-1 |
-6 |
3 |
12 |
Вариант 10.
х*
= 0,7
х |
0 |
1 |
4 |
6 |
f(x) |
7 |
-1 |
8 |
2 |
Вариант 11.
х*
= 2,7
Х |
-1 |
-1 |
2 |
4 |
f(x) |
4 |
9 |
1 |
6 |
Вариант 12.
х*
= 3,4
Х |
-1 |
1,5 |
3 |
5 |
f(x) |
4 |
-7 |
1 |
-8 |
Вариант 13.
х*
= – 4,5
Х |
-9 |
-7 |
— 4 |
-1 |
f(x) |
3 |
-3 |
4 |
-9 |
Вариант 14.
х*
= 1,3
Х |
-8 |
-5 |
0 |
2 |
f(x) |
9 |
-2 |
4 |
6 |
Вариант 15.
х*
= –3,6
Х |
-7 |
-5 |
— 4 |
-1 |
f(x) |
4 |
— 4 |
5 |
10 |
Вариант 16.
х*
= 2,7
Х |
1 |
4 |
9 |
11 |
f(x) |
-2 |
9 |
3 |
-7 |
Вариант 17.
х*
= 8,5
Х |
7 |
8 |
9 |
13 |
f(x) |
6 |
-2 |
7 |
-10 |
Вариант 18.
х*
= 0,7
Х |
-4 |
0 |
2 |
5 |
f(x) |
4 |
8 |
-2 |
-9 |
Вариант 19.
х*
= 2,8
Х |
-3 |
-1 |
1 |
3 |
f(x) |
11 |
-1 |
6 |
-2 |
Вариант 20.
х*
= 0,7
х |
0 |
3 |
8 |
11 |
f(x) |
1 |
5 |
— 4 |
-8 |
Задание 2.
Вычислить значение заданной функции
f(x)
для промежуточного значения аргумента
х*
по интерполяционному многочлену Лагранжа
с помощью вычислительной таблицы.
Сравните результат интерполирования
со значением функции, которое вычислите,
используя ее аналитическое выражение.
Задание 3. Для
таблично заданной функции получить
эмпирическую формулу с помощью
математических программных средств
(табличный процессор Excel).
Сравнить полученную формулу с заданным
аналитическим выражением.
Исходные данные
для задания 2, 3:
Вариант 1.
х*
= 3,8
х |
1,3 |
2,1 |
3,7 |
4,5 |
6,1 |
7,7 |
8,5 |
f(x) |
1,7777 |
4,5634 |
13,8436 |
20,3952 |
37,3387 |
59,4051 |
72,3593 |
Вариант 2.
х*
= 3,5
х |
1,2 |
1,9 |
3,3 |
4,7 |
5,4 |
6,8 |
7,5 |
f(x) |
0,3486 |
1,0537 |
1,7844 |
2,2103 |
2,3712 |
2,6322 |
2,7411 |
Вариант 3.
х*
= 0,5
х |
-3,2 |
-0,8 |
0,4 |
2,8 |
4,0 |
6,4 |
7,6 |
f(x) |
-1,9449 |
-0,6126 |
0,3097 |
1,8068 |
2,0913 |
1,4673 |
0,6797 |
Вариант 4.
х*
= 4,8
х |
1,3 |
2,1 |
3,7 |
4,5 |
6,1 |
7,7 |
8,5 |
f(x) |
1,7777 |
4,5634 |
13,8436 |
20,3952 |
37,3387 |
59,4051 |
72,3593 |
Вариант 5.
х*
= 4,1
х |
1,3 |
2,1 |
3,7 |
4,5 |
6,1 |
7,7 |
8,5 |
f(x) |
1,7777 |
4,5634 |
13,8436 |
20,3952 |
37,3387 |
59,4051 |
72,3593 |
Вариант 6.
х*
= 3,9
х |
1,2 |
1,9 |
3,3 |
4,7 |
5,4 |
6,8 |
7,5 |
f(x) |
0,3486 |
1,0537 |
1,7844 |
2,2103 |
2,3712 |
2,6322 |
2,7411 |
Вариант 7.
х*
= 3,3
х |
-3,2 |
-0,8 |
0,4 |
2,8 |
4,0 |
6,4 |
7,6 |
f(x) |
-1,9449 |
-0,6126 |
0,3097 |
1,8068 |
2,0913 |
1,4673 |
0,6797 |
Вариант 8.
х*
= 4,0
х |
1,3 |
2,1 |
3,7 |
4,5 |
6,1 |
7,7 |
8,5 |
f(x) |
1,7777 |
4,5634 |
13,8436 |
20,3952 |
37,3387 |
59,4051 |
72,3593 |
Вариант 9.
х*
= 2,9
х |
1,3 |
2,1 |
3,7 |
4,5 |
6,1 |
7,7 |
8,5 |
f(x) |
1,7777 |
4,5634 |
13,8436 |
20,3952 |
37,3387 |
59,4051 |
72,3593 |
Вариант 10.
х*
= 5,3
х |
1,2 |
1,9 |
3,3 |
4,7 |
5,4 |
6,8 |
7,5 |
f(x) |
0,3486 |
1,0537 |
1,7844 |
2,2103 |
2,3712 |
2,6322 |
2,7411 |
Вариант 11.
х*
= 4,1
х |
-3,2 |
-0,8 |
0,4 |
2,8 |
4,0 |
6,4 |
7,6 |
f(x) |
-1,9449 |
-0,6126 |
0,3097 |
1,8068 |
2,0913 |
1,4673 |
0,6797 |
Вариант 12.
х*
= 6,6
х |
1,2 |
1,9 |
3,3 |
4,7 |
5,4 |
6,8 |
7,5 |
f(x) |
0,3486 |
1,0537 |
1,7844 |
2,2103 |
2,3712 |
2,6322 |
2,7411 |
Вариант 13.
х*
= 4,4
х |
1,3 |
2,1 |
3,7 |
4,5 |
6,1 |
7,7 |
8,5 |
f(x) |
1,7777 |
4,5634 |
13,8436 |
20,3952 |
37,3387 |
59,4051 |
72,3593 |
Вариант 14.
х*
= 5,2
х |
-3,2 |
-0,8 |
0,4 |
2,8 |
4,0 |
6,4 |
7,6 |
f(x) |
-1,9449 |
-0,6126 |
0,3097 |
1,8068 |
2,0913 |
1,4673 |
0,6797 |
Вариант 15.
х*
= 3,7
х |
1,2 |
1,9 |
3,3 |
4,7 |
5,4 |
6,8 |
7,5 |
f(x) |
0,3486 |
1,0537 |
1,7844 |
2,2103 |
2,3712 |
2,6322 |
2,7411 |
Вариант 16.
х*
= 0,4
х |
1,3 |
2,1 |
3,7 |
4,5 |
6,1 |
7,7 |
8,5 |
f(x) |
1,7777 |
4,5634 |
13,8436 |
20,3952 |
37,3387 |
59,4051 |
72,3593 |
Вариант 17.
х*
= 7,5
х |
-3,2 |
-0,8 |
0,4 |
2,8 |
4,0 |
6,4 |
7,6 |
f(x) |
-1,9449 |
-0,6126 |
0,3097 |
1,8068 |
2,0913 |
1,4673 |
0,6797 |
Вариант 18.
х*
= 2,5
х |
1,2 |
1,9 |
3,3 |
4,7 |
5,4 |
6,8 |
7,5 |
f(x) |
0,3486 |
1,0537 |
1,7844 |
2,2103 |
2,3712 |
2,6322 |
2,7411 |
Вариант 19.
х*
= 6,8
х |
1,3 |
2,1 |
3,7 |
4,5 |
6,1 |
7,7 |
8,5 |
f(x) |
1,7777 |
4,5634 |
13,8436 |
20,3952 |
37,3387 |
59,4051 |
72,3593 |
Вариант 20.
х*
= – 1,7
х |
-3,2 |
-0,8 |
0,4 |
2,8 |
4,0 |
6,4 |
7,6 |
f(x) |
-1,9449 |
-0,6126 |
0,3097 |
1,8068 |
2,0913 |
1,4673 |
0,6797 |
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Теоретическое описание и формулу полинома Лагранжа
можно найти, например, здесь. Численные методы сейчас многие изучают тоже в Excel,
в котором готовой функции построения интерполяционного многочлена (канонического полинома,
полинома Лагранжа или полинома Ньютона) нет.
В инете — либо странные советы (например, построить график и использовать в настройках рядов данных графика функцию «линия тренда» —
совершенно не то, если понимать, что в Excel доступны только сглаживающие, а не интерполирующие
кривые), либо дикие решения с расчётом каждой
разности xi-xj
в отдельной ячейке и т.п.
Меж тем, всё очень просто и считается так, как показано на скрине.
Перед вводом формулы 1 надо выделить ячейки C2:C9, а потом уже вводить,
как обычно и делается при работе с формулами диапазонов.
Для другого количества точек будут просто другие диапазоны в первой и второй
формулах.
Компактный расчёт полинома Лагранжа в точке — скачать пример в Excel XP/2003 (11 Кб)
62 / 26 / 0
Регистрация: 05.06.2012
Сообщений: 121
13.06.2012, 11:42
[ТС]
14
Я еще то не успел толком просмотреть — вы уже новое набросали
Ничего не успеваю. Еще жена рожать собралась (уже как час в роддоме). Эмоции прут, ничего не понимаю
На скоряк набросал формулы типа вот этой(для расчета сигнала всех видов первичных датчиков для приборов ИРТ59ХХ)… на первое время сгодится.
=ЕСЛИОШИБКА(ЕСЛИ(ИЛИ($J$4=»i05″;$J$4=»i020″;$J$4=» i420″);(A10-$R$4)/($U$4-$R$4)*($G$4-$E$4)+$E$4;ЕСЛИ(И($J$4=»R»;$J$4>=-50;A10<=1064,18);РЯД.СУММ(A10;0;1;КоэффТП!B4:$B$13 );ЕСЛИ(И($J$4=»R»;A10>1064,18;A10<1664,5);РЯД.СУММ (A10;0;1;КоэффТП!$C$4:$C$9);ЕСЛИ(И($J$4=»R»;A10>16 64,5;A10<=1768,1);РЯД.СУММ(A10;0;1;КоэффТП!$D$4:$D $8);ЕСЛИ(И($J$4=»S»;A10>=-50;A10<=1064,18);РЯД.СУММ(A10;0;1;КоэффТП!$B$17:$B $25);ЕСЛИ(И($J$4=»S»;A10>1064,18;A10<1664,5);РЯД.С УММ(A10;0;1;КоэффТП!$C$17:$C$21);ЕСЛИ(И($J$4=»S»;A 10>1664,5;A10<=1768,1);РЯД.СУММ(A10;0;1;КоэффТП!$D $17:$D$21);ЕСЛИ(И($J$4=»B»;A10>=0;A10<630,15);РЯД. СУММ(A10;0;1;КоэффТП!$B$29:$B$35);ЕСЛИ(И($J$4=»B»; A10>=630,15;A10<1820);РЯД.СУММ(A10;0;1;КоэффТП!$C$ 29:$C$37);ЕСЛИ(И($J$4=»J»;A10>=-210;A10<760);РЯД.СУММ(A10;0;1;КоэффТП!$B$41:$B$49) ;ЕСЛИ(И($J$4=»J»;A10>=760;A10<1200);РЯД.СУММ(A10;0 ;1;КоэффТП!$C$41:$C$46);ЕСЛИ(И($J$4=»T»;A10>=-270;A10<0);РЯД.СУММ(A10;0;1;КоэффТП!$B$53:$B$67);Е СЛИ(И($J$4=»T»;A10>=0;A10<400);РЯД.СУММ(A10;0;1;Ко эффТП!$C$53:$C$61);ЕСЛИ(И($J$4=»E»;A10>=-270;A10<0);РЯД.СУММ(A10;0;1;КоэффТП!$B$71:$B$84);Е СЛИ(И($J$4=»E»;A10>=0;A10<1000);РЯД.СУММ(A10;0;1;К оэффТП!$C$71:$C$81);ЕСЛИ(И($J$4=»K»;A10>=-270;A10<0);РЯД.СУММ(A10;0;1;КоэффТП!$B$88:$B$98)+0 ,1185976*EXP(-0,0001183432*(A10-126,9686)^2);ЕСЛИ(И($J$4=»K»;A10>=0;A10<1372);РЯД. СУММ(A10;0;1;КоэффТП!$C$88:$C$97)+0,1185976*EXP(-0,0001183432*(A10-126,9686)^2);ЕСЛИ(И($J$4=»N»;A10>=-270;A10<0);РЯД.СУММ(A10;0;1;КоэффТП!$B$102:$B$110) ;ЕСЛИ(И($J$4=»N»;A10>=0;A10<1300);РЯД.СУММ(A10;0;1 ;КоэффТП!$C$102:$C$112);ЕСЛИ(И($J$4=»A-1″;A10>=0;A10<=2500);РЯД.СУММ(A10;0;1;КоэффТП!$B$1 16:$B$124);ЕСЛИ(И($J$4=»A-2″;A10>=0;A10<=1800);РЯД.СУММ(A10;0;1;КоэффТП!$B$1 28:$B$136);ЕСЛИ(И($J$4=»A-3″;A10>=0;A10<=1800);РЯД.СУММ(A10;0;1;КоэффТП!$B$1 40:$B$148);ЕСЛИ(И($J$4=»L»;A10>=-200;A10<=800);РЯД.СУММ(A10;0;1;КоэффТП!$B$152:$B$1 60);ЕСЛИ(И($J$4=»M»;A10>=-200;A10<=100);РЯД.СУММ(A10;0;1;КоэффТП!$B$164:$B$1 67);ЕСЛИ($J$4=»Ptb1″;(ЕСЛИ(И(A10<0;A10>=-200);$M$4*(1+(3,9083*10^-3*A10)+((-5,775*10^-7)*A10^2)+((-4,183*10^-12)*(A10-100)*A10^3));ЕСЛИ(И(A10>=0;A10<=850);$M$4*(1+3,908 3*10^-3*A10+(-5,775*10^-7)*A10^2)))); ЕСЛИ(ИЛИ($J$4=»PtH5″;$J$4=»Pt$J$5″;$J$4=»Gr21″);(Е СЛИ(И(A10<0;A10>=-200);$M$4*(1+(3,969*10^-3*A10)+((-5,841*10^-7)*A10^2)+((-4,33*10^-12)*(A10-100)*A10^3));ЕСЛИ(И(A10>=0;A10<=850);$M$4*(1+3,969 *10^-3*A10+(-5,841*10^-7)*A10^2);»»)));ЕСЛИ(ИЛИ($J$4=»Cu85″;$J$4=»Cu81″;$ J$4=»Cu83″);(ЕСЛИ(И(A10<0;A10>=-180);$M$4*(1+4,28*10^-3*A10+(-6,2032*10^-7)*A10*(A10+6,7)+8,5154*10^-10*A10^3);ЕСЛИ(И(A10>=0;A10<=200);$M$4*(1+4,28*10^-3*A10);»»)));ЕСЛИ($J$4=»ni1″;(ЕСЛИ(И(A10>=-60;A10<100);$M$4*(1+5,4963*10^-3*A10+6,7556*10^-6*A10^2);ЕСЛИ(И(A10>=100;A10<=180);$M$4*(1+(5,4963 *10^-3*A10)+(6,7556*10^-6*A10^2)+(9,2004*10^-9*(A10-100)*A10^2));»»)));ЕСЛИ(ИЛИ($J$4=»PtH5″;$J$4=»Pt$J $5″;$J$4=»Gr21″;$J$4=»Gr21″);$M$4*(1+4,26*10^-3*A10);»»)))))))))))))))))))))))))))));»»)
Это для рацухи сокращающей временные трудозатраты.
Оптимизацией начну заниматься когда дома все уляжется
Еще раз спасибо за помощь
0
Содержание
- Использование интерполяции
- Способ 1: интерполяция для табличных данных
- Способ 2: интерполяция графика с помощью его настроек
- Способ 3: интерполяция графика с помощью функции
- Вопросы и ответы
Бывает ситуация, когда в массиве известных значений нужно найти промежуточные результаты. В математике это называется интерполяцией. В Excel данный метод можно применять как для табличных данных, так и для построения графиков. Разберем каждый из этих способов.
Использование интерполяции
Главное условие, при котором можно применять интерполяцию – это то, что искомое значение должно быть внутри массива данных, а не выходить за его предел. Например, если мы имеем набор аргументов 15, 21 и 29, то при нахождении функции для аргумента 25 мы можем использовать интерполяцию. А для поиска соответствующего значения для аргумента 30 – уже нет. В этом и является главное отличие этой процедуры от экстраполяции.
Способ 1: интерполяция для табличных данных
Прежде всего, рассмотрим применения интерполяции для данных, которые расположены в таблице. Для примера возьмем массив аргументов и соответствующих им значений функции, соотношение которых можно описать линейным уравнением. Эти данные размещены в таблице ниже. Нам нужно найти соответствующую функцию для аргумента 28. Сделать это проще всего с помощью оператора ПРЕДСКАЗ.
- Выделяем любую пустую ячейку на листе, куда пользователь планирует выводить результат от проведенных действий. Далее следует щелкнуть по кнопке «Вставить функцию», которая размещена слева от строки формул.
- Активируется окошко Мастера функций. В категории «Математические» или «Полный алфавитный перечень» ищем наименование «ПРЕДСКАЗ». После того, как соответствующее значение найдено, выделяем его и щелкаем по кнопке «OK».
- Запускается окно аргументов функции ПРЕДСКАЗ. В нем имеется три поля:
- X;
- Известные значения y;
- Известные значения x.
В первое поле нам просто нужно вручную с клавиатуры вбить значения аргумента, функцию которого следует отыскать. В нашем случае это 28.
В поле «Известные значения y» нужно указать координаты диапазона таблицы, в котором содержатся значения функции. Это можно сделать вручную, но гораздо проще и удобнее установить курсор в поле и выделить соответствующую область на листе.
Аналогичным образом устанавливаем в поле «Известные значения x» координаты диапазона с аргументами.
После того, как все нужные данные введены, жмем на кнопку «OK».
- Искомое значение функции будет отображено в той ячейке, которую мы выделили ещё в первом шаге данного способа. В результате получилось число 176. Именно оно и будет итогом проведения процедуры интерполяции.
Урок: Мастер функций в Экселе
Способ 2: интерполяция графика с помощью его настроек
Процедуру интерполяции можно применять и при построении графиков функции. Актуальна она в том случае, если в таблице, на основе которой построен график, к одному из аргументов не указано соответствующее значение функции, как на изображении ниже.
- Выполняем построение графика обычным методом. То есть, находясь во вкладке «Вставка», выделяем табличный диапазон, на основе которого будет проводиться построение. Щелкаем по значку «График», размещенному в блоке инструментов «Диаграммы». Из появившегося списка графиков выбираем тот, который считаем более уместным в данной ситуации.
- Как видим, график построен, но не совсем в таком виде, как нам нужно. Во-первых, он разорван, так как для одного аргумента не нашлась соответствующая функция. Во вторых, на нем присутствует дополнительная линия X, которая в данном случае не нужна, а также на горизонтальной оси указаны просто пункты по порядку, а не значения аргумента. Попробуем исправить все это.
Для начала выделяем сплошную синюю линию, которую нужно удалить и жмем на кнопку Delete на клавиатуре.
- Выделяем всю плоскость, на которой размещен график. В появившемся контекстном меню щелкаем по кнопке «Выбрать данные…».
- Запускается окно выбора источника данных. В правом блоке «Подписи горизонтальной оси» жмем на кнопку «Изменить».
- Открывается небольшое окошко, где нужно указать координаты диапазона, значения из которого будут отображаться на шкале горизонтальной оси. Устанавливаем курсор в поле «Диапазон подписей осей» и просто выделяем соответствующую область на листе, в которой содержаться аргументы функции. Жмем на кнопку «OK».
- Теперь нам осталось выполнить основную задачу: с помощью интерполяции устранить разрыв. Вернувшись в окно выбора диапазона данных жмем на кнопку «Скрытые и пустые ячейки», расположенную в нижнем левом углу.
- Открывается окно настройки скрытых и пустых ячеек. В параметре «Показывать пустые ячейки» выставляем переключатель в позицию «Линию». Жмем на кнопку «OK».
- После возвращения в окно выбора источника подтверждаем все сделанные изменения, щелкнув по кнопке «OK».
Как видим, график скорректирован, а разрыв с помощью интерполяции удален.
Урок: Как построить график в Excel
Произвести интерполяцию графика можно также с помощью специальной функции НД. Она возвращает неопределенные значения в указанную ячейку.
- После того, как график построен и отредактирован, так как вам нужно, включая правильную расстановку подписи шкалы, остается только ликвидировать разрыв. Выделяем пустую ячейку в таблице, из которой подтягиваются данные. Жмем на уже знакомый нам значок «Вставить функцию».
- Открывается Мастер функций. В категории «Проверка свойств и значений» или «Полный алфавитный перечень» находим и выделяем запись «НД». Жмем на кнопку «OK».
- У данной функции нет аргумента, о чем и сообщает появившееся информационное окошко. Чтобы закрыть его просто жмем на кнопку «OK».
- После этого действия в выбранной ячейке появилось значение ошибки «#Н/Д», но зато, как можно наблюдать, обрыв графика был автоматически устранен.
Можно сделать даже проще, не запуская Мастер функций, а просто с клавиатуры вбить в пустую ячейку значение «#Н/Д» без кавычек. Но это уже зависит от того, как какому пользователю удобнее.
Как видим, в программе Эксель можно выполнить интерполяцию, как табличных данных, используя функцию ПРЕДСКАЗ, так и графика. В последнем случае это осуществимо с помощью настроек графика или применения функции НД, вызывающей ошибку «#Н/Д». Выбор того, какой именно метод использовать, зависит от постановки задачи, а также от личных предпочтений пользователя.
Еще статьи по данной теме:
Помогла ли Вам статья?
Содержание
- Применение интерполяции в Microsoft Excel
- Использование интерполяции
- Способ 1: интерполяция для табличных данных
- Способ 2: интерполяция графика с помощью его настроек
- Способ 3: интерполяция графика с помощью функции
- Интерполяционный полином Лагранжа в Excel
- Алгоритм
- Метод Лагранжа в таблице на листе Excel
- Функция VBA
- Пояснение кода
- Работа функции ЛАГРАНЖ()
- Вычисление полинома Лагранжа на основе функций REDUCE и LAMBDA
Применение интерполяции в Microsoft Excel
Бывает ситуация, когда в массиве известных значений нужно найти промежуточные результаты. В математике это называется интерполяцией. В Excel данный метод можно применять как для табличных данных, так и для построения графиков. Разберем каждый из этих способов.
Использование интерполяции
Главное условие, при котором можно применять интерполяцию – это то, что искомое значение должно быть внутри массива данных, а не выходить за его предел. Например, если мы имеем набор аргументов 15, 21 и 29, то при нахождении функции для аргумента 25 мы можем использовать интерполяцию. А для поиска соответствующего значения для аргумента 30 – уже нет. В этом и является главное отличие этой процедуры от экстраполяции.
Способ 1: интерполяция для табличных данных
Прежде всего, рассмотрим применения интерполяции для данных, которые расположены в таблице. Для примера возьмем массив аргументов и соответствующих им значений функции, соотношение которых можно описать линейным уравнением. Эти данные размещены в таблице ниже. Нам нужно найти соответствующую функцию для аргумента 28. Сделать это проще всего с помощью оператора ПРЕДСКАЗ.
- Выделяем любую пустую ячейку на листе, куда пользователь планирует выводить результат от проведенных действий. Далее следует щелкнуть по кнопке «Вставить функцию», которая размещена слева от строки формул.
- Активируется окошко Мастера функций. В категории «Математические» или «Полный алфавитный перечень» ищем наименование «ПРЕДСКАЗ». После того, как соответствующее значение найдено, выделяем его и щелкаем по кнопке «OK».
В первое поле нам просто нужно вручную с клавиатуры вбить значения аргумента, функцию которого следует отыскать. В нашем случае это 28.
В поле «Известные значения y» нужно указать координаты диапазона таблицы, в котором содержатся значения функции. Это можно сделать вручную, но гораздо проще и удобнее установить курсор в поле и выделить соответствующую область на листе.
Аналогичным образом устанавливаем в поле «Известные значения x» координаты диапазона с аргументами.
После того, как все нужные данные введены, жмем на кнопку «OK».
Способ 2: интерполяция графика с помощью его настроек
Процедуру интерполяции можно применять и при построении графиков функции. Актуальна она в том случае, если в таблице, на основе которой построен график, к одному из аргументов не указано соответствующее значение функции, как на изображении ниже.
- Выполняем построение графика обычным методом. То есть, находясь во вкладке «Вставка», выделяем табличный диапазон, на основе которого будет проводиться построение. Щелкаем по значку «График», размещенному в блоке инструментов «Диаграммы». Из появившегося списка графиков выбираем тот, который считаем более уместным в данной ситуации.
Для начала выделяем сплошную синюю линию, которую нужно удалить и жмем на кнопку Delete на клавиатуре.
Как видим, график скорректирован, а разрыв с помощью интерполяции удален.
Способ 3: интерполяция графика с помощью функции
Произвести интерполяцию графика можно также с помощью специальной функции НД. Она возвращает неопределенные значения в указанную ячейку.
- После того, как график построен и отредактирован, так как вам нужно, включая правильную расстановку подписи шкалы, остается только ликвидировать разрыв. Выделяем пустую ячейку в таблице, из которой подтягиваются данные. Жмем на уже знакомый нам значок «Вставить функцию».
- Открывается Мастер функций. В категории «Проверка свойств и значений» или «Полный алфавитный перечень» находим и выделяем запись «НД». Жмем на кнопку «OK».
- У данной функции нет аргумента, о чем и сообщает появившееся информационное окошко. Чтобы закрыть его просто жмем на кнопку «OK».
- После этого действия в выбранной ячейке появилось значение ошибки «#Н/Д», но зато, как можно наблюдать, обрыв графика был автоматически устранен.
Можно сделать даже проще, не запуская Мастер функций, а просто с клавиатуры вбить в пустую ячейку значение «#Н/Д» без кавычек. Но это уже зависит от того, как какому пользователю удобнее.
Как видим, в программе Эксель можно выполнить интерполяцию, как табличных данных, используя функцию ПРЕДСКАЗ, так и графика. В последнем случае это осуществимо с помощью настроек графика или применения функции НД, вызывающей ошибку «#Н/Д». Выбор того, какой именно метод использовать, зависит от постановки задачи, а также от личных предпочтений пользователя.
Источник
Интерполяционный полином Лагранжа в Excel
В рамках подготовки курса для бакалавров МФТИ я понял, что в моем блоге не так много заметок по использованию Excel в математике и физике. Каково же было мое удивление, когда я обнаружил, что книг по этой теме на русском языке буквально единицы. Ранее я опубликовал Вильям Дж. Орвис. Excel для ученых, инженеров и студентов. В заметке представлены три варианта нахождения интерполяционного полинома Лагранжа: таблица на листе Excel, функция VBA, функция листа Excel на основе REDUCE и LAMBDA. В заметке использованы материалы книги Алексея Васильева Числовые расчеты в Excel. Бумажная и электронная версии книги доступны на сайте издательства.
Рис. 1. Вычисление интерполяционного полинома по методу Лагранжа; график табулируемой функции (штрихованная линия) и интерполяционного полинома (сплошная линия); чтобы увеличить изображение кликните на нем правой кнопкой мыши и выберите Открыть картинку в новой вкладке
Скачать заметку в формате Word или pdf, примеры в архиве (внутри файл Excel с поддержкой макросов)
Алгоритм
Задача интерполирования обычно решается для того, чтобы «восстановить» по набору дискретных данных аналитическую функциональную зависимость. Нередко в качестве функции, на основе которой строится интерполяционная зависимость, выбирают полиномиальные выражения. Предположим, имеется набор узловых точек х1, х2, …, хn и набор значений y1, y2, …, yn неизвестной функции в этих точках. Задача – построить зависимость f(x) такую, чтобы соответствующая кривая проходила через все точки (xk, yk) (k = 1, 2, …, n), т.е. необходимо, чтобы для всех k выполнялись соотношения f(xk) = yk.
Для однозначного определения коэффициентов интерполяционного полинома его степень должна быть на единицу меньше, чем количество точек, по которым выполняется интерполирование. Технически коэффициенты полинома можно вычислить несколькими методами. Наиболее популярны полином Лагранжа и полином Ньютона.
Полином имеет степень n, поскольку строится по n + 1 точке: индексация точек (хm, уm) начинается с нуля, а последний индекс равен n. Функции ϕm(х) являются полиномами степени n, причем такими, что в узловых точках xk имеют место соотношения: ϕm(хk) = 0, если k ≠ m, и ϕm(хk) = 1, если k = m. Эти полиномы вычисляются в виде произведений
Метод Лагранжа в таблице на листе Excel
Реализуем метод Лагранжа в Excel для табулированной по 11 равноудаленным узловым точкам (на интервале значений аргумента от -2π до 2 π) функции
См. рис. 1. В столбце А – аргумент, В – значение функции, С – значения интерполяционного полинома построенного по методу Лагранжа. Количество точек в столбце А зависит от целей интерполяции. Поскольку мы далее хотим построить график, точек выбрано много и они расположены равномерно на интервале интерполяции. Частота этих точек значительно выше, чем частота узловых точек, на основе которых создается полином.
Ячейки D4:N4 содержат значения узловых точек, на основе которых мы создаем интерполяционный полином. Значения полинома в узловых точках отображаются в ячейках D5:N5. В ячейках D3:N3 указаны индексы узловых точек.
Основные вычисления выполняются в ячейках D7:N107 и, как результат, в ячейках С7:С107 вычисляются значения интерполяционного полинома в точках, которые указаны в ячейках А7:А107. В ячейках D7:N107 содержатся значения функций ϕm(х) для разных аргументов интерполяционного полинома х и разных индексов узловых точек m. В каждой строке диапазона D7:N107 находятся значения функций ϕm(х) для одного и того же аргумента х, но разных индексов m. В столбцах диапазона D7:N107 содержатся значения для разных аргументов х, и одного и того же индекса m. В диапазоне D7:N107 три типа формул: для левого D7: D107 и правого N7:N107 краев и остальных столбцов Е7:М107. С формулами можно ознакомиться в приложенном Excel-файле.
Выделите диапазон А7:С107 и постройте график. Чтобы добавить узловые точки, скопируйте диапазон D4:N5 в буфер обмена, выделите диаграмму, пройдите Главная –> Вставить –> Специальная вставка. Настройте параметры в окне Специальная вставка. Нажмите Ok. Отформатируйте вставленный ряд: отмените линию и добавьте встроенный маркер.
Рис. 2. График функции f(x) = sin(x)/(1 + x 2 ), интерполяционный полином Лагранжа и узловые точки
Видно, что вычисленные нами значения интерполяционного полинома в узловых точках совпадают со значениями функции. В других точках совпадение не столь хорошее. К сожалению, значительные осцилляции на границах интервала интерполирования являются типичными для этого метода.
Функция VBA
Можно упростить вычисления и отказаться от громоздкой промежуточной таблицы с вычислениями, если воспользоваться кодом VBA.
Пояснение кода
Функция ЛАГРАНЖ() имеет три аргумента: диапазон ячеек со значениями узловых точек (Рх), диапазон ячеек со значениями интерполируемой функции в узловых точках (Ру), а также аргумент, для которого вычисляется значение интерполяционного полинома Лагранжа (z). Функция возвращает числовой результат типа Double.
Поскольку третий аргумент функции может быть как числовым значением, так и ссылкой на ячейку, в теле функции значение этого аргумента записываем в переменную х. Если третий аргумент – число, то процесс «переписывания» ничего не добавляет. Если же третий аргумент – ссылка на ячейку, то присваивание значения ячейки локальной числовой переменной позволяет снять неоднозначность в определении типа третьего аргумента.
Алгоритм использует количество узловых точек. Явно этот параметр в аргументе функции ЛАГРАНЖ() отсутствует. Но он вычисляется, как количество ячеек в диапазоне, переданном первым аргументом функции ЛАГРАНЖ(). Поэтому мы объявляем переменную n = Рх.Count. Свойство Count для диапазона возвращает количество ячеек.
Основные вычисления производятся в блоке из вложенных условных операторов. Для использования в этих операторах объявляются две целочисленные переменные i и j. В переменной L накапливается полиномиальная сумма, а в переменной phi произведение в соответствии с формулой (2).
Перед началом выполнения вложенных операторов цикла переменной L присваивается значение 0. Индексная переменная i во внешнем цикле пробегает значения от 1 до n. В начале каждой итерации переменной phi присваивается значение 1. После этого последовательно запускаются два идентичных цикла. Основное различие между ними – диапазон изменения индексной переменной j. Для первого цикла она изменяется от 1 до i-1, а для второго цикла — от i+1 до n. Таким образом, при фиксированном значении i переменная j пробегает все значения от 1 до n, за исключением значения i. За каждую такую итерацию переменная phi сначала умножается на величину (x-Px.Cells(j).Value), а затем делится на величину (Px.Cells(i).Value-Px.Cells(j).Value). Здесь следует учесть, что Рх.Сеlls(индекс).Value – это значение ячейки с указанным индексом в диапазоне Рх (т.е. это значение узловой точки).
После того как значение переменной phi (для данного значения i) вычислено, командой L = L+phi * Ру.Cells(i).Value к полиномиальной сумме добавляем очередное слагаемое. Здесь Py.Cells(i).Value – ссылка на значение ячейки в диапазоне Ру со значениями табулированной функции. В итоге значение переменной L возвращается как результат функции (команда ЛАГРАНЖ = L).
Работа функции ЛАГРАНЖ()
Функцию ЛАГРАНЖ() можно использовать на рабочем листе. Рассмотрим новый пример. Ячейки А4:В9 содержат данные об узловых точках и значениях функции f(x) = x*exp(-x). При этом в ячейках А4:А9 указаны несколько неравномерно распределенных на интервале от 0 до 7 точек.
Рис. 3. Пользовательская функции для вычисления интерполяционного полинома Лагранжа
Как мы отмечали ранее, интерполяционный полином не везде дает хорошее приближение для табулированной функции, даже с учетом того, что последняя достаточно плавная.
Вычисление полинома Лагранжа на основе функций REDUCE и LAMBDA
В декабре 2020 года Microsoft анонсировал функцию LAMBDA, которая позволяет определять пользовательские функции, написанные на языке формул Excel. А в июле 2021 г. объявил о создании новых функций, основанных на LAMBDA. Я недавно описал работу с LAMBDA и новыми функциями Excel. Не могу сказать, что написание сложных конструкций на основе этих функций проще, чем кода VBA, но как учебный пример, это весьма интересно.[1]
Источник