Подгонка сплайном или интерполяция сплайном - это способ нарисовать плавную кривую через n +1 точек ( x 0 , y 0 ),…, ( x n , y n ). Таким образом, мы ищем гладкую функцию f ( x ) так, чтобы f ( x i ) = y i для всех i. В частности, мы ищем n кубических многочленов p 0 ,…, p n -1 так, чтобы f ( x ) = p i ( x ) для всехx в интервале [ x i , x i +1 ].
Свойство 1 : многочлены, которые мы ищем, могут быть определены следующим образом:
p i ( x ) = a i ( x – x i ) 3 + b i ( x – x i ) 2 + c i ( x – x i ) + d i
где для i = 0,…, n -1 на основе h i = x i +1 - x i и k i = y i +1 - y i . Коэффициенты b i определяются с помощью матричных операций следующим образом. Сначала определите для i = 1,…, n
Теперь определим U = [ u ij ] как матрицу размера n +1 × n +1, где i, j = 0,…, n и
и определим B = [ b i ] и V = [ v i ] как матрицы размера n +1 × 1, где v i такие, как определено выше, а B определяется как
В = U -1 В
Доказательство : см. Вывод полиномов сплайна . Доказательство использует исчисление.
Пример 1. Создайте сплайновую кривую, которая проходит через четыре точки в диапазоне B4: C7 на рисунке 1.
Коэффициенты для трех кубических многочленов p 0 , p 1 и p 2 показаны в диапазоне B16: E18 на фиг.1, как вычислено в остальной части фигуры.
Рисунок 1 - Расчет сплайновой кривой
Некоторые типичные формулы на Рисунке 1 показаны на Рисунке 2.
Клетки
|
Юридическое лицо
|
Формула
|
B4
|
х 0
|
входные данные
|
C4
|
у 0
|
входные данные
|
F4
|
ч 0 = х 1 - х 0
|
= B5-B4
|
G4
|
ч 0 + ч 1
|
= F4 + F5
|
K4
|
к 0 = у 1 - у 0
|
= B5-C4
|
L4
|
k 0 / час 0
|
= H4 / F4
|
B11
|
u 10 = h 0 / ( h 0 + h 1 )
|
= F4 / G4
|
C11
|
u 11 = 2
|
2
|
D11
|
и 12 = 1 - и 01
|
= 1-B11
|
E11
|
u 13 = 0
|
0
|
G11
|
v 1 = 3 ( k 1 / h 1 - k 0 / h 0 ) / ( h 0 + h 1 )
|
= 3 * (I5-I4) / G4
|
I10: I13
|
B
|
= ММУНИЗМ (МИНВЕРС (B10: E13); G10: G13)
|
B17
|
a 1 = ( b 2 - b 1 ) / (3 h 1 )
|
= (I12-I11) / (3 * F5)
|
C17
|
б 1
|
= I11
|
D17
|
c 1 = k 1 / h 1 - h 1 ( b 2 +2 b 1 ) / 3
|
= I5-F5 * (I12 + 2 * I11) / 3
|
E17
|
d 1 = y 1
|
= C5
|
Рисунок 2 - Типичные формулы из Рисунка 1
Из рисунка 1 видно, например, что второй из полиномов сплайна равен
p 1 ( x ) = 0,000774 x 3 - 0,01747 x 2 + 0,196109 x + 1,791759
Теперь сплайн-функция f ( x ) = p 0 ( x ) для x в интервале [2, 5], f ( x ) = p 1 ( x ) для x в интервале [5,13] и f ( x ) = p 2 ( x ) для x из интервала [13, 15]. Мы зафиксировали это для значений x от 2 до 15 на рисунке 3.
Рисунок 3 - Подбор кривой сплайна
Здесь мы поместили формулу = B $ 16 * (K4-B $ 4) ^ 3 + C $ 16 * (K4-B $ 4) ^ 2 + D $ 16 * (K4-B $ 4) + E $ 16 в ячейку L4, выделив диапазон L4: L6 и нажмите Ctrl-D, чтобы ввести значения функции, соответствующие первому интервалу [2, 5]. Для интервала [5, 13] мы вставили формулу = B $ 17 * (K7-B $ 5) ^ 3 + C $ 17 * (K7-B $ 5) ^ 2 + D $ 17 * (K7-B $ 5) + E $ 17. в ячейке L7 выделил диапазон L7: L14 и нажал Ctrl-D . Наконец, для интервала [13, 15] мы вставили формулу = B $ 18 * (K15-B $ 6) ^ 3 + C $ 18 * (K15-B $ 6) ^ 2 + D $ 18 * (K15-B $ 6) + E $ 18 в ячейке L15, выделил диапазон L15: L17 и нажал Ctrl-D .
Затем мы выделили диапазон K4: L17 и выбрали Insert> Charts | Scatter, используя параметр Scatter with Smooth Lines, чтобы получить синюю кривую в правой части рисунка 3.
Наконец, отметим, что исходные значения данных в диапазоне B4: C7 на рисунке 1 были выбраны на основе функции h ( x ) = ln ( x +1) для x = 2, 5, 13 и 15. Фактически, когда мы вставив график этой функции на рисунок 3 (красная кривая), мы видим, что сплайн-функция довольно хорошо подходит для функции натурального логарифма, основанной только на интерполяции между четырьмя точками.
In this example, we sample the function f(x)=xsin(x2)+1f(x)=xsin(x2)+1 at random points, and then reconstruct the function at a uniform grid for easy plotting in Excel.
Using Excel's RAND() function we generate a vector of random numbers in the range [0 to 3]. To preserve the generated random numbers from continuously changing, we copy them into range A4:A28 as numbers only. Using AutoFill, we generate corresponding y values in range B4:B28 using the formula =A4*SIN(A4^2)+1. Next we generate a uniform grid for x values in range D4:D28 from 0 to 3 in increment of 0.125.
Finally, we evaluate =INTERPXY(A4:A28, B4:B28, D4:D28) as array formula in range E4:E28 to interpolate the scattered data onto the uniform grid. The numerical values are shown below.
|
A
|
B
|
D
|
E
|
3
|
scattered x
|
y values
|
unifrom x
|
interpolated y
|
4
|
1.753029064
|
1.119956695
|
0
|
1.001328093
|
5
|
0.568116228
|
1.180195958
|
0.125
|
1.002172559
|
6
|
1.440216258
|
2.26153531
|
0.25
|
1.01561687
|
7
|
2.28511224
|
-0.995044984
|
0.375
|
1.052557644
|
8
|
1.015003489
|
1.870282715
|
0.5
|
1.123729162
|
9
|
1.217131211
|
2.212271884
|
0.625
|
1.238002939
|
10
|
2.429384636
|
0.096014392
|
0.75
|
1.400044332
|
11
|
1.061113672
|
1.95784828
|
0.875
|
1.606510771
|
12
|
2.828238912
|
3.79857802
|
1
|
1.84148167
|
13
|
1.590985661
|
1.911889769
|
1.125
|
2.073236147
|
14
|
1.454578337
|
2.243848266
|
1.25
|
2.249813639
|
15
|
1.639359184
|
1.719102308
|
1.375
|
2.305014902
|
16
|
2.385193008
|
-0.335023914
|
1.5
|
2.166955797
|
17
|
0.955015097
|
1.755190226
|
1.625
|
1.78044105
|
18
|
0.32744209
|
1.035040565
|
1.75
|
1.138439619
|
19
|
1.579686587
|
1.951197701
|
1.875
|
0.303724928
|
20
|
0.414115731
|
1.070669882
|
2
|
-0.514903922
|
21
|
0.913884208
|
1.677572239
|
2.125
|
-1.068933993
|
22
|
0.265305572
|
1.01865866
|
2.25
|
-1.109851826
|
23
|
1.619483831
|
1.803093365
|
2.375
|
-0.422949211
|
24
|
1.610414434
|
1.839212722
|
2.5
|
0.926799955
|
25
|
2.658802449
|
2.881273233
|
2.625
|
2.50361038
|
26
|
2.310702177
|
-0.871246759
|
2.75
|
3.629673183
|
27
|
2.79968645
|
3.799339763
|
2.875
|
3.616506327
|
28
|
0.729757139
|
1.370518104
|
3
|
1.774219949
|
We can also generate column E using AutoFill instead of evaluating INTERPXY as array formula. However, if we use the AutoFill feature, we must lock arguments 1 and 2 so Excel does not increment them during the AutoFill by using the formula =INTERPXY(A$4:A$28, B$4:B$28, D4). The array formula option is computationally more efficient.
The Figure below shows the interpolated y values plotted against the generated uniform x values. This plot is easily generated in Excel by highlighting columns D and E and inserting a scatter plot.
Использование моих функций интерполяции кубическим сплайном в Excel
Некоторые из моих опубликованных электронных таблиц Excel используют интерполяцию кубическим сплайном. В этой статье объясняется, что делают функции и как их использовать или изменять.
Кубическая сплайн-интерполяция - это метод интерполяции, основанный на наборе дискретных наблюдений x, y, который зависит от кусочного подбора полинома к данным. Интерполяция намного лучше, чем линейная интерполяция между соседними наблюдениями (для того же количества выборок), и проще, чем подгонка полинома высокого порядка к полному набору данных, но дает очень хорошую точность для явлений с адекватными выборками.
Модуль CubicSpline содержит четыре функции:
csinterp1
cstable
csinterpolate; а также
CubicSpline_version
Функции csinterp1 будут выполнять интерполяцию кубическим сплайном одной абсциссы (значение x) для набора пар x, y в виде столбца значений x и столбца значений y. Например, = csinterp1 (A5: A10, B5: B10, N8) вернет интерполированное значение y для x в ячейке N8 на основе шести пар выборок x, y в A5: A10 и C5: C10. Обратите внимание, что столбцы x и y не обязательно должны быть смежными, но каждый из x и y должен находиться в диапазоне от 1 столбца на r строк, r должно быть равно, а r должно быть не менее трех.
csinterp1 подходит для небольшого количества интерполяций на основе небольшого набора выборок, но его производительность (скорость) будет ухудшаться по мере увеличения размера проблемы. Для более серьезных проблем cstable и csinterpolate обеспечат лучшую производительность.
Функция cstable возвращает массив, который является промежуточным набором данных, используемых для вычисления интерполяций. Чтобы войти в функцию, вы должны выбрать диапазон из трех столбцов с тем же количеством строк, что и в образце данных, ввести формулу и нажать Control-Shift-Enter. Например, чтобы создать CSTABLE, используя те же образцы данных, что и выше (шесть образцов), с помощью мыши выберите область из шести строк на три столбца и введите = cstable (A5: A10, B5: B10) и нажмите Control-Shift. -Входить. Дополнительные сведения см. В справке Excel по использованию формул массива.
Если вы хотите изменить существующий CSTABLE для использования большего или меньшего количества образцов, вы должны изменить область, содержащую возвращаемый массив функции. Самый простой способ - удалить весь CSTABLE и повторно ввести его с новым размером.
Функция csinterpolate вернет интерполированное значение на основе промежуточного CSTABLE для конкретного набора данных выборки. Например, чтобы вычислить значение x в ячейке A18 с использованием CSTABLE, расположенной в D5: F10, вы должны ввести = csinterpolate ($ D $ 5: $ F $ 10, A18). В этом примере я также зафиксировал ссылки на ячейки в CSTABLE, чтобы я мог скопировать формулу вниз по листу для дополнительных значений x в столбце A.
Обратите внимание, что в примере, показанном на рисунке выше, разумный выбор небольшого количества образцов в области, где известно, что характеристика клапана быстро изменяется, дает хорошую характеристику клапана.
Эти функции также будут экстраполировать, т. Е. Возвращать значения для абсцисс за пределами диапазона выборки, но будьте осторожны с проблемами точности при экстраполяции.
Функцию CubicSpline_version можно вызвать с аргументом «c», «v», «d» и «u» для возврата информации о версии модуля.
Авторские права на код принадлежат Оуэну Даффи, 2008 г., все права защищены. Модуль защищен и снабжен цифровой подписью, чтобы снизить вероятность его распространения с изменениями, снижающими его производительность. Вы не можете использовать модуль в коммерческих целях. Вы не несете ответственности за использование модуля, вы должны проверять результаты самостоятельно.
Обновлять
Только что установив Microsoft Office 2010, я обнаружил, что Microsoft очень много работала, чтобы запретить пользователям включать макросы. Они не только затрудняют включение макросов, но и выдают ужасные предупреждения, достаточно ужасные, чтобы отпугнуть большинство людей. Макросы - это проблема безопасности, но их отключение похоже на отключение от Интернета, потому что это рискованно. Есть способы работы, которые позволяют управлять риском, если вы не знаете, как это сделать, не используйте инструменты с макросами в них.
Затем Excel выдает предупреждения о том, что некоторые пользовательские функции, созданные в более ранних версиях Excel, конфликтуют с внутренними функциями в более новой версии. Во ВСЕХ случаях, которые я наблюдал, «определяемые пользователем функции, созданные в более старых версиях» на самом деле являются функциями, предоставляемыми Micorosoft в надстройках, обычно в пакете инструментов анализа. Многие из моих электронных таблиц используют сложные математические функции из пакета Analysis Toolpak, и эти функции теперь включены в стандартную библиотеку функций. Предупреждения относительно этих функций можно игнорировать, Microsoft просто создает тревогу без всякой цели.
Подводя итог, можно сказать, что функции интерполяции кубического сплайна в моих таблицах отлично работают в Office 2010, когда вы преодолеваете истерику Microsoft.
Do'stlaringiz bilan baham: |