Kraków, 2.04.2014
PROJEKT INTERPOLACJA
metody obliczeniowe
Joanna Sołtysiak
Magdalena Sołtysiak
Radosław Burcek
Grzegorz Wróblewski
Etapy wykonywania projektu:
Utworzonych zostało 20 punktów podziału Nel=20, a węzłów Nodes=Nel+1 utowrzyliśmy21. Nasz przedział : a=0, b=3.
Tworzymy uchwyt matlabFunctionF_m=matlabFunction(F) dla podanej funkcji F=cos(4*x)*exp(-x) utworzyliśmy uchwyt matlabFunctionF_m=matlabFunction(F), aby móc wprowadzać ją do dalszych obliczeń.
Korzystająć z interpolacji Lagrange’a wyprowadzone zostały wzory L1=(x-xR)/(xL-xR) i L2=(x-xL)/(xR-xL)
Tworzymy wektor N=[L1,L2].
Tworzymy wzór na funkcję uh=N*DOF.
Utworzona została pętla, która dla każdego przedziału wylicza wartości funkcji oraz rysuje jej wykres
Za pomocą fukcji fplot, narysowane zostają wykresy pochodnych funkcji pierwotnej i przybliżonej w zadanym przedziale elementów.
Analizując wyniki należy pamiętać, że pochodne są obarczone błędem, którego nie jesteśmy w stanie wyeliminow
Kod programu:
clear
clc
clf
syms x xL xR uL uR real
u=cos(4*x)*exp(-x); % funcja do interpolacji
a=0; b=3; % rozpatrywany przedzia³
Nel=20; % liczba przedzia³ów
Nodes=Nel+1; % liczba wêz³ów
COORD=linspace(a,b,Nodes)
DOF=[uL; uR]
N1=(x-xR)/(xL-xR)
N2=(x-xL)/(xR-xL)
N=[N1, N2]
uh=N*DOF
u_m=matlabFunction(u)
uh_m=matlabFunction(uh)
du=diff(u,x)
du_m=matlabFunction(du)
B=diff(N,x)
duh=B*DOF
for i=1:Nel
uh_el=subs(uh,{xL, xR, uL, uR}, {COORD(i), COORD(i+1), u_m(COORD(i)), u_m(COORD(i+1))})
uh_el_m=matlabFunction(uh_el)
figure(1)
axis([a, b, -0.5, 1])
fplot (uh_el_m, [COORD(i) COORD(i+1)],'r'),
hold on
fplot (u_m, [COORD(i) COORD(i+1)],'b'),
hold on
figure(2)
axis([a, b, -0.5, 1])
duh_el=subs(duh,{xL, xR, uL, uR}, {COORD(i), COORD(i+1), u_m(COORD(i)), u_m(COORD(i+1))})
duh_el_m=@(x) double(duh_el)
fplot (duh_el_m, [COORD(i) COORD(i+1)],'r'),
hold on
fplot(du_m, [COORD(i) COORD(i+1)],'b'),
hold on
end
figure(1)
axis([a, b, -0.5, 1])
figure(2)
axis([a, b, -4, 2])