clear all close all clc x=linspace(-1,1,101); y =sqrt(1-x.^2); %funkcja figure; plot(x,y(x)) hold on; xn = [-1 -0.5 0 0.5 1]; y = [y(xn)]; ylgr = []; ynwt = []; for i=1:length(x) ylgr = [ylgr lagrange_int(xn,y,x(i))]; end function xv = lagrange_int(xn,yn,x) licznik = 1; mianownik = 1; sum = 0; N = length(xn); for j = 1:N for k = 1:N if (j~=k) mianownik = mianownik*(xn(j)-xn(k)); licznik = licznik*(x-xn(k)); end end sum = sum+yn(j)*licznik/mianownik; licznik = 1; mianownik = 1; end xv = sum; end ____________________________________________________________________________________________ clear all close all clc % policzyć błędy bezwzględne i względne dla poszczególnych funkcji % wyrysować błędy (w razie potrzeby zastosować skalę % logarytmiczną w osi rzędnych) % efekt rungego - oscylacje na krańcach przedziału y = @(x) 1./(1+25*x.^2); % moduł x, brak ciągłej pochodnej y1 = @(x) abs(x); % nieograniczona pochodna na krańcach przedziału y2 = @(x) sqrt(1-x.^2); % nieróżniczkowalna dla x=0 y3 = @(x) x.*exp(x); x = linspace(-1,1,100); figure; plot(x,y(x),'r') hold on; xn = [-1 -0.5 0 0.5 1]; yn = [y(xn)]; ylgr = []; ynwt = []; blad_bzwzg=0; blad_wzg=0; for i=1:length(x) ylgr = [ylgr lagrange_int(xn,yn,x(i))]; % ynwt = [ynwt newton_int(xn,yn,x(i))]; end % plot(x,ylgr,'b',x,ynwt,'g'); plot(x,ylgr,'b'); % plot(x,ynwt,'g') %blad bezwzgl figure for i=1:length(x) blad_bzwzg=abs(ylgr-y(x)) end plot(x,blad_bzwzg,'-.g'); %blad wzgledny figure for i=1:length(x) blad_wzg=[abs((ylgr-y(x))./y(x))] if y(x)==0 blad_wzg=0; end end plot(x,blad_wzg,'r'); % Lagrange function xv = lagrange_int(xn,yn,x) licznik = 1; mianownik = 1; sum = 0; N = length(xn); for j = 1:N for k = 1:N if (j~=k) mianownik = mianownik*(xn(j)-xn(k)); licznik = licznik*(x-xn(k)); end end sum = sum+yn(j)*licznik/mianownik; licznik = 1; mianownik = 1; end xv = sum; end % Newton % function xv = newton_int(xn,yn,x) % xes = 1; % suma = yn(1); % N = length(xn); % % for j=1:N-1 % ynew = []; % xes = xes*(x-xn(j)); % for i=1:N-j % ynew=[ynew(yn(i+1)-yn(i))/(xn(i+j)-xn(i))]; % end % yn = ynew; % suma = suma+ynew(1)*xes; % end % xv = suma; % end ------------------------------------------------------------------------------------------------------- clear all clc % policzyć błędy bezwzględne i względne dla poszczególnych funkcji % wyrysować błędy (w razie potrzeby zastosować skalę % logarytmiczną w osi rzędnych) % efekt rungego - oscylacje na krańcach przedziału y = @(x) 1./(1+25*x.^2); % moduł x, brak ciągłej pochodnej %y = @(x) abs(x); % nieograniczona pochodna na krańcach przedziału %y = @(x) sqrt(1-x.^2); % nieróżniczkowalna dla x=0 %y = @(x) x.*exp(x); x = linspace(-1,1,100); figure(1); plot(x,y(x),'r') grid on hold on; xn = [-1 -0.5 0 0.5 1]; yn = [y(xn)]; ylgr = []; ynwt = []; for j=1:length(x) ylgr = [ylgr lagrange_int(xn,yn,x(j))]; % ynwt = [ynwt newton_int(xn,yn,x(j))]; end %figure() % plot(x,ylgr,'b',x,ynwt,'g'); plot(x,ylgr,'black',x,y(x),'red'); title('Funkcja interpolujaca(czarna) i interpolowana(czerwona)') grid on hold off blad_b = 0; blad_w = 0; %%blad bezwzgledny figure(3) for j=1:length(x) blad_b = abs(ylgr - y(x)); end plot(x,blad_b,'black'); title('Blad bezwzgledny') grid on %%blad wzgledny figure(4) for j=1:length(x) if y(x) == 0 % zabezpieczam przed dzieleniem przez 0 blad_w = 0 % wartosc dla zachowania ciaglosci przebiegu %(chociaz matlab chyba sam przyjmuje wtedy f(x)=0) else blad_w = (abs(ylgr - y(x))./y(x)); end end plot(x,blad_w,'black'); title('Blad wzgledny') grid on %%funkcje function xv = lagrange_int(xn,yn,x) licznik = 1; mianownik = 1; sum = 0; N = length(xn); for j = 1:N, for k = 1:N, if (j~=k) licznik = licznik * (x-xn(k)); mianownik = mianownik * (xn(j)-xn(k)); end end sum = sum + yn(j) * (licznik/mianownik); licznik = 1; mianownik = 1; end xv = sum; end % function xv = newton_int(xn,yn,x) % xes = ...; % suma = yn(1); % N = length(xn); % % for j=1:N-1, % ynew = []; % xes = ...; % for i=1:N-j, % ynew=[...]; % end % yn = ...; % suma = ...; % end % xv = suma; % end --------------------------------------------------------------------