Interpolacija i diferenciranje1. zadatak2. zadatak3. zadatak4. zadatak5. zadatak6. zadatak7. zadatak - domaći8. zadatak - domaći9. zadatak - domaći
Neka je funkcija zadata tablično M-fajlom koji generiše dva niza i (od kojih je prvi strogo rastući) za tu tablično zadatu funkciju. Tablica ne mora biti ekvidistantna.
x% Komandni fajl sa vektorima X i F% X=[0 0.2 0.4 0.6 0.8 1];% Umesto da navodimo sve ove elemente, možemo pisati% X je vektor vrednosti od 0 : sa korakom 0.2 : do 1X = 0:0.2:1;% F=[1 2 3 4 5 6];F = 1:6;% primer sa vežbi:% X=[100 121 144];% F=[10 11 12];
Napisati M-fajl u kom se prethodna tablica proširuje do nove dodavanjem čvorova i računanjem vrednosti funkcije u njima korišćenjem formule:
xxxxxxxxxx% Komandani fajl koji od stare tablice u komandnom fajlu tablica.m (X i F)% formira novu tablicu (X1 i F1)tablica; % Učitavamo podatke iz tablica.m (X i F)n = length(X); % Dužina niza X% Poželjno je formirati nula nizove dužine 2*n-1 (dužina proširenog niza) kako ne bismo u %svakom prolasku for petlje menjali dimenziju nizova X1 = zeros(1, 2*n-1);F1 = zeros(1, 2*n-1);for i = 1:2:2*n-1 % indeks mora biti ceo broj X1(i) = X((i + 1)/2); F1(i) = F((i + 1)/2); % ili X1(i)=X(round(i/2)); % F1(i)=F(round(i/2));end% Računamo nove elementefor i = 2:2:2*n-1 X1(i)=(X1(i+1)+X1(i-1))/2; F1(i)=(F1(i+1)+F1(i-1))/2; % ili X1(i) = (X(i/2) + X(i/2+1)) / 2; % F1(i) = (F(i/2) + F(i/2+1)) / 2;end% Funkcije za zaokruživanje: round(), ceil() i floor()% round(1.8)=2% round(1.3)=1% round(1.5)=2% ceil(1.3)=2% floor(1.8)=1
Napisati M-fajl sa funkcijom koja za uneti argument vraća približnu vrednost funkcije u toj tački izračunatu pomoću Lagranžovog interpolacionog polinoma korišćenjem svih vrednosti iz nove tablice.
xxxxxxxxxxfunction L = Lagr1(x)% Računamo vrednost Lagranžovog interpolacionog polinoma u tački x% Argumenti funkcije:% x - (broj) tačka u kojoj računamo vrednost Lagranžovog int. polinoma% Funkcija vraća:% L - vrednost Lagranžovog int. polinoma u tački x % NAPOMENA: ne konstruišemo polinom, ne nalazimo koeficijente polinoma!novatablica;L = 0;n = length(X1);for i = 1 : n p = 1; for j = 1 : n if i ~= j p = p * (x - X1(j)) / (X1(i) - X1(j)); end end L = L + p * F1(i);endNeka je funkcija zadata eksplicitno komandnim M-fajlom .
% Primer funkcije kod koje se sa povećanjem broja čvorova povećava i greška (Rungeov fenomen)f = @(x) 1 ./ (1 + 25 * x.^2);% Drugi način definisanja funkcije % f=inline('1./(1+25*x.^2)');% neki drugi primeri funkcija (anonimne funkcije)%f=@(x) sin(x)/3+cos(x).^2;%f=@(x) 45./(10.*x.^2+1);Napisati M-fajl sa funkcijom koja tabelira zadatu funkciju na intervalu sa čvorova.
xxxxxxxxxxfunction [X, Y] = tablica(a, b, n)% Agrumenti funkcije:% a i b - granice intervala% n - broj tačaka na koji delimo interval [a,b]% Funkcija vraća:% X - čvorove interpolacije% Y - vrednosti funkcije u tim čvorovima% Poziv funkcije: [X Y] = tablica(-2,2,5)funkcija;% I način% n ravnomerno raspoređenih tačaka od a do b => broj podintervala je n-1 % dužina svakog od njih (korak h) iznosi h = (b - a) / (n - 1);for i = 1 : n X(i) = a + (i - 1) * h; Y(i) = f(X(i)); %Y(i)=feval(f,X(i));end% II način - ugrađena funkcija linspace()% X = linspace(a, b, n);% Y = f(X);
Napisati M-fajl sa funkcijom koji formira i vraća koeficijente Lagranžovog interpolacionog polinoma formiranog koristeći sve vrednosti iz tablice, kao i vrednost formiranog polinoma u tački .
xxxxxxxxxxfunction [L, y] = Lagr1b(x, a, b, n)% Poziv funkcije, npr: [L,y]=Lagr1b(0.5,-2,2,5)% Argumenti funkcije:% x - tačka u kojoj se računa vrednost Lagranžovog int. polinoma% a i b - granice intervala [a,b]% n - broj čvorova% Funkcija vraća:% L - koeficijente odgovarajućeg Lagranzovog int. polinoma % y - vrednost polinoma u tački x% NAPOMENA: sada konstruišemo polinom![X, Y] = tablica(a, b, n);n = length(X);L = zeros(1, n); % L je sada polinomfor i = 1 : n p = 1; % p je trenutno polinom nultog stepena, tj. p=1*x^0 for j = 1 : n if i ~= j % Množimo 2 polinoma % [1 -X(j)] je polinom 1*x^1 - X(j)*x^0 % NAPOMENA: paziti na razmak % [1 - X(j)] nije isto što i [1 -X(j)], prvi vektor je polinom (1-X(j))*x^0 p = conv(p, [1, -X(j)]/(X(i) - X(j))); end end L = L + p * Y(i);end% Računamo vrednost polinoma L u tački xy = polyval(L, x);Uporediti grafike funkcije i formiranog interpolacionog polinoma.
xxxxxxxxxxfunction grafik(a, b, n)% Poziv funkcije:% grafik(-1,1,5) interpolacija sa 5 tačaka% grafik(-1,1,10) interpolacija sa 10 tačaka% grafik(-1,1,11) interpolacija sa 11 tačaka[L, y] = Lagr1b(1, a, b, n); %x je nebitan za grafikfunkcija;% Delimo interval [a,b] na 100 tačakax = linspace(a, b);% Želimo više grafika na jednoj slici (moramo uključiti hold on i kasnije isključiti sa% hold off). Svaki poziv plot() izmedju ove dve naredbe crtaće novi% grafik i pritom se grafici prethodnog pozivanja funkcije plot() neće obrisatihold on% Crtamo prvi grafik funkcijeplot(x, f(x));% Crtamo drugi grafik polinomaplot(x, polyval(L, x), 'r');hold offlegend('funkcija f', 'interpolacioni polinom')% Izjednačavamo oseaxis equalNeka je funkcija zadata tablično M-fajlom koji generiše dva niza i za tu tablično zadatu funkciju.
xxxxxxxxxxX = 15:5:55;Y = [0.2588, 0.3420, 0.4226, 0.5000, 0.5736, 0.6428, 0.7071, 0.7660, 0.8192];Napisati M-fajl sa funkcijom koja vrši proveru da li je tablica u komandnom fajlu ekvidistantna i da li je niz zadat u strogo rastućem poretku. Ukoliko su oba uslova ispunjena funkcija vraća vrednost , u suprotnom vraća vrednost i u oba slučaja ispisuje odgovarajuću poruku.
xxxxxxxxxxfunction t = tablicaCheck()% Funkcija vraća:% t=1 - ukoliko je sve u redu% t=0 - ukoliko nije ispunjen jedan od ova dva uslovatablica;r = all(diff(X) > 0);h = X(2) - X(1);% ekv=all(diff(X)==h); Radi samo za celobrojne vrednosti koraka h!% zbog netačne reprezentacije relane brojeve nikada ne treba porediti na jednakost% već smatramo da su jednaki ako je apsolutna vrednost njihove razlike manja od nekog %dovoljno malog brojaekv = all(abs(diff(X)-h) <= 1e-10);t = r && ekv;if t == 1 disp('Tablica je ekvidistantna i vektor X je zadat u strogo rastucem poretku.')else disp('Nisu ispunjeni uslovi zadatka!')endNapisati M-fajl sa funkcijom koja za uneti argument vraća vrednost ukoliko je , ukoliko je i inače.
xxxxxxxxxx% Određuje položaj tačke x u odnosu na čvorove interpolacijefunction pol = polozaj(x)tablica;n = length(X);if x < X(2) pol = 1;else if x > X(n-1) pol = 2; else pol = 0; endendNapisati M-fajl sa funkcijom koja ukoliko su svi uslovi ispunjeni, vraća približnu vrednost funkcije u tački izračunatu korišćenjem I (II) Njutnovog interpolacionog polinoma, ako je vrednost funkcije u tački jednaka , odnosno izdaje odgovarajuću poruku ukoliko je
xxxxxxxxxxfunction nj = Njutn(x)if tablicaCheck() == 1 % da li su ispunjeni uslovi zadatka if polozaj(x) == 1 % da li je x na početku tablice nj = Njutn1(x); else if polozaj(x) == 2 % da li je x na kraju tablice nj = Njutn2(x); else error('Tacka se nalazi u sredini'); end endelse error('Nisu ispunjeni uslovi zadatka');end % Ugrađena funkcija error() prekida izvršavanje progrma i vraća poruku (string koji dobija % kao argument) kojom nas obaveštava zašto je prekinutno izvršavanje.xxxxxxxxxxfunction nj1 = Njutn1(x)% Pomoćna funkcija koju koristi Njutn.m za računanje vrednosti I Njutnovog% interpolacionog polinoma u tački xtablica;n = length(X);% KONAČNE RAZLIKE:k_razlike = zeros(n, n-1);% For petlja koja popunjava prvu kolonu tabele konačnih razlika, jer se% one računaju oduzimanjem odgovarajućih elemenata vektora Yfor i = 1 : n-1 k_razlike(i, 1) = Y(i+1) - Y(i);end% For petlja koja računa konačne razlike od drugog do n-1 reda % Svako izračunavanje se vrši oduzimanjem odgovarajućih vrednosti% iz prethodne kolone tabele konačnih razlikafor j = 2 : n-1 % po kolonama (red konačne razlike) for i = 1 : n-j % po vrstama (poslednji čvor za koje se može naći k.r. reda j je n-j) k_razlike(i, j) = k_razlike(i+1, j-1) - k_razlike(i, j-1); endenddisp(k_razlike);% Želimo da matricu k_razlike nadovežemo na čvorove i vrednosti funk. u čvorovima i da % dobijemo tablicu kao na vežbama% disp([X' Y' k_razlike])% I NJUTNOV INTERPOLACIONI POLINOM:y = Y(1);h = X(2) - X(1);q = (x - X(1)) / h;% čuvamo početnu vrednost za q jer nam treba za formiranje svakog sledećeg sabirka Q = q;for j = 1 : n-1 y = y + q * k_razlike(1, j) / factorial(j); q = q * (Q - j);endnj1 = y;% Samo računamo vrednost polinoma u tački, ne konstruišemo polinom!xxxxxxxxxxfunction nj2 = Njutn2(x)% Pomoćna funkcija koju koristi Njutn.m za racunanje II Njutnovog% interpolacionog polinoma u tački xtablica;n = length(X);% KONAČNE RAZLIKE:k_razlike = zeros(n, n-1);for i = 1 : n-1 k_razlike(i, 1) = Y(i+1) - Y(i);endfor j = 2 : n-1 for i = 1 : n-j k_razlike(i, j) = k_razlike(i+1, j-1) - k_razlike(i, j-1); endenddisp(k_razlike);% II NJUTNOV INTERPOLACIONI POLINOM:y = Y(end);h = X(2) - X(1);q = (x - X(end)) / h;Q = q;for j = 1 : n-1 y = y + q * k_razlike(n-j, j) / factorial(j); q = q * (Q + j);endnj2 = y;Neka je funkcija zadata tablično M-fajlom koji generiše dva niza i
za tu tablično zadatu funkciju. Tablica ne mora biti ekvidistantna.
xxxxxxxxxxX = [2 2.5 3.5 4];Y = sin(X);% ili npr.% Y=X+1%Y=[3 3.5 4.5 5];Napisati M-fajl sa funkcijom koja vrši proveru da li je niz zadat u strogo rastućem poretku i da li je niz monoton. Ukoliko su oba uslova ispunjena funkcija vraća vrednost , u suprotnom vraća vrednost . Ukoliko neki od uslova nije ispunjen, funkcija ispisuje odgovarajuću poruku.
xxxxxxxxxxfunction t = tablicaCheck()% Funkcija vraća:% t=1 - ukoliko je sve u redu% t=0 - ukoliko nije ispunjen jedan od ova dva uslovatablica;n = length(X);provera_x = 1;provera_y = 1;% Da li je X strogo rastući?for i = 1 : n-1 if X(i) >= X(i+1) provera_x = 0; disp('Niz X nije rastuci'); break endend% Da li je Y monoton?i = 1;if Y(2) > Y(1) % Pretenduje da bude strogo rastući % Operator && ne računa logičku vrednost drugog operanda, ako prvi ima vr. 0 while (i < n && Y(i+1) > Y(i)) % Bitan redosled, kako se ne bi pristupalo Y(n+1) i = i + 1; endelse if Y(2) < Y(1) % Pretenduje da bude strogo opadajući while (i < n && Y(i+1) < Y(i)) i = i + 1; end endendif i < n % prekinuto je izvršavanje jedne od while petlji jer nije ispunjen uslov za Y provera_y = 0; disp('Niz Y nije monoton');endif provera_x == 1 && provera_y == 1 % if (provera_x && provera_y) t = 1;else t = 0;end% Ili umesto if-a: t=proverax && proveray% II Nacin: % provera_x=all(diff(X)>0); % provera_y=all(diff(Y)>0) || all(diff(Y)<0); % t=provera_x && provera_y;Napisati M-fajl sa funkcijom koja za uneti argument vraća
približnu vrednost funkcije u toj tački izračunatu pomoću Njutnovog interpolacionog polinoma sa podeljenim razlikama korišćenjem svih vrednosti iz tablice.
xxxxxxxxxx function y = vredfunk(x) tablica; n = length(X); % Da li su ispunjeni uslovi zadatka? if tablicaCheck() == 0 error('Nisu ispunjeni uslovi zadatka'); end % Podeljene razlike p_razlike = zeros(n, n-1); % For petlja koja popunjava prvu kolonu tabele podeljenih razlika, jer se % one racunaju oduzimanjem odgovarajucih elemenata vektora Y for i = 1 : n-1 p_razlike(i, 1) = (Y(i+1) - Y(i)) / (X(i+1) - X(i)); end % For petlja koja računa podeljene razlike od drugog do n-1 reda % Svako izračunavanje se vrši oduzimanjem odgovarajućih vrednosti % iz prethodne kolone tabele podeljenih razlika for j = 2 : n-1 % po kolonama (red podeljene razlike) for i = 1 : n-j % po vrstama p_razlike(i, j) = (p_razlike(i+1, j-1) - p_razlike(i, j-1)) / (X(i+j) - X(i)); end end disp('Stampamo tablicu po kolonama:'); % "lepimo" vektore X i Y na početak tablice podeljenih razlika disp([X', Y', p_razlike]); % Njutnov interpolacioni polinom sa podeljenim razlikama y = Y(1); p = 1; for i = 1 : n-1 p = p * (x - X(i)); y = y + p * p_razlike(1, i); end disp(y); % II nacin za formiranje matrice podeljenih razlika - funkcija diff() % prazlike(1:n-1,1)=diff(Y)./diff(X); % for j=2:n-1 % prazlike(1:n-j,j)=diff(prazlike(1:n-j+1,j-1))./(X(1+j:n)-X(1:n-j))'; % end
Neka su u komandnom fajlu dati funkcija i vektor koji sadrži samo celobrojne vrednosti.
f = @(x) (x + 1) / 3;X = [-5 -4 -2 -1 2 3 5 6 7 8 9 10]f = @(x) (x + 1) / 3;Napisati M-fajl sa funkcijom koja formira tablicu gde se vektor sastoji samo od parnih vrednosti vektora , a vektor su vrednosti eksplicitno zadate funkcije u elementima vektora zaokruženi na decimale.
xxxxxxxxxxfunction [X1, Y1] = tablica()podaci;% Ugradjena funkcija find(uslov) vraća vektor pozicija onih elemenata u vektoru (koji je sadržan u uslovu) koji ispunjavaju zadati uslov% find(mod(X,2)==0) vratiće vektor pozicija (indeksa) parnih elemenata vektora X% X(find(mod(X,2)==0)) vraća parne elemente vektora XX1 = X(find(mod(X, 2) == 0));Y1 = f(X1);Y1 = round(Y1.*1000) / 1000;% Ugrađenoj funkciji round() kao drugi argument možete proslediti na koliko decimala %želite da izvršite zaokruživanje% Y1=round(Y1,3);Napisati M-fajl sa funkcijom koja za zadatu vrednost inverznom interpolacijom približno određuje za koje je . (*Tablica neće biti ekvidistantna, pa koristimo Lagranžov interpolacioni polinom)
x
function x = inverz(y)[X, Y] = tablica();n = length(X);% Pošto iz postavke zadatka tablica ne mora biti ekvidistantna, za inverznu% interpolaciju najpre ćemo invertovati tablicu, a zatim odrediti vrednost% Lagranžovog interpolacionog polinoma u tački yinv_Tablica = zeros(2, n);% U prvu vrstu upisujemo vektor Yinv_Tablica(1, :) = Y;% U drugu vrstu upisujemo vektor Xinv_Tablica(2, :) = X;% Tablicu sortiramo po Y u rastućem poretku% Ugradjena funkcija sortrows(M,br_kol) sortiraće matricu M po koloni br_kol% Želimo sortiranje po prvoj vrsti matrice inv_Tablica, tj. po prvoj koloni% transponovane matriceinv_Tablica = (sortrows(inv_Tablica', 1))';% Prikazujemo kako izgleda naša tablica nakon invertovanja i sortiranjadisp('Invertovana tablica:');disp(inv_Tablica);% Izvlačimo prvu vrstu invertovane tablice (čvorovi za interpolaciju inverza funk. f) % u vektor Y1 i drugu vrstu (vrednosti inverza funkcije f) u vektor X1Y1 = inv_Tablica(1, :);X1 = inv_Tablica(2, :);% Računamo vrednost Lagranžovog interpolacionog polinoma u tački y (ne konstruišemo polinom!)L = 0;for i = 1 : n p = 1; for j = 1 : n if i ~= j p = p * (y - Y1(j)) / (Y1(i) - Y1(j)); % u vektoru Y1 se nalaze čvorovi end end L = L + p * X1(i); % u vektoru X1 se nalaze vrednosti inverza funkcije fend
Neka je funkcija zadata eksplicitno komadnim M-fajlom .
xxxxxxxxxxf = inline('x.^2+x/2-exp(x)/4');Napisati M-fajl sa funkcijom koja formira ekvidistantnu tabelu funkcije na segmentu sa čvorova.
x
funkcija;function [X, Y] = tablica(a, b, n)% Poziv funkcije: [X Y] = tablica(1,4.5,10)funkcija; % učitavanje komandnog fajla kako bismo imali na raspolaganju funk. f % Korakh = (b - a) / (n - 1);for i = 1 : n X(i) = a + (i - 1) * h; Y(i) = f(X(i)); % računanje vrednosti funk. korišćenjem ugrađene funkcije feval() % Y(i) = feval(f, X(i)); end% Ili u dva reda:% X=linspace(a,b,n) % Y=f(X);% NAPOMENA: Funkciji f prosleđujemo vektor i želimo da kao rezultat dobijemo vektor %vrednosti funkcije f u svim elementima vektora X, stoga je neophodno je uvesti '.' %notaciju tj. '.^' pri definisanju funkcije f (svaki element iz X treba kvadrirati). Napisati M-fajl sa funkcijom koja na osnovu nizova i dobijenih pozivanjem funkcije pronalazi i kao rezultat vraća prvi interval u kome funkcija menja znak . Pretpostavlja se da takav interval postoji.
x
function [c, d] = promenaZnaka(a, b, n)% Poziv funkcije: [c,d] = promenaZnaka(1,5,10)[X, Y] = tablica(a, b, n);n = length(X);for i = 1 : n-1 if Y(i) * Y(i+1) < 0 break endend% II način - korišćenjem ugrađene funk. find()% koordinatno množimo vektore [y1 y2 ... yn-1] i [y2 y3 ... yn] i u vekoru rezultata% tražimo poziciju prvog negativnog elementa. Kada funk. find() kao drugi% argument prosledite 1, ona će vratiti poziciju prvog elementa koji ispunjava uslov%i=find(Y(1:n-1).*Y(2:n)<0,1);c = X(i);d = X(i+1);Napisati M-fajl sa funkcijom koja metodom inverzne interpolacije približno određuje nulu funkcije na intervalu koristeći II Njutnov interpolacioni polinom zaključno sa konačnim razlikama reda . Kriterijum zaustavljanja iterativnog niza:
x
% Nakon tabeliranja na segmentu [c,d] nula ce biti na kraju tablicefunction x = nula(a, b, n)% Poziv funkcije: x=nula(1,4.5,10)% Nakon tabeliranja na segmentu [c,d] nula će se nalaziti na kraju tablice[c, d] = promenaZnaka(a, b, n);% tabeliramo funk. na podintervalu [c,d] u dodatnih n tačaka[X1, Y1] = tablica(c, d, n);h = X1(2) - X1(1);% x - nula funkcije% TABLICA KONACNIH RAZLIKA% X(1) Y(1) kR(1,1) kR(1,2) kR(1,3)% X(2) Y(2) kR(2,1) kR(2,2) kR(2,3)% X(3) Y(3) kR(3,1) kR(3,2) kR(3,3)% . . . . .% . . . . .% . . . . .% X(n-3) Y(n-3) kR(n-3,1) kR(n-3,2) kR(n-3,3)% X(n-2) Y(n-2) kR(n-2,1) kR(n-2,2)% X(n-1) Y(n-1) kR(n-1,1)% X(n) Y(n)k_razlike = zeros(n, 3); % potrebne su nam konačne razlike do 3. redafor i = 1 : n-1 k_razlike(i, 1) = Y1(i+1) - Y1(i);endfor j = 2 : 3 for i = 1 : n-j k_razlike(i, j) = k_razlike(i+1, j-1) - k_razlike(i, j-1); endend% Štampamo tabelu konačnih razlikadisp([X1', Y1', k_razlike]);% II NJUTNOV INTERPOLACIONI POLINOM% y = Y(n)+q*k_razlike(n-1,1)+q*(q+1)*k_razlike(n-2,2)/2+...% q*(q+1)*(q+2)*k_razlike(n-3,3)/6% ODGOVARAJUAĆA ITERATIVNA FORMULA% q =(y-Y(n)-q*(q+1)*k_razlike(n-2,2)/2-% -q*(q+1)*(q+2)*k_razlike(n-3,3)/6)/k_razlike(n-1,1)y = 0; % tražimo nulu funkcije% q0=0, q1=slobodan član prethodno napisanog polinoma po q% u vektor q smeštamo elemente iterativnog nizaq = [0, (y-Y1(end)) / k_razlike(n-1, 1)];while (abs(q(end)-q(end-1)) > 0.0001) q1 = q(end); q = [q, (y-Y1(end)-k_razlike(n-2, 2)*q1*(q1 + 1)/2- ... % za prelazak u novi red k_razlike(n-3, 3)*q1*(q1 + 1)*(q1 + 2)/6) / k_razlike(n-1, 1)];enddisp('Nula funkcije je: ');x = X1(end) + q(end) * h;disp('iterativni niz q je: ');q'Neka je funkcija zadata tablično M-fajlom koji generiše dva niza i (od kojih je prvi strogo rastući) za tu tablično zadatu funkciju. Tablica ne mora biti ekvidistantna.
x
X = [-2, -1.5, 0, 0.7, 0.9, 1.1];Y = 2 * X - exp(X);Napisati M-fajl sa funkcijom u kom se na osnovu prethodne tablice formira tablica prvog izvoda funkcije u tačkama korišćenjem sledeće formule: , gde je , a .
Napisati M-fajl sa funkcijom koja za uneti argument vraća približnu vrednost prvog izvoda funkcije izračunatu korišćenjem Njutnovog interpolacionog polinoma sa podeljenim razlikama konstruisanog na osnovu svih vrednosti iz tablice formirane korišćenjem funkcije .
Napisati M-fajl sa funkcijom koja metodom inverzne interpolacije približno određuje i vraća jednu nulu prvog izvoda funkcije korišćenjem Njutnovog interpolacionog polinoma sa podeljenim razlikama (pretpostavka je da je prvi izvod monotona funkcija).
test primer
x
>> [Xi,Yi] = izvod() X = -1.5000 0 0.7000 0.9000 Yi = 1.5677 1.1861 0.3782 -0.4760 >> y = vredizvod(0.4) >> Tablica podeljenih razlika: -1.5000 1.5677 -0.2544 -0.4090 -1.2727 0 1.1861 -1.1541 -3.4635 0 0.7000 0.3782 -4.2713 0 0 0.9000 -0.4760 0 0 0 y = 1.0637 >> nul = nula() >> Tablica podeljenih razlika: -0.4760 0.9000 -0.2341 -0.3805 -1.0745 0.3782 0.7000 -0.8665 -2.5764 0 1.1861 0 -3.9310 0 0 1.5677 -1.5000 0 0 0 nul = 0.6276Neka je funkcija zadata tablično M-fajlom koji generiše dva niza i (od kojih je prvi strogo rastući) za tu tablično zadatu funkciju. Tablica mora biti ekvidistantna ( sa korakom h ).
xxxxxxxxxxX = linspace(1,2,6);f = @(x) exp(x) - 15 * x;Y = f(X);Napisati M-fajl sa funkcijom u kom se na osnovu prethodne tablice formira tablica drugog izvoda funkcije u tačkama korišćenjem sledeće formule: , gde je a
Napisati M-fajl sa funkcijom koja za uneti argument vraća približnu vrednost drugog izvoda funkcije izračunatu korišćenjem I Njutnovog interpolacionog polinoma konstruisanog na osnovu svih vrednosti iz tablice formirane korišćenjem funkcije .
Napisati M-fajl sa funkcijom koja metodom inverzne interpolacije približno određuje nulu drugog izvoda funkcije (pretpostavka je da je drugi izvod monotona funkcija) koristeći I Njutnov interpolacioni polinom zaključno sa konačnim razlikama reda . Kriterijum zaustavljanja iterativnog niza:
test primer
xxxxxxxxxx -12.2817 -14.6799 -16.9448 -19.0470 -20.9504 -22.6109 >> [X Y Y2] = drugiizvod() X = 1.2000 1.4000 1.6000 1.8000 Y2 = 3.3312 4.0687 4.9696 6.0698 >> y = vred2izvod(1.66) >> Tablica konacnih razlika: 1.2000 3.3312 0.7375 0.1633 0.0362 1.4000 4.0687 0.9008 0.1994 0 1.6000 4.9696 1.1003 0 0 1.8000 6.0698 0 0 0 y = 5.2771 >> y = nula() >> Tablica konacnih razlika: 1.2000 3.3312 0.7375 0.1633 0.0362 1.4000 4.0687 0.9008 0.1994 0 1.6000 4.9696 1.1003 0 0 1.8000 6.0698 0 0 0 y = -0.1068Neka je funkcija zadata tablično M-fajlom koji generiše dva niza i (od kojih je prvi strogo rastući) za tu tablično zadatu funkciju. Tablica mora biti ekvidistantna ( sa korakom h ).
xxxxxxxxxxX = linspace(2, 4, 10);Y = exp(X);Napisati M-fajl sa funkcijom koja računa vrednost prvog izvoda tabelirane funkcije u tački koristeći diferenciranje I Njutnovog interpolacionog polinoma zaključno sa konačnim razlikama reda .
xxxxxxxxxx % TABLICA KONACNIH RAZLIKA function izvod1(x) % Poziv funkcije: izvod1(2.1) tablica; n = length(X); % TABLICA KONAČNIH RAZLIKA k_razlike = zeros(n, 4); for i = 1 : n-1 k_razlike(i, 1) = Y(i+1) - Y(i); end for j = 2 : 4 for i = 1 : n-j k_razlike(i, j) = k_razlike(i+1, j-1) - k_razlike(i, j-1); end end disp([X', Y', k_razlike]); % Izvod I Njutnovog interpolacionog polinoma % y' = (k_razlike(1,1) + (q-0.5)*k_razlike(1,2) + % (3*q^2-6*q+2)*k_razlike(1,3)/6+(4*q^3-18*q^2+22*q-6)/24*krazlike(1,4))/h h = X(2) - X(1); Q = (x - X(1)) / h; yi = (k_razlike(1, 1) + (Q - 0.5) * k_razlike(1, 2) + (3 * Q^2 - 6 * Q + 2) * k_razlike(1, 3) / 6 + (4 * Q^3 - 18 * Q^2 + 22 * Q - 6) / 24 * k_razlike(1, 4)) / h; disp('Vrednost prvog izvoda funkcije f u tacki '); x disp('je: '); yiNapisati M-fajl sa funkcijom koja računa vrednost drugog izvoda tabelirane funkcije u tački koristeći diferenciranje I Njutnovog interpolacionog polinoma zaključno sa konačnim razlikama reda .
test primer
xxxxxxxxxx >>izvod2(2.3) Tablica konacnih razlika: 2.0000 7.3891 1.8388 0.4576 0.1139 0.0283 2.2222 9.2278 2.2963 0.5714 0.1422 0.0354 2.4444 11.5241 2.8678 0.7136 0.1776 0.0442 2.6667 14.3919 3.5814 0.8912 0.2218 0.0552 2.8889 17.9733 4.4726 1.1130 0.2770 0.0689 3.1111 22.4460 5.5857 1.3900 0.3459 0.0861 3.3333 28.0316 6.9756 1.7359 0.4320 0 3.5556 35.0073 8.7115 2.1679 0 0 3.7778 43.7188 10.8794 0 0 0 4.0000 54.5982 0 0 0 0 Vrednost drugog izvoda funkcije f u tacki x = 2.3000 je: yi2 = 9.9598