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