Nie obrażaj więc mojej inteligencji poprzez czynione na pokaz zaniżanie własnej.
>
restart: > with(plots):with(LinearAlgebra): Interpolacja Dane: > ?VandermondeMatrix > n:=5; n 5 > X:=array(0..n,[0,1,2,3,4,5]): > Y:=array(0..n,[5,6,6,5,4,6]): > plot(zip((x,y)->[x,y],X,Y),style=point,symbol=cross,symbolsize=2 0,view=[-1..6,0..10],axes=framed); > pkt:=%: Jawne generowanie i rozwiazywanie układu równan > w:=add(a[i]*x^i,i=0..n); := w + + + + + a 0 a 1 x 2 x 2 a 3 x 3 a 4 x 4 a 5 x 5 > for i from 0 to n do r||i:=eval(w,x=X[i])=Y[i]; end; r0 = := a 0 5 r1 := a 0 + + + + + a 1 a 2 a 3 a 4 a 5 = 6 r2 := a 0 + + + + + 2 a 1 4 a 2 8 a 3 16 a 4 32 a 5 = 6 r3 := a 0 + + + + + 3 a 1 9 a 2 27 a 3 81 a 4 243 a 5 = 5 r4 := a 0 + + + + + 4 a 1 16 a 2 64 a 3 256 a 4 1024 a 5 = 4 r5 := a 0 + + + + + 5 a 1 25 a 2 125 a 3 625 a 4 3125 a 5 = 6 > roz:=solve({r||(0..n)},{seq(a[i],i=0..n)}); roz { a 0 = 5 = , a 5 1 120 , a 4 = -1 24 , a 3 = 1 24 , a 2 = -11 24 , a 1 = 29 20 } := := > assign(roz): > w; 120 x 5 > wr:=copy(w); # współczynniki a[i] ulegną zmianie podczas dalszych obliczeń 5 + − + − + 29 20 x 24 x 2 24 x 3 1 24 x 4 1 1 wr + − + − + 5 29 20 x 24 x 2 24 x 3 24 x 4 120 x 5 1 > pwr:=plot(wr,x=X[0]..X[n]): > display([pkt,pwr]); Macierz Van der Monde'a A x i j n by i n = j ,, 0 . = i ++ 1, 1 j i = = > A:=Matrix(n+1):b:=Vector(n+1): > for i from 0 to n do b[i+1]:=Y[i]: for j from 0 to n do A[i+1,j+1]:=X[i]^j: end do: end do: > A,b; i + 1 i , .. 10000 0 11111 1 1 2 4 8 16 32 139 7 1 3 1 4 16 64 256 1024 1 5 25 125 625 3125 5 6 6 5 4 6 , > a:=A^(-1).b; 11 11 1 1 := 5 29 20 -11 24 1 24 -1 24 1 120 > wV:=add(a[i+1]*x^i,i=0..n); # wielomian interpolacyjny wyznaczony z ukadu równan A.a=b a := wV + − + − + := 5 29 20 x 24 x 2 24 x 3 24 x 4 120 x 5 1 Wielomian interpolacyjny Lagrange'a wielomianypomocnicze n ( x x − ) Lx () ∏ j i ( x x − ) j =≠ 0, j i i j > for i from 0 to n do L[i]:=factor(mul((x-X[j])/(X[i]-X[j]),j=0..i-1)*mul((x-X[j])/(X[ i]-X[j]),j=i+1..n)): end do; L 0 := − ( x 1( − ) x 2( − ) x 3( ) x 4( ) x 5 − ) 120 L 1 := x ( x 2( − ) x 3( − ) x 4( − ) x 5 − ) 24 L 2 := − x ( x 1( − ) x 3( − ) x 4( − ) x 5 − ) 12 L 3 := x ( x 1( − ) x 2( − ) x 4( − ) x 5 − ) 12 L 4 := − x ( x 1( − ) x 2( − ) x 3( − ) x 5 − ) 24 L 5 := x ( x 1( − ) x 2( − ) x 3( − ) x 4 − ) 120 = ∑ n wx yL x = () () i i i 0 > wL:=expand(add(Y[i]*L[i],i=0..n)); # bez rozwiazywania ukladu równań wL + − + − + := 5 29 20 x 24 x 2 24 x 3 24 x 4 120 x 5 1 Komenda Maple'a (interp) 11 1 1 = − − 11 1 1 > wM:=interp(X,Y,x); wM + − + − + 5 29 20 x 24 x 2 24 x 3 24 x 4 120 x 5 1 Porównanie > wr;wV;wL;wM; 5 + − + − + 29 20 x 24 x 2 24 x 3 1 24 x 4 1 120 x 5 1 5 + − + − + 29 20 x 24 x 2 24 x 3 1 24 x 4 1 120 x 5 1 5 + − + − + 29 20 x 24 x 2 24 x 3 1 24 x 4 1 120 x 5 1 5 + − + − + 29 20 x 24 x 2 24 x 3 1 24 x 4 1 120 x 5 1 > a:='a':b:='b': Krzywe sklejane trzeciego stopnia - generowanie i rozwiazywanie ukladu równan > for i to n do s[i]:=a[i]+b[i]*x+c[i]*x^2+d[i]*x^3 end do; := s 1 a 1 + + + b 1 x 1 x 2 d 1 x 3 s 2 := a 2 + + + b 2 x 2 x 2 d 2 x 3 s 3 := a 3 + + + b 3 x 3 x 2 d 3 x 3 s 4 := a 4 + + + b 4 x 4 x 2 d 4 x 3 s 5 := a 5 + + + b 5 x 5 x 2 d 5 x 3 Warunki przechodzenia krzywych przez wezły interpolacji > for i to n do r||i:=eval(s[i],x=X[i])=Y[i]; r||(n+i):=eval(s[i],x=X[i-1])=Y[i-1]; end do; r1 := a 1 + + + b 1 c 1 d 1 = 6 r6 = := a 1 5 r2 := a 2 + + + 2 b 2 4 c 2 8 d 2 = 6 r7 := a 2 + + + b 2 c 2 d 2 = 6 r3 := a 3 + + + 3 b 3 9 c 3 27 d 3 = 5 r8 := a 3 + + + 2 b 3 4 c 3 8 d 3 = 6 r4 := a 4 + + + 4 b 4 16 c 4 64 d 4 = 4 r9 := a 4 + + + 3 b 4 9 c 4 27 d 4 = 5 r5 := a 5 + + + 5 b 5 25 c 5 125 d 5 = 6 a 5 4 b 5 16 c 5 64 d 5 4 Warunki równości pierwszych i drugich pochodnych w wewnetrznych wezlach interpolacji > for i to n-1 do r||(2*n+i):=eval(diff(s[i],x),x=X[i])=eval(diff(s[(i+1)],x),x=X[ r10 := + + + = 11 1 1 := 11 11 11 11 i]); r||(3*n+i):=eval(diff(s[i],x,x),x=X[i])=eval(diff(s[(i+1)],x,x), x=X[i]); end do; r11 := b 1 + + 2 c 1 3 d 1 = b 2 + + 2 c 2 3 d 2 r16 := 2 c 1 + 6 d 1 = 2 c 2 + 6 d 2 r12 := b 2 + + 4 c 2 12 d 2 = b 3 + + 4 c 3 12 d 3 r17 := 2 c 2 + 12 d 2 = 2 c 3 + 12 d 3 r13 := b 3 + + 6 c 3 27 d 3 = b 4 + + 6 c 4 27 d 4 r18 := 2 c 3 + 18 d 3 = 2 c 4 + 18 d 4 r14 := b 4 + + 8 c 4 48 d 4 = b 5 + + 8 c 5 48 d 5 r19 := 2 c 4 + 24 d 4 = 2 c 5 + 24 d 5 Zerowanie drugich pochodnych w skrajnych węzlach > r||(3*n):=eval(diff(s[1],x,x),x=X[0])=0; r||(4*n):=eval(diff(s[n],x,x),x=X[n])=0; := r15 = 2 c 1 0 2 c 5 30 d 5 0 > roz:=solve({r||(1..4*n)},{seq(a[i],i=1..n),seq(b[i],i=1..n),seq( c[i],i=1..n),seq(d[i],i=1..n)}); r20 := + = roz = { b 5 -1072 19 , d 5 = -15 19 , c 5 = 225 19 , b 1 = 23 19 , a 1 = 5 = , c 1 0 = , a 3 98 19 , d 1 = -4 19 , b 3 = 26 19 , d 3 = 0 , d 4 = 18 19 , a 4 = -388 19 , b 4 = 512 19 , a 5 = 1724 19 , c 3 = -9 19 , d 2 = 1 19 , a 2 = 90 19 , b 2 = 2 = , c 4 -9 = , c 2 -15 19 } > assign(roz): > for i to n do s[i]; end do; 5 + − 23 19 x 4 19 x 3 90 19 + − + 2 x 15 19 x 2 1 19 x 3 98 19 + − 26 19 x 19 x 2 9 − + − + 388 19 512 19 x 9 x 2 19 x 3 19 x 3 Wygenerowanie jednej funkcji skladajacej sie z poszczególnych funkcji sklejanych > S:=piecewise(x<X[1],s[1],x<X[2],s[2],x<X[3],s[3],x<X[4],s[4],s[5 ]); 1724 19 − + − 1072 19 x 225 19 x 2 15 := 18 |
Menu
|