| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
| 60.1 Introduction to interpol | ||
| 60.2 Functions and Variables for interpol |
| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
パッケージ interpolは多項式内挿のための
Lagrange、線形、三次スプライン法を定義します。
コメント、バグ、提案は ’mario AT edu DOT xunta DOT es’にコンタクトを取ってください。
Categories: Numerical methods ·Share packages ·Package interpol
| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
Lagrange法で多項式内挿を計算します。 引数 pointsは以下のいずれかでなければいけません:
p:matrix([2,4],[5,6],[9,3]),
p: [[2,4],[5,6],[9,3]],
p: [4,6,3],
この場合、横座標は自動的に 1, 2, 3などに割り当てます。
最初の 2つの場合には、 計算を行う前に対を最初の座標に関して並び替えます。
option引数を使って独立変数の名前を選択することが可能です。
デフォルトでは 'xです;
別のものを定義するには varname='zのように書いてください。
高次多項式を使って計算する時には、浮動小数点評価は不安定なことに注意してください。
linearinterpol, cspline, ratinterpolも参照してください。
例:
(%i1) load(interpol)$
(%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
(%i3) lagrange(p);
(x - 7) (x - 6) (x - 3) (x - 1)
(%o3) -------------------------------
35
(x - 8) (x - 6) (x - 3) (x - 1)
- -------------------------------
12
7 (x - 8) (x - 7) (x - 3) (x - 1)
+ ---------------------------------
30
(x - 8) (x - 7) (x - 6) (x - 1)
- -------------------------------
60
(x - 8) (x - 7) (x - 6) (x - 3)
+ -------------------------------
84
(%i4) f(x):=''%;
(x - 7) (x - 6) (x - 3) (x - 1)
(%o4) f(x) := -------------------------------
35
(x - 8) (x - 6) (x - 3) (x - 1)
- -------------------------------
12
7 (x - 8) (x - 7) (x - 3) (x - 1)
+ ---------------------------------
30
(x - 8) (x - 7) (x - 6) (x - 1)
- -------------------------------
60
(x - 8) (x - 7) (x - 6) (x - 3)
+ -------------------------------
84
(%i5) /* Evaluate the polynomial at some points */
expand(map(f,[2.3,5/7,%pi]));
4 3 2
919062 73 %pi 701 %pi 8957 %pi
(%o5) [- 1.567535, ------, ------- - -------- + ---------
84035 420 210 420
5288 %pi 186
- -------- + ---]
105 5
(%i6) %,numer;
(%o6) [- 1.567535, 10.9366573451538, 2.89319655125692]
(%i7) load(draw)$ /* load draw package */
(%i8) /* Plot the polynomial together with points */
draw2d(
color = red,
key = "Lagrange polynomial",
explicit(f(x),x,0,10),
point_size = 3,
color = blue,
key = "Sample points",
points(p))$
(%i9) /* Change variable name */
lagrange(p, varname=w);
(w - 7) (w - 6) (w - 3) (w - 1)
(%o9) -------------------------------
35
(w - 8) (w - 6) (w - 3) (w - 1)
- -------------------------------
12
7 (w - 8) (w - 7) (w - 3) (w - 1)
+ ---------------------------------
30
(w - 8) (w - 7) (w - 6) (w - 1)
- -------------------------------
60
(w - 8) (w - 7) (w - 6) (w - 3)
+ -------------------------------
84
|
Categories: Package interpol
もし数 xが区間 [a, b)に属するなら trueを返し、
そうでないなら falseを返します。
Categories: Package interpol
線形法で多項式内挿を計算します。 引数 pointsは以下のいずれかでなければいけません:
p:matrix([2,4],[5,6],[9,3]),
p: [[2,4],[5,6],[9,3]],
p: [4,6,3],
この場合、横座標は自動的に 1, 2, 3などに割り当てます。
最初の 2つの場合には、 計算を行う前に対を最初の座標に関して並び替えます。
option引数を使って独立変数の名前を選択することが可能です。
デフォルトでは 'xです;
別のものを定義するには varname='zのように書いてください。
lagrange, cspline, ratinterpolも参照してください。
例:
(%i1) load(interpol)$
(%i2) p: matrix([7,2],[8,3],[1,5],[3,2],[6,7])$
(%i3) linearinterpol(p);
13 3 x
(%o3) (-- - ---) charfun2(x, minf, 3)
2 2
+ (x - 5) charfun2(x, 7, inf) + (37 - 5 x) charfun2(x, 6, 7)
5 x
+ (--- - 3) charfun2(x, 3, 6)
3
(%i4) f(x):=''%;
13 3 x
(%o4) f(x) := (-- - ---) charfun2(x, minf, 3)
2 2
+ (x - 5) charfun2(x, 7, inf) + (37 - 5 x) charfun2(x, 6, 7)
5 x
+ (--- - 3) charfun2(x, 3, 6)
3
(%i5) /* Evaluate the polynomial at some points */
map(f,[7.3,25/7,%pi]);
62 5 %pi
(%o5) [2.3, --, ----- - 3]
21 3
(%i6) %,numer;
(%o6) [2.3, 2.952380952380953, 2.235987755982989]
(%i7) load(draw)$ /* load draw package */
(%i8) /* Plot the polynomial together with points */
draw2d(
color = red,
key = "Linear interpolator",
explicit(f(x),x,-5,20),
point_size = 3,
color = blue,
key = "Sample points",
points(args(p)))$
(%i9) /* Change variable name */
linearinterpol(p, varname='s);
13 3 s
(%o9) (-- - ---) charfun2(s, minf, 3)
2 2
+ (s - 5) charfun2(s, 7, inf) + (37 - 5 s) charfun2(s, 6, 7)
5 s
+ (--- - 3) charfun2(s, 3, 6)
3
|
Categories: Package interpol
三次スプライン法で多項式内挿を計算します。 引数 pointsは以下のいずれかでなければいけません:
p:matrix([2,4],[5,6],[9,3]),
p: [[2,4],[5,6],[9,3]],
p: [4,6,3],
この場合、横座標は自動的に1, 2, 3などに割り当てます。
最初の 2つの場合には、 計算を行う前に対を最初の座標に関して並び替えます。
特定の必要性に合わせるため3つのオプションがあります:
'd1, デフォルトは 'unknown, は x_1での一階導関数です;
もし 'unknownなら、
x_1での二階導関数は 0に等しいとします(自然な三次スプライン);
もし数字だったら二階導関数をこの数字に基づいて計算します。
'dn, デフォルトは 'unknown, は x_nでの一階導関数です;
もし 'unknownなら、
x_nでの二階導関数は0に等しいとします(自然な三次スプライン);
もし数字だったら二階導関数をこの数字に基づいて計算します。
'varname, デフォルトは 'x, は独立変数の名前です。
lagrange, linearinterpol, ratinterpolも参照してください。
例:
(%i1) load(interpol)$
(%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
(%i3) /* Unknown first derivatives at the extremes
is equivalent to natural cubic splines */
cspline(p);
3 2
1159 x 1159 x 6091 x 8283
(%o3) (------- - ------- - ------ + ----) charfun2(x, minf, 3)
3288 1096 3288 1096
3 2
2587 x 5174 x 494117 x 108928
+ (- ------- + ------- - -------- + ------) charfun2(x, 7, inf)
1644 137 1644 137
3 2
4715 x 15209 x 579277 x 199575
+ (------- - -------- + -------- - ------) charfun2(x, 6, 7)
1644 274 1644 274
3 2
3287 x 2223 x 48275 x 9609
+ (- ------- + ------- - ------- + ----) charfun2(x, 3, 6)
4932 274 1644 274
(%i4) f(x):=''%$
(%i5) /* Some evaluations */
map(f,[2.3,5/7,%pi]), numer;
(%o5) [1.991460766423356, 5.823200187269903, 2.227405312429507]
(%i6) load(draw)$ /* load draw package */
(%i7) /* Plotting interpolating function */
draw2d(
color = red,
key = "Cubic splines",
explicit(f(x),x,0,10),
point_size = 3,
color = blue,
key = "Sample points",
points(p))$
(%i8) /* New call, but giving values at the derivatives */
cspline(p,d1=0,dn=0);
3 2
1949 x 11437 x 17027 x 1247
(%o8) (------- - -------- + ------- + ----) charfun2(x, minf, 3)
2256 2256 2256 752
3 2
1547 x 35581 x 68068 x 173546
+ (- ------- + -------- - ------- + ------) charfun2(x, 7, inf)
564 564 141 141
3 2
607 x 35147 x 55706 x 38420
+ (------ - -------- + ------- - -----) charfun2(x, 6, 7)
188 564 141 47
3 2
3895 x 1807 x 5146 x 2148
+ (- ------- + ------- - ------ + ----) charfun2(x, 3, 6)
5076 188 141 47
(%i8) /* Defining new interpolating function */
g(x):=''%$
(%i9) /* Plotting both functions together */
draw2d(
color = black,
key = "Cubic splines (default)",
explicit(f(x),x,0,10),
color = red,
key = "Cubic splines (d1=0,dn=0)",
explicit(g(x),x,0,10),
point_size = 3,
color = blue,
key = "Sample points",
points(p))$
|
Categories: Package interpol
pointsで与えられたデータと numdegに等しい分子の次数の関して有理形内挿を生成します; 分子の次数は自動的に計算されます。 引数 pointsは以下のいずれかでなければいけません:
p:matrix([2,4],[5,6],[9,3]),
p: [[2,4],[5,6],[9,3]],
p: [4,6,3],
この場合、横座標は自動的に1, 2, 3などに割り当てます。
最初の2つの場合には、 計算を行う前に対を最初の座標に関して並び替えます。
特定の必要性に合わせるためオプションが1つあります:
'varname, デフォルトは 'x, は独立変数の名前です。
lagrange, linearinterpol, cspline, minpack_lsquares, lbfgsも参照してください。
例:
(%i1) load(interpol)$
(%i2) load(draw)$
(%i3) p:[[7.2,2.5],[8.5,2.1],[1.6,5.1],[3.4,2.4],[6.7,7.9]]$
(%i4) for k:0 thru length(p)-1 do
draw2d(
explicit(ratinterpol(p,k),x,0,9),
point_size = 3,
points(p),
title = concat("Degree of numerator = ",k),
yrange=[0,10])$
|
Categories: Package interpol
| [ << ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
この文書は市川 雄二によって2014年4月月20日にtexi2html 1.82を用いて生成されました。