9. laborgyakorlat
Numerikus számítások fizikusoknak
Contents
clear all, close all
Newton-iteráció egyenletrendszerre
close all F=@(x)[x(1).^2+x(2)-5;x(1)+x(2).^2-3] J=@(x)[2*x(1),1;1,2*x(2)]; x=[1;1]; hold on for i=1:10 x=x-J(x)\F(x) plot(x(1),x(2),'ro') axis([-3,3,-3,3]) pause end hold off
F = @(x)[x(1).^2+x(2)-5;x(1)+x(2).^2-3] x = 2.6667 0.6667 x = 2.0788 1.0242 x = 2.0016 0.9995 x = 2.0000 1.0000 x = 2.0000 1.0000 x = 2.0000 1.0000 x = 2.0000 1.0000 x = 2.0000 1.0000 x = 2.0000 1.0000 x = 2.0000 1.0000
Implicit függvények ábrázolása segíthet
ezplot('x^2+y-5') hold on ezplot('x+y^2-3')
Nemlineáris egyenletrendszerek megoldása (optimization toolbox)
Az fsolve parancs alkalmazása
F=@(x)[x(1).^2+x(2)-5;x(1)+x(2).^2-3] [x,f,flag]=fsolve(F,[0 1]) fsolve(F,[0 1],optimset('TolFun',10^-15,'TolX',10^-10,'MaxIter',600))
F = @(x)[x(1).^2+x(2)-5;x(1)+x(2).^2-3] Optimization terminated: first-order optimality is less than options.TolFun. x = 2.0000 1.0000 f = 1.0e-006 * 0.0070 0.3399 flag = 1 Optimization terminated: first-order optimality is less than options.TolFun. ans = 2 1
Interpolációs feladatok megoldása
interp1, polyfit, polyval, polyder, polyint parancsok
Egyváltozós függvények interpolációja
interp1 - alapértelmezés szakaszonkét lineáris 'spline' - szakaszonként spline 'pchip' - alakmegőrző
close x=[0,1,2,4,5,6] y=[0,3,5,1,3,2] plot(x,y,'ro') interp1(x,y,4.5) xx=0:0.1:6; yy=interp1(x,y,xx); hold on plot(xx,yy,'b-') close x=[0,1,2,4,5,6] y=[0,3,5,1,3,2] plot(x,y,'ro') interp1(x,y,4.5,'spline') xx=0:0.1:6; yy=interp1(x,y,xx,'spline'); hold on plot(xx,yy,'b-') close x=[0,1,2,4,5,6] y=[0,3,5,1,3,2] plot(x,y,'ro') interp1(x,y,4.5,'pchip') xx=0:0.1:6; yy=interp1(x,y,xx,'pchip'); hold on plot(xx,yy,'b-')
x = 0 1 2 4 5 6 y = 0 3 5 1 3 2 ans = 2 x = 0 1 2 4 5 6 y = 0 3 5 1 3 2 ans = 1.7813 x = 0 1 2 4 5 6 y = 0 3 5 1 3 2 ans = 2
Egyváltozós polinomillesztés
polyfit, polyval
close x=[0,1,2,4,5,6] y=[0,3,5,1,3,2] plot(x,y,'ro') xx=0:0.1:6; hold on for i=1:5 polinom=polyfit(x,y,i); yy=polyval(polinom,xx); plot(xx,yy,'b-') pause end
x = 0 1 2 4 5 6 y = 0 3 5 1 3 2
polider, polyint parancsok
polyder([1,0,0]) polyint([1,0,0])
ans = 2 0 ans = 0.3333 0 0 0