1. laborgyakorlat

Numerikus számítások fizikusoknak

Contents

clear all, close all

A "számológép üzemmód" használata

A készenléti jel után írjuk a parancsokat, majd enter-t nyomunk. Több parancsot vesszővel választunk el.

2+4*5^2
ans =
   102
log(3), sin(1), tan(0)
ans =
   1.098612288668110
ans =
   0.841470984807897
ans =
     0

A Help-ben megtaláljuk az egyes parancsok használatának módját. Hívása a "help parancsnév" vagy a "doc parancsnév" módon történik, ill. elérhető a menün keresztül is. A doc parancs részletesebb dokumentációt ad.

help sin
 SIN    Sine of argument in radians.
    SIN(X) is the sine of the elements of X.
 
    See also ASIN, SIND.

    Overloaded methods:
       sym/sin
       distributed/sin

    doc sin
      

A megjelenített számformátum beállítása a format paranccsal történik. A short formátum az alapértelmezés.

format long, pi
format long e, pi
format rat, pi
format short, pi
ans =
   3.141592653589793
ans =
    3.141592653589793e+000
ans =
     355/113   
ans =
    3.1416

Értékadás a = jellel történik. Változó számmal nem kezdődhet, és számot, kis- és nagy betűt (ezeket megkülönböztetjük), ill. _ jelet tartalmazhat csak.

t=12, v=20, s=v*t
t =
    12
v =
    20
s =
   240

A pontosvesszővel lezárt parancs eredménye nem jelenik meg a kijelzőn.

t=12; v=20; s=v*t
s =
   240

Megjegyzések a % jel után, vagy a külön sorba írt %{ %} jelek közé írhatók.

g=10 % A gravitációs gyorsulás megadása.
%{
Most számoljuk ki g négyzetét!
%}
g^2
g =
    10
ans =
   100

A parancsablak törlése (a változókat nem törli).

clc % clear command window

A korábban kiadott parancsok elérhetők a felfelé nyíllal. Egy parancs kezdőkaraktereinek beírása majd a felfelé nyíl megnyomása az adott kezdőkarakterrel rendelkező korábbi parancsokat sorolja fel. A definiált változók a Workspace ablakban láthatók, onnét áthúzhatók a parancsablakba, vagy szerkeszthetők is. A parancssorból a whos parancsot használhatjuk.

whos
  Name      Size            Bytes  Class     Attributes

  ans       1x1                 8  double              
  g         1x1                 8  double              
  s         1x1                 8  double              
  t         1x1                 8  double              
  v         1x1                 8  double              

Változó törlése a clear paranccsal.

clear v % v változó törlése
whos % Hogy lássuk, hogy már hiányzik a v.
clear all % minden változó törlése
  Name      Size            Bytes  Class     Attributes

  ans       1x1                 8  double              
  g         1x1                 8  double              
  s         1x1                 8  double              
  t         1x1                 8  double              

A Matlabban átdefiniálhatjuk a beépített függvényeket is (!). A which paranccsal ellenőrizhetjük, hogy egy függvény beépített függvény-e.

which sin
sin=4 % Ezek után a sin(0) parancs már hibát adna.
which sin
clear sin % A sin változót törölve visszaáll a beépített függvénydefiníció.
built-in (C:\Program Files\MATLAB\R2008a\toolbox\matlab\elfun\@double\sin)  % double method
sin =
     4
sin is a variable.

Mátrixok és vektorok megadása. ; sortörés, sorok elemei között space vagy vessző.

A=[1,2,3,4], B=[1;2;3;4], C=[1,2;3,4]
A =
     1     2     3     4
B =
     1
     2
     3
     4
C =
     1     2
     3     4

Vektor megadása a : jelöléssel

x=1:4, y=1:2:10
x =
     1     2     3     4
y =
     1     3     5     7     9

Példa mátrixműveletekre. ' a transzponálás (konjugálással együtt).

3*(B*A)^2*x', C^3+C'
ans =
        2700
        5400
        8100
       10800
ans =
    38    57
    83   122

A Matlab a függvényeket elemenként alkalmazza a mátrixokra ill. vektorokra. Ahol ez ellentétes a szokásos művelettel ott a . jelöléssel tudatjuk a Matlabbal, hogy elemenkénti műveletvégzést szeretnénk.

sin(x)
x.^2
1./x
ans =
    0.8415    0.9093    0.1411   -0.7568
ans =
     1     4     9    16
ans =
    1.0000    0.5000    0.3333    0.2500

Példa egy táblázatra, amely 1-től 5-ig tartalmazza az egész számokat és ezek négyzeteit.

x=1:5;
tablazat=[x;x.^2]'
tablazat =
     1     1
     2     4
     3     9
     4    16
     5    25

A változók mentése és beolvasása a save-load parancspárral történik (*.mat fájlba ment).

save mentett_valtozok x tablazat % Változónév nélkül mindent ment.
clear all
whos % Nem mutat semmit, mert minden változót töröltünk.
load mentett_valtozok
whos % Csak a betöltött két változót mutatja.
  Name          Size            Bytes  Class     Attributes

  tablazat      5x2                80  double              
  x             1x5                40  double              

Külső fájl betöltése pl. az "xlsread fájlnév" paranccsal xls fájl vagy a "beolvasás varázslóval (input wizard)".

xlsread negyzetszamok; % A negyzetszamok.xls-ben 1-6-ig vannak a számok és négyzeteik.
tablazat=ans
tablazat =
     1     1
     2     4
     3     9
     4    16
     5    25
     6    36

Lebegőpontos számábrázolás

A Matlab dupla pontosságú (64 bit = 8 byte) lebegőpontos számrendszert használ a számok ábrázolására.

Tárhelyinformáció

whos % Mekkora tárhelyet foglalnak le az eddigi változók?
  Name          Size            Bytes  Class     Attributes

  ans           6x2                96  double              
  tablazat      6x2                96  double              
  x             1x5                40  double              

A dupla pontosságú lebegőpontos számrendszer nevezetes számai:

eps % Az 1 és a nála nagyobb következő ábrázolható szám távolsága
realmin % Normálalakos legkisebb pozitív ábrázolható szám.
realmax % Legnagyobb ábrázolható szám.

eps/2 % A számábrázolás relatív hibája.
ans =
  2.2204e-016
ans =
  2.2251e-308
ans =
  1.7977e+308
ans =
  1.1102e-016

Néhány számolás eredménye, ami mutatja a lebegőpontos számrendszer tulajdonságait.

tan(pi/2) % pi/2 tangense

2^-1074/2
2^-1074*1.2
10^310
x=10^-15; ((1+x)-1)/x
x=-25; n=0:200; format long, exp(x), sum((x.^n)./factorial(n)), format short
ans =
  1.6331e+016
ans =
     0
ans =
  4.9407e-324
ans =
   Inf
ans =
    1.1102
ans =
    1.388794386496402e-011
ans =
    8.086559047973670e-007

Általában kerülendő két közeli szám kivonása és nagy szám osztása kicsivel (abszolút értékben). Számok összeadását célszerű a kicsikkel kezdeni, és ezekhez adni a nagyobbakat.