w12 b, Inżynierskie, Semestr III, Metody obliczeniowe, Wyklady

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
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • alter.htw.pl
  • Powered by WordPress, © Nie obrażaj więc mojej inteligencji poprzez czynione na pokaz zaniżanie własnej.