Teht. 2 ======= Seuraavassa esiintyy vuoroin Euler tai meuler, koska euler on "semivarattu". Ensin editoidaan dy-funktio tiedostoon f7t2.m ja katsotaan: >> type f7t2 function yp=f7t2(t,y) yp=-5*(t.^4).*(y.^2); Testataan: >> f7t2(1,[1;1]) ans = -5 -5 Toimii! >> hold off >> clg >> m=16;hold on;[T,Y]=meuler('f7t2',0,5,1,m);plot(T,Y);[T',Y'],plot(T,Y,'ow'); ans = 0 1.0000 0.3125 1.0000 0.6250 0.9851 0.9375 0.7537 1.2500 0.0680 1.5625 0.0504 1.8750 0.0267 2.1875 0.0129 2.5000 0.0069 2.8125 0.0040 3.1250 0.0024 3.4375 0.0016 3.7500 0.0010 4.0625 0.0007 4.3750 0.0005 4.6875 0.0004 5.0000 0.0003 Euler räjähti, kun m=11, ja antaa järkevää, kun m=12. ---- RUNGE-KUTTA ---- >> m=12;[T,Y]=rk4('f7t2',0,5,1,m);plot(T,Y);[T',Y'] ans = 1.0e+20 * 0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -1.9098 0.0000 -Inf 0.0000 -Inf 0.0000 -Inf 0.0000 -Inf 0.0000 -Inf 0.0000 -Inf >> hold on;m=13;[T,Y]=rk4('f7t2',0,5,1,m);plot(T,Y);plot(T,Y,'o'),[T',Y'] ans = 0 1.0000 0.3846 0.9913 0.7692 0.7853 1.1538 0.3181 1.5385 0.0717 1.9231 0.0323 2.3077 0.0144 2.6923 0.0069 3.0769 0.0036 3.4615 0.0020 3.8462 0.0012 4.2308 0.0007 4.6154 0.0005 5.0000 0.0003 >> title('RK4, m=13'); >> print -dps >> t=linspace(0,5);y=1./(1+t.^5); >> figure >> plot(t,y) >> plot(t,y,'r') >> figure(1) >> hold on >> plot(t,y,'r') >> title('RK4, m=13 ja tarkka ratkaisu'); >> print -dps Tämä tehtävä ei tehnyt oikeutta Runge-Kuttalle, siinä RK selviytyi yhtä pykälää huonommin "jyrkkyystestistä":