4 @c OriginalRevision=1.8
5 @c TranslatedBy: (c) 2008-03 Vadim V. Zhytnikov <vvzhyt@gmail.com>
9 * Введение в пакет interpol::
10 * Функции и переменные пакета interpol::
13 @node Введение в пакет interpol, Функции и переменные пакета interpol, Пакет interpol, Пакет interpol
14 @section Введение в пакет interpol
16 Пакет @code{interpol} определяет методы Лагранжа, линейный и и метод кубических сплайнов для
17 полиномиальной интерполяции.
19 С комментариями, сообщениями об ошибках и предложениями, пожалуйста
20 обращайтесь ко мне по адресу @var{'mario AT edu DOT xunta DOT es'}.
22 @opencatbox{Категории:}
23 @category{Численные методы}
24 @category{Пакеты библиотеки share}
25 @category{Пакет interpol}
28 @node Функции и переменные пакета interpol, , Введение в пакет interpol, Пакет interpol
29 @section Функции и переменные пакета interpol
32 @deffn {Функция} lagrange (@var{points})
33 @deffnx {Функция} lagrange (@var{points}, @var{option})
34 Вычисляет полиномиальную интерполяцию методом Лагранжа. Аргумент @var{points} должен быть либо:
38 матрицей из двух колонок, @code{p:matrix([2,4],[5,6],[9,3])},
40 списком пар, @code{p: [[2,4],[5,6],[9,3]]},
42 списком чисел @code{p: [4,6,3]}, в этом случае абсцисса будет назначена автоматически равной 1, 2, 3 и т.д.
45 В первых двух случаях, перед проведением вычислений, пары упорядочиваются в соответствии
46 со значением первой координаты.
48 Аргумент @var{option} позволяет выбрать имя независимой переменной, по умолчанию равной @code{'x}.
49 Чтобы задать другую переменную напишите @code{varname='z}.
51 Отметим, что при работе с многочленами высокого порядка, вычисления с плавающей точкой
57 (%i1) load("interpol")$
58 (%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
61 73 x 701 x 8957 x 5288 x 186
62 (%o3) ----- - ------ + ------- - ------ + ---
66 73 x 701 x 8957 x 5288 x 186
67 (%o4) f(x) := ----- - ------ + ------- - ------ + ---
69 (%i5) /* Evaluate the polynomial at some points */
72 (%o5) [- 1.567534999999992, ------,
75 73 %pi 701 %pi 8957 %pi 5288 %pi 186
76 ------- - -------- + --------- - -------- + ---]
79 (%o6) [- 1.567534999999992, 10.9366573451538, 2.89319655125692]
80 (%i7) load("draw")$ /* load draw package */
81 (%i8) /* Plot the polynomial together with points */
84 key = "Lagrange polynomial",
85 explicit(f(x),x,0,10),
88 key = "Sample points",
90 (%i9) /* Change variable name */
91 lagrange(p, varname=w);
93 73 w 701 w 8957 w 5288 w 186
94 (%o9) ----- - ------ + ------- - ------ + ---
98 @opencatbox{Категории:}
99 @category{Пакет interpol}
105 @deffn {Функция} charfun2 (@var{x}, @var{a}, @var{b})
106 Возвращает @code{true} если число @var{x} принадлежит интервалу @math{[a, b)}, и @code{false} в противном случае.
108 @opencatbox{Категории:}
109 @category{Пакет interpol}
115 @deffn {Функция} linearinterpol (@var{points})
116 @deffnx {Функция} linearinterpol (@var{points}, @var{option})
117 Вычисляет полиномиальную интерполяцию линейным методом. Аргумент @var{points} должен быть либо:
121 матрицей из двух колонок, @code{p:matrix([2,4],[5,6],[9,3])},
123 списком пар, @code{p: [[2,4],[5,6],[9,3]]},
125 списком чисел @code{p: [4,6,3]}, в этом случае абсцисса будет назначена автоматически равной 1, 2, 3 и т.д.
128 В первых двух случаях, перед проведением вычислений, пары упорядочиваются в соответствии
129 со значением первой координаты.
131 Аргумент @var{option} позволяет выбрать имя независимой переменной, по умолчанию равной @code{'x}.
132 Чтобы задать другую переменную напишите @code{varname='z}.
136 (%i1) load("interpol")$
137 (%i2) p: matrix([7,2],[8,3],[1,5],[3,2],[6,7])$
138 (%i3) linearinterpol(p);
140 (%o3) (-- - ---) charfun2(x, minf, 3)
142 + (x - 5) charfun2(x, 7, inf) + (37 - 5 x) charfun2(x, 6, 7)
144 + (--- - 3) charfun2(x, 3, 6)
149 (%o4) f(x) := (-- - ---) charfun2(x, minf, 3)
151 + (x - 5) charfun2(x, 7, inf) + (37 - 5 x) charfun2(x, 6, 7)
153 + (--- - 3) charfun2(x, 3, 6)
155 (%i5) /* Evaluate the polynomial at some points */
156 map(f,[7.3,25/7,%pi]);
158 (%o5) [2.3, --, ----- - 3]
161 (%o6) [2.3, 2.952380952380953, 2.235987755982989]
162 (%i7) load("draw")$ /* load draw package */
163 (%i8) /* Plot the polynomial together with points */
166 key = "Linear interpolator",
167 explicit(f(x),x,-5,20),
170 key = "Sample points",
172 (%i9) /* Change variable name */
173 linearinterpol(p, varname='s);
175 (%o9) (-- - ---) charfun2(s, minf, 3)
177 + (s - 5) charfun2(s, 7, inf) + (37 - 5 s) charfun2(s, 6, 7)
179 + (--- - 3) charfun2(s, 3, 6)
183 @opencatbox{Категории:}
184 @category{Пакет interpol}
191 @deffn {Функция} cspline (@var{points})
192 @deffnx {Функция} cspline (@var{points}, @var{option1}, @var{option2}, ...)
193 Вычисляет полиномиальную интерполяцию методом кубических сплайнов. Аргумент @var{points} должен быть либо:
197 матрицей из двух колонок, @code{p:matrix([2,4],[5,6],[9,3])},
199 списком пар, @code{p: [[2,4],[5,6],[9,3]]},
201 списком чисел @code{p: [4,6,3]}, в этом случае абсцисса будет назначена автоматически равной 1, 2, 3 и т.д.
204 В первых двух случаях, перед проведением вычислений, пары упорядочиваются в соответствии
205 со значением первой координаты.
207 Существует три специальные опции:
210 @code{'d1}, по умолчанию @code{'unknown}, -- первая производная в точке @math{x_1}. Если @code{'unknown},
211 то вторая производная в точке @math{x_1} предполагается равной 0 (натуральный кубический сплайн).
212 Если задана, то вторая производная вычисляется исходя из этого числа.
215 @code{'dn}, по умолчанию @code{'unknown}, -- первая производная в точке @math{x_n}. Если @code{'unknown},
216 то вторая производная в точке @math{x_n} предполагается равной 0 (натуральный кубический сплайн).
217 Если задана, то вторая производная вычисляется исходя из этого числа.
220 @code{'varname}, по умолчанию @code{'x}, -- имя независимой переменной.
225 (%i1) load("interpol")$
226 (%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
227 (%i3) /* Unknown first derivatives at the extremes
228 is equivalent to natural cubic splines */
231 1159 x 1159 x 6091 x 8283
232 (%o3) (------- - ------- - ------ + ----) charfun2(x, minf, 3)
235 2587 x 5174 x 494117 x 108928
236 + (- ------- + ------- - -------- + ------) charfun2(x, 7, inf)
239 4715 x 15209 x 579277 x 199575
240 + (------- - -------- + -------- - ------) charfun2(x, 6, 7)
243 3287 x 2223 x 48275 x 9609
244 + (- ------- + ------- - ------- + ----) charfun2(x, 3, 6)
248 (%i5) /* Some evaluations */
249 map(f,[2.3,5/7,%pi]), numer;
250 (%o5) [1.991460766423356, 5.823200187269903, 2.227405312429507]
251 (%i6) load("draw")$ /* load draw package */
252 (%i7) /* Plotting interpolating function */
255 key = "Cubic splines",
256 explicit(f(x),x,0,10),
259 key = "Sample points",
261 (%i8) /* New call, but giving values at the derivatives */
262 cspline(p,d1=0,dn=0);
264 1949 x 11437 x 17027 x 1247
265 (%o8) (------- - -------- + ------- + ----) charfun2(x, minf, 3)
268 1547 x 35581 x 68068 x 173546
269 + (- ------- + -------- - ------- + ------) charfun2(x, 7, inf)
272 607 x 35147 x 55706 x 38420
273 + (------ - -------- + ------- - -----) charfun2(x, 6, 7)
276 3895 x 1807 x 5146 x 2148
277 + (- ------- + ------- - ------ + ----) charfun2(x, 3, 6)
279 (%i8) /* Defining new interpolating function */
281 (%i9) /* Plotting both functions together */
284 key = "Cubic splines (default)",
285 explicit(f(x),x,0,10),
287 key = "Cubic splines (d1=0,dn=0)",
288 explicit(g(x),x,0,10),
291 key = "Sample points",
295 @opencatbox{Категории:}
296 @category{Пакет interpol}