Björn Lindenberg 4-- me_bli@it.th.se Laboration 3 del
Icelinjära evationssystem Uppgift : Van der Waals tillståndlag a p + = v ( v b) RT besriver relationen mellan trycet p, temperaturen T och volymen v i reala gaser, och där a och b är experimentellt bestämda onstanter. R är den allmänna gasonstanten. För givna värden på T=3 och på p=, och sulle motsvarande värden på v bestämmas. Resultaten sulle jämföras med värden genom den ideala gaslagen pv = RT. Utförande: Newtons metod v + = v z, med z f ( v ) = f ( v ) användes som den itererande algoritmen för att finna ett nollställe till a f ( v ) = p + ( v b) RT. v Som begynnelsevärde för iterationen användes RT v = p, vilet an anses ligga nära det orreta värdet och en maxtolerans på e-6 på normen av z. I MATLAB användes symbolis hantering av funtionerna för att underlätta deriveringen och hanterandet av algoritmen. Resultat: Beränade värden på v och v för olia värden p an ses i tabellen nedan. Volym\ Tryc p= p= p= v 4.56.3545.795 v 4.66.466.46 Den relativa sillnaden mellan van der Waals lag och den ideala gaslagen blir påtaglig vid högt tryc och liten volym.
Koden: Upp.m syms v R=.854; a=3.59; =; b=.467; T=3; for p=[,,] f=(p+a/v^)*(v-b)-r*t; fprim=diff(f,'v'); v=r*t/p; v=v; z=subs(fprim,v,v')\subs(f,v,v'); while norm(z,inf)>e-6 v=v-z; z=subs(f,v,v')/subs(fprim,v,v'); v v Uppgift : Ett icelinjärt evationssystem av fyra oända t, w t, w, gavs av w + w 3 w t w t w t + w t 3 + w t + w t = = = =,, / 3,. Lösningar sulle bestämmas där [, ] t. Utförande: Newtons metod utöat för system av evationer användes med w + w wt + wt f ( t, t, w, w ) = +, wt wt / 3 3 3 wt + wt i
så att f x) = söes. Den itererande algoritmen srivs som x + = x z, där z bestäms genom matrisevationen J f =. Som startvärde användes.5,.5,, ) och ( ( x ) z f ( x ) x = ( z en maxtolerans e- på normen av. En MATLAB funtion Upp med inbyggda subfuntioner f(x) och f_jaobian(x) returnerade den approximerade lösningen. Resultat: Som lösning erhölls värden på -.5774 och.5774 för och för viterna och w. ti w Symmetrin med avsee på t och t gjorde att olia tecen unde erhållas för t-variablerna beroe på startvetorn. Koden: Upp.m function x=upp x=[3,5,9,7]'; F=feval(@f_jaobian,x); f=feval(@f,x); z=f\f; =; while norm(f)>e- x=x-z; =+; F=feval(@f_jaobian,x); f=feval(@f,x); z=f\f; function f=f(x) f=zeros(4,); f()=x(3)+x(4)-; f()=x(3)*x()+x(4)*x(); f(3)=x(3)*x()^+x(4)*x()^-/3; f(4)=x(3)*x()^3+x(4)*x()^3; function fprim_x=f_jaobian(x); fprim_x=[,,, ; x(3), x(4), x(), x(); *x(3)*x(), *x(4)*x(), x()^, x()^; 3*x(3)*x()^, 3*x(4)*x()^, x()^3, x()^3];
Bratuproblemet Randvärdesproblemet u = λe u() = u() =, u, < t <, λ >, har för λ = exat två lösningar. Uppgift 3: En finita differensmetod med n evidistanta noder sulle tillämpas på problemet för n=,3,7 och 5. Utförande: Disretiseringen över nätet gav upphov till icelinjärt system f ( u) = Au + h( u) =, där u u e u u O e u =, A =, h( u) = h. M O O M u u n n e Lösningen beränades med en maxtolerans på e-8 för normen på z genom Newtons metod: u + = u z, ( u ) z f ( u ) J f =, med J f ( u ) = A + h ( u ), h ( u ) = diag( h( u )). Startvärdet för iterationen sattes till u = och sevensen av lösningar för olia antal noder plottades.
Resultat: Lösningsurvorna med linjärinterpolation och en graf av den disreta lösningen för n=5 an ses i figur och..6 Finita differensmetoden n=,3,7,5.6 Finita differensmetoden n=5.4.4.... u.8 u.8.6.6.4.4.....3.4.5.6.7.8.9 Figur : Sevens av lösningar för olia n. t...3.4.5.6.7.8.9 t Figur : Lösningsurvan för 5 evidistanta noder. Koden: Upp3.m for n=[,3,7,5,] =; h=/(n+); u=zeros(n,); s=ones(n,); A=spdiags([-s,*s,-s],-:,n,n); H=-h^*exp(u); F=A+spdiags(H,,n,n); f=a*u+h; z=f\f; while norm(z,inf)>e-8 u=u-z; =+; H=-h^*exp(u); F=A+spdiags(H,,n,n); f=a*u+h; z=f\f; u=[;u;]; t=:h:; figure(); plot(t,u,'--'); hold on;
hold off; title('finita differensmetoden n=,3,7,5','fontsize',6); xlabel('t','fontsize',6); ylabel('u','fontsize',6); figure(); plot(t,u,'--') title('finita differensmetoden n=5','fontsize',6); xlabel('t','fontsize',6); ylabel('u','fontsize',6); Uppgift 4a: En metod allad Collocation method sulle användas för Bratuproblemet med n=3,4,5,6 noder (evidistanta) vid t i = ih, h = och basfuntioner ( n + ) n v n ( t) = t( t) t, så att n n u( t) v( t) = x t( t) t = t( t)( x + x t + L + x t ). n n n Utförande: Insättning av v(t) i evationen gav för de olia noderna n stycen icelinjära evationer, som löstes med Newton metoden genom: v ) f ( x ) = v ( t ) + e ( t i = f ( x) =, i i x + = x z, Jf ( x ) z = f ( x ). Symbolis hantering av de oända underlättade vid beräningen av Jaobianen och genomgåe ettor för alla n. Resultat: Approximationen förbättrades inte nämnvärt av ytterligare tillägg av basfuntioner utöver n=3 vilet antyder att basfuntionernas aratäristi för lägre n är väl anpassade till ena lösningens natur. En jämförelse mellan n=3 och n=6 an ses i figur 3, tillsynes ligger de nära varandra. x gavs
.6 Collocation method n=3 och n=6.4.. v.8.6.4....3.4.5.6.7.8.9 Figur 3: Koefficienter för basfuntioner av lägre grad dominerar t Uppgift 4b: Bratuproblemet har för λ = exat två lösningar, den andra mer svårtillgängliga lösningen sulle finnas med ledtråden om att båda lösningarna har en inledande positiv derivata för små t. Utförande: Vid små t domineras derivatan till ansatsen av x och x och där första ordningen av t till lia stor del påveras av de båda oefficienterna med motsatt tecen. Startvärdet för iterationen ansattes därför till x =, x =, vilet sulle göra derivatan positiv för små t. Resultat: Den andra lösningen hittades med ovanståe iterationsstart, förvisso med andra oefficientvärden. Lösningen an ses i figur 4 för olia n. Lösningen antar mycet större värden än föregåe urva. 5 4 Collocation method n=3 n=4 n=6 3 v -...3.4.5.6.7.8.9 Figur 4: En ansats av fler basfuntioner visar att metoden onvergerar mot en annan lösning, en lösning som antar mycet större värden under intervallet. t Koden: Upp4.m
syms x x x3 x4 x5 x6 t X=[x,x,x3,x4,x5,x6]; dt=linspace(,,); vtot=[]; for n=[3,4,6]; h=/(n+); v=; for i=:n v=v+x(i)*t^(i-); v=v*t*(-t); s=v; vbis=diff(v,'t',); ev=exp(v); ti=h:h:-h; f=subs(vbis+ev,t,ti'); x=[]; for i=:n x=[x,x(i)]; F=jacobian(f,x); x=zeros(n,); x()=; x()=; z=e3*x; while norm(z,inf)>e-9 z=subs(f,x,x')\subs(f,x,x'); x=x-z; v=subs(v,x,x'); v=subs(v,t,dt'); vtot=[vtot,v]; plot(dt,vtot(:,),dt,vtot(:,),'r',dt,vtot(:,3)); title('collocation method','fontsize',6) leg('n=3','n=4','n=6'); xlabel('t','fontsize',6); ylabel('v','fontsize',6,'fontweight','bold'); Naturonstanten Pi Det reella talet π = 3.459653... an genom arctangens uttrycas med en integral 4 + x dx = π. Integralens värde sa approximeras med numeris integration. Uppgift 5a: Med hjälp av metoder baserade på polynominterpolation får man för olia antal interpolationsnoder formler för approximativa värden på integralen under intervallet. För numeris integration används främst tre formler motsvarande antalet noder n=,,3:
a + b R ( f ) = ( b a) f ger mittpuntsformeln, b a T ( f ) = ( f ( a) + f ( b) ) ger trapetsapproximationen, och b a a + b S ( f ) = f ( a) + f ( b) + 4 f ger Simpsons formel, 6 där f är integranden. Dess metoder sa användas för att approximera värdet på pi genom ovanståe integral. Metodernas precision sa jämföras och felet e(h) som en funtion av steglängden h sa uppsattas. Utförande: Steglängden varierades genom halveringar /, /4, /8, /6. Symbolis p hantering användes. Felet uppsattades vara en asymptotis funtion e( h) ch med log e( h) / e( h / q) p för två beränade värden för h och h/q. log q Resultat: I tabellen nedan ses felet för respetive metod och steglängd. Metod\ h h=/ h=/4 h=/8 h=/6 Mittpunts..8.5.3 3.55e-4 Trapets..46.4.6 6.54e-4 Simpsons.46e-5.53e-7.365e-9 3.6957e- Simpsons formel visar en remarabel precision även för stora h. Trapetsapproximationen, n=, uppvisar däremot sämre egensaper än mittpuntsformeln, n=, för den givna integranden. Insättning av värden ifrån tabellen visar att felfuntionen för mittpuntsformeln och trapetsapproximation an srivas som e( h).83h och motsvarande uttryc för 6 Simpsons formel blir e( h).6h. Redution av steglängden tappar sin effetivitet när masinprecisionen ommer in som en bidragande del av beräningarna. Uppgift 5b: MATLABs inbyggda rutiner för numeris integration sulle användas och tillförlitligheten i ansatt tolerans sulle utredas. Resultat: Funtionerna quad ( Simpson ) och quadl ( Lobatto ) användes med olia toleranser. De angivna rutinerna uppfyllde varje toleransrav. Koden: Upp5.m syms x h=/6; f=4/(+x^); dx=:h:;
% R(f) I=; for i=:length(dx)- I=I+(dx(i+)-dx(i))*subs(f,x,(dx(i+)+dx(i))/); R=abs(I-pi) % T(f) I=; for i=:length(dx)- I=I+(dx(i+)-dx(i))/*(subs(f,x,dx(i+))+subs(f,x,dx(i))); T=abs(I-pi) % S(f) I=; for i=:length(dx)- I=I+(dx(i+)- dx(i))/6*(subs(f,x,dx(i+))+subs(f,x,dx(i))+4*subs(f,x,(dx(i+)+dx(i))/)); S=abs(I-pi) f=inline('4./(+x.^)'); Quad_Simpson=quad(f,,,e-)-pi Quad_Lobatto=quadl(f,,,e-)-pi Uppgift 6a: Föregåe steg i uppgift 5a sulle utföras för integralen 4 x log( x) dx =. 9 Utförande: För behandling av integrandens värde för x= beränades gränsvärdet analytist log( x) " " lim x log( x) = lim = l' Hospital x x / x " " / x / = lim = lim( ) x =. x 3/ / x x Gränsvärdet substituerade sedan integrandens numerisa beräning vid den ritisa punten. Resultat: I tabellen nedan ses felet för respetive metod och steglängd. Metod\ h h=/ h=/4 h=/8 h=/6 Mittpunts..67.36.64.9 Trapets..994.863.364.5 Simpsons.487.97.78.3 Ingen av metoderna uppvisar snabb onvergens mot det exata värdet och mittpuntsformeln genererar bäst värden för de givna steglängderna. En uppsattning av felet beroe av h. genom tabellvärden blir för mittpuntsformeln e M.63h det vill säga felet är hyfsat linjärt för ansatta steglängder. Motsvarande uppsattning för trapetsapproximationen och..3 Simpsons formel an srivas e T.46h respetive e S.h.
Uppgift 6b: MATLABs inbyggda rutiner för numeris integration sulle användas. Tillförlitligheten i ansatt tolerans sulle utredas. Resultat: Funtionerna quad ( Simpson ) och quadl ( Lobatto ) användes med olia toleranser. Den sicade toleransen till quad användes inte sarpt, den angivna toleransens storlesordning användes doc orret, t ex gav en tolerans på e-7 ett fel på 5.376e-7. Lobatto funtionen quadl larade doc varje toleransrav sarpt. Koden: Upp6.m syms x f=sqrt(x)*log(x); n=; h=/n; dx=:h:; % R(f) I=; for i=:n I=I+(dx(i+)-dx(i))*subs(f,x,(dx(i+)+dx(i))/); R=abs(I+4/9) % T(f) I=(dx()-dx())/*(subs(f,x,dx())); for i=:n I=I+(dx(i+)-dx(i))/*(subs(f,x,dx(i+))+subs(f,x,dx(i))); T=abs(I+4/9) % S(f) I=(dx()-dx())/6*(subs(f,x,dx())+4*subs(f,x,(dx()+dx())/)); for i=:n I=I+(dx(i+)- dx(i))/6*(subs(f,x,dx(i+))+subs(f,x,dx(i))+4*subs(f,x,(dx(i+)+dx(i))/)); S=abs(I+4/9) Quad_Simpson=quad(@fx,,,e-7)+4/9 Quad_Lobatto=quadl(@fx,,,e-5)+4/9 fx.m function val=fx(x) ind = find(x>e-); val = zeros(size(x)); val(ind) = sqrt(x(ind)).*log(x(ind));