Podstawy Metod Komputerowych w Obliczeniach Inżynierskich . WYKŁAD-2
MACIERZE PUSTE
Przypisanie macierzy pustej elementowi macierzy lub pod macierzy) powoduje usunięcie tego fragmentu z macierzy.
Uwaga: usuwany fragment może powodować zmianę wymiarów macierzy.
A =
5 -6 4 6
-2 4 5 8
2 4 7 9
3 5 8 1
>> A(:,1:3)=[] % usunięcie trzech pierwszych kolumn macierzy A
A =
6
8
9
1
>> A(2:3,3)=[]
??? Indexed empty matrix assignment is not allowed.
OPERATORY
Wyrażenia w MATLAB-ie buduje się stosując różnego rodzaju operatory. Priorytet (kolejność działania) operatorów jest następujący:
Operatory arytmetyczne;
Operatory relacji;
Operatory logiczne.
OPERATORY ARYTMETYCZNE
W MATLAB-ie wykonuje się za pomocą operatorów dwa rodzaje operacji arytmetycznych na macierzach:
Operacje macierzowe (matrix operation) - określone regułami algebry liniowej;
Operacje tablicowe (array operation) - wykonywane na poszczególnych elementach macierzy.
***
OPERACJE MACIERZOWE
Działania na macierzach |
Zapis symboliczny |
Składnia języka MATLAB |
Dodawanie, odejmowanie |
A + B, A - B |
A + B, A - B |
Transpozycja1) |
AT |
A' |
Iloczyn macierzy |
AB |
A*B |
Iloczyn macierzy przez wektor |
Ax |
A*x |
Iloczyn skalarny |
xTy |
x'*y, dot(x,y) |
Iloczyn zewnętrzny |
xyT |
x*y' |
Iloczyn wektorowy2) |
x×y |
cross(x,y) |
Macierz odwrotna |
A-1 |
inv(A), / , \ |
Potęgowanie macierzy3) |
An |
A^n |
Wyznacznik |
det(A) |
det(A) |
Uwarunkowanie macierzy |
cond(A) |
cond(A), rcond(A) |
Rząd macierzy |
rank(A) |
rank(A) |
1) Jeżeli macierz A ma elementy zespolone to po transponowaniu elementy będą sprzężone.
2) Operacja iloczynu wektorowego jest definiowana tylko dla N=3.
3) Macierz A musi być kwadratowa a wykładnik n musi być skalarem.
OPERACJE TABLICOWE
Działania na tablicach |
Zapis symboliczny |
Zapis indeksowy |
Składnia języka MATLAB |
Dodawanie, odejmowanie |
A + B, A - B |
ajk + bjk , ajk - bjk |
A + B, A - B |
Iloczyn |
A⊗B |
aijbij |
A .* B |
Dzielenie |
A÷B |
aij / bij |
A ./ B, B .\ A |
Potęgowanie |
AB |
(aij)bij |
A .^ B |
Transpozycja4) |
A° |
aji |
A .' |
4) Tablicowa transpozycja macierzy zespolonej różni się od transpozycji macierzowej jedynie tym, że nie przekształca elementów w elementy sprzężone.
DODAWANIE, ODEJMOWANIE MACIERZOWE
Przykład:
» A=[1 -1 2; -2 3 1]
» B=[1 1 1; 0 -2 2]
» A+B
ans =
2 0 3
-2 1 3
» A-B
ans =
0 -2 1
-2 5 -1
Dodanie do elementów macierzy A liczby 2.15:
A =
1 -1 2
-2 3 1
>> A+2.15
ans =
3.1500 1.1500 4.1500
0.1500 5.1500 3.1500
MNOŻENIE MACIERZY w sensie Cauchy
Przykład:
Zdefiniuj dwie macierze A i B, a następnie oblicz ich iloczyn oraz pomnóż elementy macierzy A przez 2.
A = %(2 x 4)
1 1 0 3
2 1 1 4
B = %(4 x 1)
2
2
2
4
Iloczyn macierzy A przez wektor B. Liczba kolumn macierzy A musi być równa liczbie wierszy macierzy B!
>> A*B %(2 x 1)
ans =
16
24
Iloczyn macierzy przez liczbę:
>> A*2
ans =
2 2 0 6
4 2 2 8
TRANSPOZYCJA
Przykład:
Zdefiniuj macierz A, i dokonaj transpozycji.
>> A=[1 2 3; 0 9 8; 3 4 7]
A =
1 2 3
0 9 8
3 4 7
>> A'
ans =
1 0 3
2 9 4
3 8 7
Jeżeli macierz jest zespolona to operator transpozycji dodatkowo zmienia znak części urojonej elementów zespolonych. Niech dane będą dwa wektory a, b
>> a=[1 3 2]
>> b=[3 4 5]
>> C1=(a+i*b) % lub C1=[a+i*b]
C1 =
1 + 3i 3 + 4i 2 + 5i % postać macierzy zespolonej
>> C2=[a+i*b]'
C2 = % postać macierzy transponowanej
1 - 3i
3 - 4i
2 - 5i
ODWRACANIE MACIERZY
>> A=[1 2 3; 0 9 8; 3 4 7]
A =
1 2 3
0 9 8
3 4 7
>> inv(A)
ans =
-15.5000 1.0000 5.5000
-12.0000 1.0000 4.0000
13.5000 -1.0000 -4.5000
Sprawdzenie:
>> I=inv(A)*A
I = % macierz jednostkowa
1 0 0
0 1 0
0 0 1
DZIELENIE MACIERZY
C =
1 1 0
2 1 1
6 3 5
D =
2 5 6
4 3 2
2 1 2
>> C\D % lewostronne dzielenie macierzy - równoważne operacji inv(C)*D
ans =
7 2 -2
-5 3 8
-5 -4 -2
>> C/D % prawostronne dzielenie macierzy - równoważne operacji D* inv(C)
ans =
0 1/2 -1/2
-1/12 1/3 5/12
-1/12 1/3 29/12
ILOCZYN SKALARNY i ZEWNĘTRZNY
Przykład
Zdefiniuj wektor kolumnowy x, a następnie oblicz sumę kwadratów elementów tego wektora.
>> x=[1 2 3]'
x =
1
2
3
>> x'*x % iloczyn skalarny
ans =
14
>> x*x' % iloczyn zewnętrzny
ans =
1 2 3
2 4 6
3 6 9
OPERACJE TABLICOWE
Działanie tablicowe jest działaniem, które przekształca poszczególne elementy macierzy oddzielnie.
Przykład:
Zdefiniuj dwie macierze A i B, a następnie wykonaj działania mnożenia, dzielenia i potęgowania tablicowego.
>> A=[5 -6 2; -2 4 1]
A =
5 -6 2
-2 4 1
>> B=[5 2 2; -1 -2 1]
B =
5 2 2
-1 -2 1
>> A.*B
ans =
25 -12 4
2 -8 1
>> A./B % prawostronne dzielenie tablic - wynik macierz o elementach A(i,j)/B(i,j)
ans =
1 -3 1
2 -2 1
>> A.\B % lewostronne dzielenie tablic - wynik macierz o elementach B(i,j)/A(i,j)
ans =
1.0000 -0.3333 1.0000
0.5000 -0.5000 1.0000
ans = % format rat
1 -1/3 1
1/2 -1/2 1
Wniosek: A.\B jest równe B./A
POTĘGOWANIE TABLICOWE
Operacja Z=X.^Y jest wykonywana poprawnie jeśli X i Y są macierzami o tym samym rozmiarze lub gdy jedna z nich jest wartością skalarną
(podniesienie elementów macierzy X do drugiej potęgi):
X=
2 3
3 4
>> Y=[1 2; 2 1]
Y =
1 2
2 1
>> X.^Y
ans =
2 9
9 4
TRANSPOZYCJA TABLICOWA
Transpozycja tablicowa macierzy zespolonej Z:
>> Z=[1 + i*2 3 + i*3; 2 + i*2 3 + i*8]
Z =
1 + 2i 3 + 3i
2 + 2i 3 + 8i
>> ZTT=[1+i*2 3+i*3;2+i*2 3+i*8].' % Tablicowa transpozycja macierzy zespolonej różni się od transpozycji macierzowej jedynie tym, że nie przekształca elementów w elementy sprzężone.
ZTT=
1 + 2i 2 + 2i
3 + 3i 3 + 8i
>> ZTM=[1+i*2 3+i*3;2+i*2 3+i*8]' % przypomnienie - transpozycja macierzowa !
ZTM =
1 - 2i 2 - 2i
3 - 3i 3 - 8i
FUNKCJE TABLICOWE
Funkcje tablicowe podobnie jak operatory tablicowe pozwalają przekształcać poszczególne elementy macierzy np.:
A =
5 -6 2
-2 4 1
1 3 3
>> sin(A) % argument funkcji w radianach
ans =
-0.9589 0.2794 0.9093
-0.9093 -0.7568 0.8415
0.8415 0.1411 0.1411
OPERACJE NA ŁAŃCUCHACH
Uzupełniającym typem danych w języku MATLAB jest łańcuch tekstowy.
Do definiowania zmiennej tego typu stosuje się apostrofy ograniczające łańcuch, np.:
>> s= 'Student trzeciego semestru'
s =
Student trzeciego semestru
Na zmiennych typu łańcuchowego można dokonywać niektórych działań macierzowych, na
przykład transpozycji lub łączenia:
>> a=[s,' Jan Kowalski']
a =
Student trzeciego semestru Jan Kowalski
Konwersja wartości numerycznych na tekst (int2str) i na odwrót jest wykorzystywana np. do tworzenia napisów na rysunkach:
x=0.3; y=0.9; n=4;
>> text(x,y,['Wykres wielomianu',blanks(3), int2str(n), '-go rzedu'])
Zmienna typu łańcuchowego może zawierać nazwę instrukcji, którą można wykonać używając funkcji eval.
Przykład:
» t=[0:0.2:1];
» s=`sin(t)';
» eval(s)
ans =
0 0.1987 0.3894 0.5646 0.7174 0.8415
Można wysyłać na ekran wywołanie zachęty oczekujące na wprowadzenie przez użytkownika
danej wartości lub łańcucha znaków, np.:
>> a=input('Podaj wartość parametru a: ')
Podaj wartość parametru a: 2.34
a =
2.3400
lub
>> wzor=input('Podaj wzór funkcji f(x): ','s')
Podaj wzór funkcji f(x): sin(x)
wzor =
sin(x)
UWAGA:
Użycie parametru `s' w funkcji input powoduje, iż wprowadzona dana jest traktowana jako
łańcuch znaków.
OPERATORY RELACJI i LOGICZNE W JĘZYKU MATLAB
Symbol |
Operator relacji |
|
Symbol |
Operator logiczny |
< |
mniejsze |
|
& |
AND (koniunkcja) |
< = |
mniejsze równe |
|
|
|
> |
większe |
|
| |
OR (alternatywa) |
> = |
większe równe |
|
|
|
= = |
równe |
|
~ |
NOT (negacja) |
~ = |
różne |
|
|
|
•Argumentami relacji mogą być porównywane macierze o takich samych wymiarach;
•Wynikiem jest macierz, której elementy przyjmują wartości zero lub jeden w zależności od spełnienia relacji.
Przykład użycia operatora relacji:
A =
5 -6 2
-2 4 1
1 3 3
B =
3 2 1
-3 5 7
4 2 5
x = 4
>> A>=B
ans =
1 0 1
1 0 0
0 1 0
>> B<x
ans =
1 1 1
1 0 0
0 1 0
Przykład użycia operatora logicznego:
ALGEBRA LINIOWA
det(A) - obliczanie wyznacznika macierzy A
eig(A) - obliczanie wartości własnych macierzy A
poly(A) - obliczanie współczynników wielomianu charakterystycznego macierzy A
rank(A) - obliczanie rzędu macierzy A
diag(A) - wyznaczanie elementów leżących na głównej przekątnej macierzy A
• Przykład:
Zdefiniuj macierz A o wymiarze 4x4, a następnie wyznacz jej wyznacznik, wartości własne,
współczynniki wielomianu charakterystycznego oraz zbadaj rząd macierzy.
» A=[1 3 0 -2; 2 0 3 -1; 0 5 0 0; 1 0 2 0];
» det(A)
ans =
0
» eig(A)
ans =
-4.5414
4.0000
1.5414
0.0000
» poly(A)
ans =
1.0000 -1.0000 -19.0000 28.0000 0.0000
» rank(A)
ans =
3