NUMERIČNE METODE UNIVERZITETNI ŠTUDIJ 006/07 ZAPISKI Z VAJ asist. mag. Andrej Kotar
. vaja Prijava z uporabniškim imenom Vaje. Kreiranje nove mape na My Documents\vaje\ime_priimek. Navodilo za delo s programom MATLAB 7.0.4:. Zagon programa: dvoklik ikone MATLAB 7.0.4 na namizju ali Start All Programs MATLAB 7.0.4 MATLAB 7.0.4. Začetek pisanja M-datoteke v Editor: klik ikone New M-File ali File New M-File 3. Z urejevalcem teksta napišemo program. 4. Izvajanje napisanega programa klik ikone Save and run ali Debug Save and Run 5. V oknu Command Window se izpišejo rezultati. Po zaključku dela vse napisane M-datoteke shranite v svojo mapo!
. naloga: a) Napišite program za računanje volumna krogle: START RAČUNAM VOLUMEN KROGLE ANDREJ KOTAR 6.0.006 PODAJ POLMER KROGLE R V4*π*R^3/3 IZRAČUNANI VOLUMEN JE V STOP % Program za racunanje volumna krogle % Program sprejme polmer krogle % Program vrne volumen krogle % A. Kotar, 6. 0. 006 close all; Rinput('Podaj polmer krogle: '); pi3.4596535897; V4*pi*R^3/3; fprintf(,'volumen %.8f \r',v);
b) Napišite program za računanje volumna stožca. Uporabite spodnjo formulo za izračun volumna V 3 r πh
% Vaja.a % Program za racunanje volumna krogle % Program sprejme polmer krogle % Program vrne volumen krogle % A. Kotar, 6. 0. 006 % ocisti komandno okno close all; % zapre vsa odprta graficna okna Rinput('Podaj polmer krogle: '); pi3.4596535897; V4*pi*R^3/3; fprintf(,'volumen %.8f \r',v); % test: R3.5, V79.59438003 % Vaja.b % Program za racunanje volumna stozca % Program sprejme polmer in visino stozca % Program vrne volumen stozca % A. Kotar, 6. 0. 006 close all; rinput('podaj polmer osnovne ploskve: '); hinput('podaj visino stozca: '); Vr^*pi*h/3; fprintf(,'volumen %.8f \r',v); % test: r3.5, h5, V64.408500
. vaja. naloga: a. Izračunajte naslednjo vsoto in produkt za poljuben x. 0 i i i x s 0 i i i x p b. Izračunajte vsoto prvih stotih števil. 00 i i s. naloga: Napišite program za izračun faktorjele. 3. naloga: V kartezijevem koordinatnem sistemu narišite srčnico, ki ima v polarnem koordinatnem sistemu enačbo r a(+cosϕ), a3.5 in 0 ϕ π. Funkcijo tabelirajte s korakom ϕ0.. 4. naloga: Za spodaj napisani matriki A in B naredite: a) Transponirajte matriki A in B b) Združite transponirani matriki A T in B T v novo matriko c) Narišite graf matrik A T in B T 9 9 8 7 7 6 6 5 4 4 3 3 A 5 3 5 5 5 5 3 5 B 5. naloga: Matlabova funkcija sech se izračuna po formuli +,3,5 ) / ( 4 ) ( ) ( 4 ) sech( i i x i i s x π π Če seštejemo nekaj členov (do n305), dobimo približek funkcije. Za izbrani x izračunajte vrsto s in z Matlabovim ukazom funkcijo sech(x). Vse tri vrednosti izpišite na 5 decimalnih mest.
% Vaja.a % Program izračuna vsoto in produkt vrste. % A.K., 3. 0. 006 xinput('vpisite x: '); i[::0]; a(x./i).^i; ssum(a); pprod(a); %izpis fprintf(,'vsota elementov vrste: s %0.6f \r',s); fprintf(,'produkt elementov vrste: p %0.6f \r',p); %test: x7, s50.70849, p40.08955 % Vaja.b % Program izračuna vsoto prvih stotih stevil. % A.K., 3. 0. 006 i[::00]; ssum(i); fprintf(,'vsota prvih stotih stevil: s %0i \r',s); %test: s5050 % Vaja. % Program za izračun faktorjele. % A.K., 3. 0. 006 ninput('vpisite n: '); i[::n]; faktprod(i); fprintf(,'faktorjela: n! %8i \r',fakt); %test: n, n!47900600
% Vaja.3 % Program v kartezijevem koordinatnem sistemu nariše srčnico, % ki ima v polarnem koordinatnem sistemu enačbo ra(+cos(fi)), % a3.5 in 0<fi<pi. Funkcija je tabelirana s korakom fi0.. a3.5; fi[0:0.:*pi]; % boljše bi bilo - filinspace(0,*pi,00) ra*(+cos(fi)); xr.*cos(fi); yr.*sin(fi); X[min(x),max(x)] Y[min(y),max(y)] plot(x,y,x,[0,0],'r -',[0,0],Y,'g -'); % Vaja.4 % Program transponira matriki A in B in ju nato združi. % Na osnovi transponiranih matrik A in B nariše graf. % A. Kotar, 3.. 006 close all; fprintf(,'matrika A: \r'); A[ 3 3 4 4 5 6 6 7 7 8 9 9] fprintf(,'matrika B: \r'); B[ 5 3 5; 5 5; 5 3 5 ] fprintf(,'transponirani matriki AT in BT \r'); ATA' BTB' fprintf(,'zdruzeni matriki AT in BT \r'); C[AT,BT] % risanje plot(at,bt); % Vaja.5 % Matlab funkcija sech se izračuna z vrsto. % Če seštejemo člene do n305, dobimo nek približek funkcije. % Program izračuna funkcijo sech z vrsto in Matlabovim ukazom % za vrednosti x med 0 in. clc xinput('podaj x: '); n305; i(::n); clen(-).^((i-)/).*i./((i*pi).^+4*x^); s4*pi*sum(clen); fprintf(,'x,s,sech(x) %8.5f%8.5f%8.5f\r',x,s,sech(x))
3. vaja. naloga: Izračunajte razliko dveh vektorjev nato pa dolžino izračunane razlike. Določite tudi število elementov vektorja c. a r (.,.8,3.4) b r ( 3.6,.9,0.7 ) r r r c a b dc c r c + c + c x y z. naloga: Izračunajte povprečje števil zapisanih v datoteki»podatki.txt«. 3. naloga: Napišite program, ki ustvari matriko M kot magični kvadrat reda 3. Preverite njeno magičnost in izračunajte njeno determinanto. Izračunajte matriko B, ki je inverzna matrika od matrike M. Izračunajte produkta B M E in M B E, nato pa preverite, da je EE. Za konec določite še enotsko matriko E reda 3. 4. naloga: Napišite program, ki množi matriki A in B na različne načine. A 3 5 7 8 B 3 Nato dodajte matriki A vrstico [-,3,-] in matriki B stolpec [, -3,], ter tako dopolnjeno matriko A pomnožite z enotsko matriko.
% Vaja 3. % Program za racunanje razlike in dolzine vektorjev % Program sprejme vektorja a in b % Program vrne njuno razliko, dolzino ter st. elementov % A. Kotar, 0. 0. 006 % vektor a fprintf(,'podaj komponente vektorja a: \r'); a()input('a() '); a()input('a() '); a(3)input('a(3) '); % vektor b fprintf(,'podaj komponente vektorja b: \r'); b()input('b() '); b()input('b() '); b(3)input('b(3) '); % razlika dveh vektorjev ca-b; fprintf(,'razlika vektorjev c a - b: \r'); fprintf(,'%.8f \r',c); % dolzina vektorja c dcsqrt(c()^+c()^+c(3)^); fprintf(,'dolzina vektorja c: %.8f \r',dc); % stevilo elementov vektorja c nclength(c); fprintf(,'st. elementov vektorja c: %3i \r',nc); % test: c [4.80000000,-3.70000000,.70000000] % dc 6.63475697, nc 3 %vaja3. %Povprečje stevil zapisanih v datoteki %A.K., 0. 0. 006 stload('podatki.txt'); %bere vsa števila nlength(st); ssum(st); povps/n; %povprecje fprintf(,'povprecje stevil: %0.6f \r',povp); % test: 4.000000 podatki.txt 7 9
%vaja3.3 %Matricne operacije z matriko M reda 3, ki %je zapisana kot magični kvadrat tretjega reda. % A.K., 0. 0. 006 Mmagic(3) %magični kvadrat Vsum(M) %vsota po stolpcih Rsum(M') %vsota po vrsticah dsum(diag(m)) %vsota elementov diagonale ddet(m) %determinanta matrike M Binv(M) %inverzna matrika EB*M %produkt inverzne in magične EM*B %produkt inverzne in magične Eeye(3) %enotska matrika % Vaja 3.4 % Program množi matriki A in B na različne načine. % A. Kotar, 0. 0. 006 A[ 3 5 ; 7 8] B[- ; - 3] CA*B CA'*B' CA.*B' DB*A CB'*A' CB.*A' A[A;-,3,-] % dodatna vrstica matrike A B[B,[;-3;]] % dodatni stolpec matrike B % B[B,[,-3,]'] Eeye(3) FE*A % množenje z enotsko matriko FA*E
4. vaja. naloga: Napišite program za izračun korenov kvadratne enačbe. ax + bx + c 0 Vrednosti koeficientov a, b in c preberite iz datoteke.. naloga: Napišite program, ki bo za vpisane cifre med in 5 izpisal njihova imena z besedo. 3. naloga: Izračunajte funkcijo sin(x) s pomočjo neskončne vrste sin( x ) x! 3 x 3! + 5 x 5! 7 x 7! +... na 6 decimalnih mest natančno. Vrednost funkcije sin(x), ki ste jo izračunali s pomočjo vrste primerjajte z vrednostjo izračunano z Matlab-ovo funkcijo. Na enak način s pomočjo vrste izračunajte tudi funkcijo cos(x). cos( x ) x! + 4 x 4! 6 x 6! +... 4. naloga: Narišite funkcijo signum na intervalu od - do.
%vaja4. %Izračun korenov kvadratne enačbe %A.K., 3.. 006 stload('kvadratna.txt'); nlength(st); %stevilo vrstic for i:n ast(i,); bst(i,); cst(i,3); if a0 if b0 if c0 fprintf(,'koeficienti so 0, neskoncno resitev!\r\r'); else fprintf(,'samo c je razlicen od 0, protislovje!\r\r'); else x-c/b; fprintf(,'linearna enacba!\r'); fprintf(,'x %0.6f \r\r',x); else db^-4*a*c; if d>0 x(-b+sqrt(d))/(*a); x(-b-sqrt(d))/(*a); fprintf(,'x %0.6f \r',x); fprintf(,'x %0.6f \r\r',x); else fprintf(,'kompleksni resitvi!\r'); x(-b+sqrt(d))/(*a) x(-b-sqrt(d))/(*a) kvadratna.txt 3.4 5. 0.3 0.6 4 7 0 0 0 0 0 7 x -0.0633 x -.438669 Linearna enacba! x -.50000 Kompleksni resitvi! x -0.50 +.370i x -0.50 -.370i Koeficienti so 0, neskoncno resitev! Samo c je razlicen od 0, protislovje!
%vaja4. %Uporava switch stavka %A.K., 3.. 006 iinput('vstavite stevilko od do 5: '); switch i case fprintf('ena.\r'); case fprintf('dve.\r'); case 3 fprintf('tri.\r'); case 4 fprintf('stiri.\r'); case 5 fprintf('pet.\r'); otherwise fprintf('ni stevilka med ena in pet.\r'); %vaja4.3 %Sinus izračunan z neskončno vrsto %sin(x)x/!-x3/3!+x5/5!-x7/7!+... %A.K., 3.. 006 xinput('vstavi x: '); clenx; s0; i0; while(abs(clen)>e-7) ii+; ss+clen; clen-clen*x^/((i*)*(i*+)); fprintf(,'st. clenov za izracun: %3i \r',i); fprintf(,'vrsta: sin(x) %.8f \r',s); fprintf(,'funkcija: sin(x) %.8f \r',sin(x)); %vaja4.4 %Nariše funkcijo signum na intervalu [-,] % 3.. 006 clear all; X-:0.00:; Y[]; for xx if x<0 Y[Y,-]; elseif x0 Y[Y,0]; else Y[Y,]; plot([-,],[0,0],'r-',[0,0],[-,],'r-',x,y);
5. vaja. naloga: Napišite program, ki vam iz podanih točk v ravnini izračuna dolžine stranic lika, nato pa vam določi najdaljšo izmed stranic. Koordinate točk preberite iz datoteke»podatki.txt«.. naloga: Izračunajte funkcijo sinh(x) s pomočjo neskončne vrste e sinh( x) x e x 3 5 7 n x x x x x + + + +... + +... 3! 5! 7! (n )! Za izračun faktorjele napišite samostojno funkcijo. 3. naloga: Izračunajte funkcijo exp(x) s pomočjo neskončne vrste na 6 decimalnih mest natančno: 3 4 x x x x e x + + + + +...!! 3! 4! Vrednost funkcije exp(x), ki ste jo izračunali s pomočjo vrste primerjajte z vrednostjo izračunano z Matlab-ovo funkcijo. 4. naloga: Z uporabo rekurzijske formule izračunajte integrale I n 0 x n e x dx, kjer je n0,,, Integriranje po delih nam pri n > 0 da I n x I n 0 e x 0 0 e n x 0 x n dx e e x x 0 dx e ni n
%vaja5. %Izračun najdaljše stranice lika %A.K.,.. 006 razdaljainline('sqrt((x-x)^+(y-y)^)','x','y','x','y'); stload('podatki.txt'); nlength(st); for i:n x(i)st(i,); y(i)st(i,); for i:n- d(i)razdalja(x(i),y(i),x(i+),y(i+)); d(n)razdalja(x(n),y(n),x(),y()); dmaxd(); m; for i:n if(d(i)>dmax) dmaxd(i); mi; fprintf('najdaljsa stranica je med tockama:\r'); if(mn) fprintf('x%0.6f,y%0.6f,x%0.6f,y%0.6f \r',x(n),y(n),x(),y()); else fprintf('x%0.6f,y%0.6f,x%0.6f,y%0.6f\r',x(m),y(m),x(m+),y( m+)); fprintf('razdalja %0.6f \r',d(m)); plot([x,x()],[y,y()]); podatki.txt 3 0 5 6 5 4 3 5
%vaja5. %glavni program za funkcijo sinh(x) xinput('podaj argument za sinh ') prim; sx; i3; eps while prim>eps clx^i/fakt(i); ss+cl; primcl/s; ii+; fprintf('vsota %.5f\n',s); fprintf('sinh %.5f\n',sinh(x)); fprintf('upoštevano členov : %6.0f \n',(i+)/); function ffakt(n) %racuna faktorielo pozitivnega celega števila if n<0 error(' n mora biti nenegativen') elseif n0 f; else if ceil(n)~n; f; for i:n ff*i; %vaja5.3 %Eksponentna funkcija izračunana z neskončno vrsto %A.K.,.. 006 xinput('vstavi x: '); clen; s; i; while (abs(clen)>e-6) clenclen*x/i; ss+clen; ii+; fprintf(,'vrsta: exp(x) %.8f \r',s); fprintf(,'funkcija: exp(x) %.8f \r',exp(x));
%vaja5.4a %Rekurzijska formula - nestabilen algoritem n0; I-/exp(); fprintf(' n In \r'); fprintf('%3i %6.6f \r',n,i); for n:5 I-n*I; fprintf('%3i %6.6f \r',n,i); n In 0 0.63 0.367879 0.644 3 0.0777 4 0.70893..... 7 0.0579 8-0.09454 9.55960 0-30.9395 635.04093-3969.886437 3 3308.388054 4-77400.3330 5 9785008.8358 %vaja5.4b %Rekurzijska formula - stabilen algoritem n6; I0; fprintf(' n In \r'); fprintf('%3i %6.6f \r',n-,i); for n5:-: I(-I)/n; fprintf('%3i %6.6f \r',n,i); 5 0.000000 4 0.040000 3 0.040000 0.04739..... 4 0.70893 3 0.0777 0.644 0.367879 0 0.63
6. vaja. naloga: Izračunajte funkcijo a x s pomočjo neskončne vrste na 6 decimalnih mest natančno: a x e x ln a + xln a! ( xln a) +! ( xln a) + 3! 3 ( xln a) + 4! 4 +.... naloga: V pravokotniku poznamo dolžino diagonale d in ploščino S. Dolžina diagonale je d.0 enoti, ploščina S pa je velikosti, 0., 0.0,,0-8 ploščinskih enot. Za dane vrednosti diagonale d in ploščin S izračunajte stranici a in b po formulah ( ) d + S + d S a, ( ) d + S d S b. Nato izračunajte še manjšo stranico b po formuli bs/a. 3. naloga: Izračunajte število π po Arhimedu, iz obsegov pravilnih mnogokotnikov, ki so včrtani krogu s polmerom r 0.5. Najprej računajte po formuli nato pa še po formuli S S n n ( S n) n n, S n + ( S n) S črko S n je označen obseg pravilnega n-kotnika. Iteracije začnemo s pravilnim šestkotnikom, kjer je obseg enak S n 6 r 3. n.
%vaja6. %Potenčna funkcija izračunana z neskončno vrsto %A.K., 9.. 006 ainput('vstavi a: '); xinput('vstavi x: '); clen; s; i; while (abs(clen)>e-6) clenclen*x*log(a)/i; ss+clen; ii+; fprintf(,'vrsta: a^x %.8e \r',s); fprintf(,'funkcija: a^x %.8e \r',a^x); %a5, x0, x-0 %vaja6. %Računanje stranic pravokotnika %A.K., 9.. 006 d; S; fprintf(' d S a b b \r'); for i:0 a0.5*(sqrt(d^+*s)+sqrt(d^-*s)); b0.5*(sqrt(d^+*s)-sqrt(d^-*s)); bs/a; fprintf(' %4.f %4.e %5.3f %6.4e %6.4e \r',d,s,a,b,b); S0.*S; %vaja6.3 %Število pi po Arhimedu %A.K., 9.. 006 r0.5; n6; Sn*r; Sn*r; fprintf(' n Sn Sn \r'); fprintf(' %0i %9.7f %9.7f \r',n,s,s); for i:8 S*n*sqrt((-sqrt(-(S/n)^))/); SS*sqrt(/(+sqrt(-(S/n)^))); fprintf(' %0i %9.7f %9.7f \r',*n,s,s); n*n;
7. vaja. naloga: Napišite program za reševanje spodnjega trikotnega sistema linearnih enačb L c b, kjer sta 0 0 7 L 0 b 3. 4.5 5. naloga: Napišite program za reševanje zgornjega trikotnega sistema linearnih enačb U x c, kjer sta 4 7 U 0 c 6. 0 0 9 8 3. naloga: Napišite program za reševanje spodnjega in zgornjega sistema linearnih enačb. Podatki so enaki kot pri prvih dveh nalogah. Za reševanje spodnjega in zgornjega sistema enačb zapišite samostojni funkciji. 4. naloga: Izračunajte rešitev sistema linearnih enačb x + x + 0x 3 + 3x 4 4 x + x - x 3 + x 4 3x - x - x 3 + x 4-3 -x + x + 3x 3 - x 4 4 po postopku Gaussove eliminacije. Glavni program naj kliče podprogram za izračun po Gaussovi metodi.
%vaja7. %Reševanje spodnjega trikotnega sistema linearnih enačb L[ 0 0; 0; -4.5 ] b[ 7 3 5 ] c()b()/l(,); c()(b()-l(,)*c())/l(,); c(3)(b(3)-l(3,)*c()-l(3,)*c())/l(3,3); %izpis fprintf('c() %6.3f \r',c()); fprintf('c() %6.3f \r',c()); fprintf('c(3) %6.3f \r',c(3)); %test: c()7.000, c()6.000, c(3)8.000 %vaja7. %Reševanje zgornjega trikotnega sistema linearnih enačb U[ 4 ; 0 -; 0 0-9] c[ 7 6 8 ] x(3)c(3)/u(3,3); x()(c()-u(,3)*x(3))/u(,); x()(c()-u(,)*x()-u(,3)*x(3))/u(,); %izpis fprintf('x() %6.3f \r',x()); fprintf('x() %6.3f \r',x()); fprintf('x(3) %6.3f \r',x(3)); %test: x()5.000, x().000, x(3)-.000 %vaja7.3 %Reševanje sistema linearnih enačb % podatki L[ 0 0; 0; -4.5 ] U[ 4 ; 0 -; 0 0-9] b[ 7; 3; 5] % funkcija - reševanje spodnjega trikotnega sistema cspodnja(l,b) % funkcija - reševanje zgornjega trikotnega sistema xzgornja(u,c) %test: x()5.000, x().000, x(3)-.000
% Reševanje spodnjega trikotnega sistema function cspodnja(l,b) [m,n]size(l); rlength(b); if m~n m~r error('podatki niso pravi'); for i:n for ji+:n if L(i,j)~0 error('matrika ni trikotna'); ddet(l); if d0 error('sistem nima enolične rešitve'); c(:n)0; c()b()/l(,); for i:n c(i)(b(i)-dot(l(i,:i-),c(:i-)))/l(i,i); % Reševanje zgornjega trikotnega sistema function xzgornja(u,c) [m,n]size(u); rlength(c); if m~n m~r error('podatki niso pravi'); for i:n for j:i- if U(i,j)~0 error('matrika ni trikotna'); ddet(u); if d0 error('sistem nima enolične rešitve'); x(:n)0; x(n)c(n)/u(n,n); for in-:-: x(i)(c(i)-dot(u(i,i+:n),x(i+:n)))/u(i,i);
%vaja7.4 %Resevanje sistema linearnih enačb - Gauss A[ 0 3; - ; 3 - - ; - 3 - ]; b[4-3 4]'; A[A,b]; %podprogram - reševanje z Gaussovo metodo xgauss(a); [n,m]size(a); for i:n fprintf('x(%i) %6.3f \r',i,x(i)); %test: x()-, x(), x(3)0, x(4) %podprogram - Gaussova metoda function xgauss(a) [n,m]size(a); %postopek primitivne Gaussove eliminacije for i:n- for ji+:n fa(j,i)/a(i,i); %tvorba zgornjega trikotnega sistema A(j,i:n+)A(j,i:n+)-f*A(i,i:n+); %resevanje zgornjega trikotnega sistema x(n)a(n,n+)/a(n,n); for in-:-: sa(i,n+); for ji+:n ss-a(i,j)*x(j); x(i)s/a(i,i);
8. vaja. naloga: Izračunajte rešitev sistema linearnih enačb x - x + x 3 - x 4-8 (6) x - x + 3x 3-3x 4-0 (0) x + x + x 3 - (-) x - x + 4x 3 + 3x 4 4 (8) po Gaussovi metodi z delnim pivotiranjem. Program naj kliče podprogram»sistem_lin_enacb«, obravnavanim na predavanjih.. naloga: Izračunajte rešitev sistema linearnih enačb po Gauss-Jordanovi metodi. x + x + 0x 3 + 3x 4 4 x + x - x 3 + x 4 3x - x - x 3 + x 4-3 -x + x + 3x 3 - x 4 4 3. naloga: Izračunajte rešitev sistema linearnih enačb v prvi nalogi po LU metodi. Uporabite Matlabovo funkcijo linsolve. Zatem naredite še dekompozicijo matrike A z Matlabovo funkcijo lu. 4. naloga Izračunajte rešitev sistema linearnih enačb po metodi Cholesky. 6x + 5x + 55x 3 8 5x + 55x + 5x 3 70 55x + 5x + 979x 3 50 5. naloga Rešite četrto nalogo z uporabo Matlab-ovih funkcij.
%vaja8. %Reševanje sistema s funkcijo sistem_lin_en A[ - - - 3-3 0-4 3 ]; b[-8-0 - 4; 6 0-8]' % dve desni strani pivot; % pivot0, pivotiranje izključeno [X,D,L,U,pog_st,P]sistem_lin_enacb(A,b,pivot) %[X,D]sistem_lin_enacb(A,b); disp(' Resitev sistema enacb...') disp(x) % Resitev sistema enacb... % -7.0000 -.5000 % 3.0000 -.5000 %.0000 3.0000 %.0000 -.0000 function [X,D,L,U,pog_st,P]sistem_lin_enacb(A,b,pivotiranje) %A matrika koeficientov %b matrika desnih strani %X rešitev sistema enačb if (nargin) % pivotiranje je izključeno pivotiranje0; if(nargin3 & nargout5) % št. vhodnih in izhodnih argumentov warning(' L U razcep bo lahko neuporaben') BA; A[A,b]; % razširjena matrika A [m,n]size(a); % m št. vrstic, n št. stolpcev Peye(m); D; % začetna vrednost
for i:m- % indeks vrstice % delno pivotiranje if pivotiranje [e,k]max(abs(a(i:m,i))); kk+i-; if k~i % zamenjava vrstic pva(i,i:n); A(i,i:n)A(k,i:n); A(k,i:n)pv; DD*(-); % sprememba predznaka Peye(m); pvp(:,k); P(:,k)P(:,i); P(:,i)pv; PP*P; if(abs(a(i,i))<.e-0) % pivotni element je enak 0 error('matrika koeficientov je singularna') % eliminacija - tvorba zgornjega trikotnega sistema for ji+:m L(j,i)A(j,i)/A(i,i); A(j,i)0; A(j,i+:n)A(j,i+:n)-L(j,i)*A(i,i+:n); DD*prod(diag(A)); % determinanta x(:m)0; L[L,x']+eye(m); % sestavljanje matrike L UA(:m,:m); % opustitev desne strani % reševanje zgornjega trikotnega sistema z več desnimi stranmi for km+:n % k števec desnih strani for im:-: x(i)(a(i,k)-dot(a(i,i+:m),x(i+:m)))/a(i,i); if km+ Xx'; %postavim rešitev kot stolpec else X[X,x']; %dodajam stolpce if nargout>5 pog_stcond(b,); else pog_st0;
%vaja8. %Reševanje sistema po Gauss-Jordanovi metodi A[ 0 3-3 - - - 3 - ]; b[4-3 4]'; A[A,b]; [n,m]size(a); for i:n %normiranje A(i,i:m)A(i,i:m)/A(i,i); for j:n if ij continue %eliminacija A(j,i:m)A(j,i:m)-A(j,i)*A(i,i:m); disp(a) for i:n fprintf('x(%i) %6.3f \r',i,a(i,n+)) %test: x()-, x(), x(3)0, x(4) %vaja8.3 %Resevanje sistema linearnih enačb LU metoda %podatki A[ - - - 3-3 0-4 3 ]; b[-8-0 - 4]'; %podprogram - reševanje z LU metodo xlinsolve(a,b); [n,m]size(a); %izpis for i:n fprintf('x(%i) %6.3f \r',i,x(i)) %dekompozicija matrike A [L,U,P]lu(A) %test: x()-7, x()3, x(3), x(4)
%vaja8.4 %Reševanje po metodi Choleskega clear all; A[ 6 5 55; 5 55 5; 55 5 979 ]; b[8 70 50]'; nlength(a); %razcep matrike v spodnjo in zgornjo trikotno matriko Uzeros(n); for i:n %določa stolpec for ji:n %določa vrstico if ij U(i,i)sqrt(A(i,i)-dot(U(:i-,i),U(:i-,i))); else U(i,j)(A(i,j)-dot(U(:j-,i),U(:j-,j)))/U(i,i); U U'*U %rešujemo spodnji trikotni sistem Lcb ->cb/l LU' c()b()/l(,); for i:n c(i)(b(i)-dot(l(i,:i-),c(:i-)))/l(i,i); c %rešujemo zgornji trikotni sistem Uxc -> xc/u x(:n)0; for in:-: x(i)(c(i)-dot(u(i,i+:n),x(i+:n)))/u(i,i); x %test: x(), x()8, x(3)- %vaja8.5 %Reševanje po metodi Choleskega %podatki A[ 6 5 55; 5 55 5; 55 5 979 ]; b[8 70 50]'; %razcep v spodnjo in zgornjo trikotno matriko Uchol(A) LU' L*U %reševanje spodnjega in zgornjega sistema cl\b xu\c %test: x(), x()8, x(3)-
9. vaja. naloga: Z metodo konjugiranih gradientov za reševanje pozitivno definitnih simetričnih sistemov rešite sistem enačb. 4x - x - x 4 0 -x + 4x - x 3 - x 5 5 -x +4x 3 - x 6 0 -x +4x 4 x 5 6 -x - x 4 +4x 5 - x 6 - -x 3 - x 5 + 4x 6 6. naloga Izračunajte rešitev sistema linearnih enačb 6x + 3x - x 3 - x + 3x - x 3-7 -x - x + 3x 3 7 z Gauss-Seidlovo iterativno metodo. 3. naloga: Za spodnjo tabelo izračunajte Newtonov interpolacijski polinom. Nato izračunajte vrednost polinoma pri x 4...3.07.4.4 3.67.73 4.9.04 5.96.3 6.73-0.4
4. naloga: Z uporabo inverzne interpolacije po Newtonovi metodi izračunajte ničlo tabelirane funkcije. -0. 0.67 0.4 0.38.5-0.96.48 -.8
%vaja9. %Reševanje diagonalno dominantnega sistema %po Gauss-Seidelovi iterativni metodi clc, clear all A[ 6 3-3 - - - 3 ]; b[- -7 7]'; nlength(a); x(:n)0; xnx; napaka.; while napaka>.e-4 for i:n xn(i)(b(i)-dot(a(i,:i-),xn(:i-))-dot(a(i,i+:n),x(i+:n)))/a(i,i); napakanorm(x-xn); xxn; fprintf('%8.5f%.5f%.5f%7.8f\n',x,napaka) %test: x(), x()-, x(3) %vaja9.3 %Newtonova interpolacijska metoda close all; x[.3.4 3.67 4.9 5.96 6.73] y[.07.4.73.04.3-0.4] cpolynewtkoef(x,y) xtx():0.0:x(); nlength(xt); yt[]; for i:n yt(i)polynewtvred(c,x,xt(i)); plot(xt,yt,x,y,'b+'); %vrednost polinoma v točki x0 x0input('podajte x0: '); y0polynewtvred(c,x,x0) %test: y(4.).00 %Izračun koeficientov interpolacijskega polinoma function kpolynewtkoef(x,y) nlength(x); f(:,)y'; for j:n+ for i:n-j+ f(i,j)(f(i+,j-)-f(i,j-))/(x(i+j-)-x(i)); kf(,:);
%Izračun vrednosti polinoma function ppolynewtvred(k,x,x) nlength(k); pk(n); for in-:-: pk(i)+(x-x(i))*p; %vaja9.4 %Inverzna interpolacija close all; y[-0. 0.4.5.48]; x[ 0.67 0.38-0.96 -.8]; cpolynewtkoef(x,y); xtx():0.0:x(); nlength(xt); yt[]; for i:n yt(i)polynewtvred(c,x,xt(i)); plot(xt,yt,x,y,'b+'); %vrednost polinoma v točki x0 x00; y0polynewtvred(c,x,x0) %test: x00.770
0. vaja. naloga: Za spodnjo tabelo izračunajte po Aitkenovi metodi vrednost polinoma pri x 4...3.07.4.4 3.67.73 4.9.04 5.96.3 6.73-0.4. naloga: Aproksimirajte funkcijsko tabelo x y(x) -.30 0.6 -.6 0.59-0.98 0.65-0. 0.7 0.8 0.88.5 0.96.34.08.36.0 s premico f(x,a,b)a + b x v smislu najmanjših kvadratov. 3. naloga: Aproksimirajte funkcijsko tabelo iz druge naloge s premico. Uporabite Matlab-ovo lastnost, da reši predoločen sistem enačb po metodi najmanjših kvadratov.
4. naloga: Izvedite nelinearno aproksimacijo z Matlab-ovo funkcijo lsqcurvefit(f,r 0,x,y). 5. naloga: Aproksimirajte funkcijsko tabelo v drugi nalogi z nelinearno funkcijo f(x,a,b)a e bx.
%vaja0. %Aitkenova interpolacijska metoda x[.3.4 3.67 4.9 5.96 6.73] y[.07.4.73.04.3-0.4] x0input('podajte x0: '); [p,dp]aitken(x,y,x0) %test: y(4.).00 napaka0.0056 %Funkcija za Aitkenovo interpolacijsko metodo function [p,dp]aitken(x,y,x) nlength(x); a(:,)y; a(:,n+)x-x; for j:n for ij:n a(i,j)(a(j-,j-)*a(i,n+)-a(i,j-)*a(j-,n+))/(x(i)-x(j-)); a pa(n,n); %vrednost polinoma if nargout dpa(n,n)-a(n-,n-); %ocena napake ; %vaja0. %primer aproksimacije s premico clear all; x[-.3 -.6-0.98-0. 0.8.5.34.36] y[ 0.6 0.59 0.65 0.7 0.88 0.96.08.0] nlength(x); hinline('x.^0','x'); hinline('x','x'); vh(x); vh(x); a(,)dot(v,v); a(,)dot(v,v); b()dot(y,v); a(,)a(,); a(,)dot(v,v); b()dot(y,v); a b rlinsolve(a,b') xvx():0.0:x(); yvr()*h(xv)+r()*h(xv); plot(xv,yv,x,y,'r+') %test: r0.800 r0.7
%vaja0.3 %primer aproksimacije s premico %sistem veliko enačb za malo neznank reši Matlab %v smislu metode najmanjših kvadratov clear all; x[-.3 -.6-0.98-0. 0.8.5.34.36] y[ 0.6 0.59 0.65 0.7 0.88 0.96.08.0] hinline('x.^0','x') hinline('x','x') A[h(x') h(x')] by' ra\y' xvx():0.0:x(); yvr()*h(xv)+r()*h(xv); plot(xv,yv,x,y,'r+') %vaja0.4 % primer nelinearne aproksimacije clear all; x[-.3 -.6-0.98-0. 0.8.5.34.36] y[ 0.6 0.59 0.65 0.77 0.88 0.96.08.0] xvx():0.0:x(); r0[0.7,0.6,-0.03,0.08,0.54] finline('r()+r().*x+r(3).*x.*x+r(4)*exp(r(5).*x.*x)','r','x') [r,raz]lsqcurvefit(f,r0,x,y) yvf(r,xv); plot(xv,yv,x,y,'ro') %vaja0.5 %primer aproksimacije z eksponentno funkcijo clear all; x[-.3 -.6-0.98-0. 0.8.5.34.36] y[ 0.6 0.59 0.65 0.7 0.88 0.96.08.0] lnylog(y) nlength(x); hinline('x.^0','x'); hinline('x','x'); vh(x); vh(x); a(,)dot(v,v); a(,)dot(v,v); b()dot(lny,v); a(,)a(,); a(,)dot(v,v); b()dot(lny,v); a b rlinsolve(a,b') xvx():0.0:x(); yvexp(r())*exp(r()*h(xv)); plot(xv,yv,x,y,'r+')