Ćw.2

Transkrypt

Ćw.2
Ćwiczenie 2. Matlab – tablice (macierze)
Tworzenie tablic i operacje tablicowe
Tablica jest programową reprezentacją macierzy. Może być jednowymiarowa (wektor) lub dwuwymiarowa, posiada rozmiar w każdym wymiarze.
Ćwiczenie
Utworzyć m- plik, wpisać, przetestować i zrozumieć poniższe operacje:
m=[1 2 3 ]
%przypisanie wartości elementom macierzy (wektor wierszowy)
m0= [1; 2; 1; 1; 0]
% przypisanie macierzy (wektor kolumnowy)
m1 = [1.1 2.1 3.55 ; -2 1 1; 1.44 0 0]
%macierz kwadratowa
m2=[1 1 1 1 1]
m3=[1 2 3 4 5]
m4 = m1 + m2
% dodanie macierzy (uwaga na wymiary i rozmiar)
m5 = m4*m0
% mnożenie macierzy (uwaga na wymiary i rozmiar)
m5t = m5'
% macierz transponowana
m5o = m5^(-1)
% macierz odwrotna
m5*m5o
% sprawdzenie - macierz jednostkowa
det(m1)
% funkcja obliczenia wyznacznika macierzy kwadratowej
m3(3)
% dostęp do elementu macierzy (indeks)
m1(2,3)
% dostęp do elementu macierzy (indeksy wiersz-kolumna)
Uwaga: po znaku % piszemy komentarze ignorowane przez Matlaba
Inny sposób definicji tablic:
M1=0:10:90
Uwaga: wartość_początkowa:krok:wartość_końcowa
Zadania
1. Zinterpretować w m-pliku rezultat wypełnienia tablic:
M1=[0:0.1:2*pi]
M2=[M1; sin(M1)]
2. Wypełnić dwie macierze dwuwymiarowe (wiersze, kolumny) rozmiarze mxn, a następnie:
a. dodać je do siebie,
b. pomnożyć je przez siebie.
Jaki rozmiar w obu wymiarach powinny mieć macierze, żeby dozwolone było wykonanie obu operacji?
3. Zastąpić operator mnożenia macierzy
* operatorem dwuznakowym .* (mnożenie elementowe). Zin-
terpretować wynik (kiedy jest dozwolone).
4. Wykonać dzielenie elementowe macierzy przez macierz wykorzystując operator ./ (obie ten sam rozmiar w obydwu wymiarach). Zinterpretować wynik.
5. Jaką macierz da się podnieść do kwadratu? Wypróbować operatory: ^ i
Użyteczne funkcje tablicowe
rand(n)
- losowo generowana tablica kwadratowa nxn
rand(n,m)
- losowo generowana tablica kwadratowa nxm
sum (A)
- wektor sum elementów w kolumnach macierzy A
sum(sum(A)) - suma wszystkich elementów macierzy dwuwymiarowej
sort (B)
- sortowanie rosnące tablicy jednowymiarowej
max(A)
- wektor elementów maksymalnych w kolumnach macierzy A
max(max(A)) - element największy w macierzy dwuwymiarowej
min(A)
- wektor elementów minimalnych w kolumnach macierzy A
min(min(A)) - element najmniejszy w macierzy dwuwymiarowej
ndims(A)
- ile wymiarów macierzy
numel(A)
- liczba elementów macierzy
reshape(A,n,m) - rekonfiguracja macierzy
size(A)
- rozmiar macierzy
.^
length(A)
- największy rozmiar
Zadanie
Wypróbować i zrozumieć działanie powyższych funkcji. Można tu skorzystać z pomocy Matlaba, pisząc w
linii poleceń Command Window:
help funkcja
Wykorzystanie tablic
Wykresy 2D
Funkcja plot
Wykresy na płaszczyźnie tworzymy wykorzystując funkcję plot(x, y, kolor).
Definiujemy wektory x i y:
x= [0 1 2 3 4 5 6 7 8 9 10]
% wektor wartości x
albo:
x=0:10
y=sqrt(x)
title('Wykres')
plot(x,y)
%generowanie wektora co 1, wart_pocz:wart_konc
% wektor wartości y
%opcjonalnie tytuł wykresu
% narysowanie wykresu (w osobnym oknie)
Dwie krzywe w jednym układzie współrzędnych:
x=0:pi/50:6*pi
y=cos(2*x)./sqrt(x+1)
z=sin(x)
plot(x,y,'b',x,z,'r')
grid
% definicja wektora x
% definicja wektora y(x)
% definicja wektora z(x)
% (b=blue, r=red)
%dodanie siatki do wykresu
Uwaga: Stosujemy operator ./
dzielenie elementowe wektorów
Funkcja fplot
Dla funkcji fplot niepotrzebne są wektory zmiennych – jedynie wyrażenie tekstowe opisujące funkcję:
fplot ( ' wyrażenie arytmetyczne (x) ' , [ x_pocz , x_konc ] )
Przykład:
fplot('sin(x*x)/x',[0 4*pi])
% uwaga: punkt dzielenia przez 0 nie jest rysowany
Można również narysować więcej krzywych na wykresie:
fplot('[sin(x*x)/x, cos(x)]',[0 2*pi])
albo
fplot('sin(x*x)/x',[0 2*pi])
hold on
fplot('cos(x)',[0 2*pi])
Można też ograniczyć zakres osi y:
fplot('tan(x)',[0 2*pi -5 5])
Wykresy 3D
Krzywe 3D
Wykorzystujemy tu funkcję plot3(y,z,x). Przykładowo dla krzywej (helisy) danej równaniami:
y=sin(x)
Tworzymy m-plik:
x = 0:pi/50:10*pi;
plot3(sin(x),cos(x),x);
z=cos(x)
40
30
20
10
0
1
0.5
1
0.5
0
0
-0.5
-0.5
-1
-1
Powierzchnie 3D
Korzystamy z funkcji mesh(x,y,z). Dla powierzchni podanej równaniem:
z=cos3x siny
Piszemy m-plik:
clear
y = 0:0.01:pi
x = y'
z=cos(3*x) * sin(y)
mesh(x, y, z)
%wektor wierszowy
%wektor kolumnowy!
%przeanalizować tablicę z (KWADRATOWA!)
Zadania
1. Sprawdzić działanie powyższych przykładów.
−
x
2. Wykonać wykres funkcji e 3 sin x w przedziale [-10,10] stosując funkcję plot i fplot.
3. Wykonać w jednym układzie współrzędnych wykresy dwóch krzywych podanych równaniami drugiego
stopnia (parabole) o różnych współczynnikach. Tak dobrać współczynniki by uzyskać wykres jak poniżej:
15
10
5
0
-5
-10
-15
-4
-3
-2
-1
0
1
2
3
4
4. Napisać m-plik, w którym rysowany jest wykres funkcji a sin(bx+c), gdzie a, b, c oraz granice przedziału
zmiennej x podawane są interakcyjnie przez użytkownika.
5. Narysować wykres półokręgu (równanie: x2+y2=R2).
6. Bazując na powyzszym równaniu narysować wykres 3d dla półkuli.
Rozwiązanie układu równań liniowych
Przykładowy układ:
2x + 3y – 4 z = 5
x + y – z = 3,5
-4 y + 2,5 x – z = 2
Rozwiązujemy w m-pliku:
A = [2 3 -4 ; 1 1 -1 ; 2.5 -4 -1]
% Uwaga: zachować kolejność zmiennych
B = [ 5 ; 3.5 ; 2]
X= A^-1*B
%wektor rozwiązań
S=A*X
% wynikiem powinien być wektor wyrazów wolnych B
s1=A(1,1)*X(1)+ A(1,2)*X(2) + A(1,3)*X(3)
%sprawdzenie 1-szego równania
Zadania
Rozwiązać samodzielnie układ równań:
–x + y – 4.3 z + 2 v= 15
3x + y – v = 35
4 x + 0,5 y + z – 4.5 v = 2,2
12,5 y – z – 5 v = 12
Zapis elementów tablicy do pliku ASCII i odczyt z pliku
clear
c = [8 6 4 2;4 -1 4 5]
save ('mydata.dat', 'c','-ASCII')
clear
load ('mydata.dat')
disp('Dane z pliku:');
mydata
Zapis danych do pliku typu mat i odczyt z pliku
a=rand(3)
b=6
save ('plik.mat', 'a', 'b')
clear a
clear b
load ('plik.mat')
whos %informacja o zmiennych
disp(a)
disp(b)
Zadania
1. Napisać m-plik o poniższych działaniach, wykorzystując poznane funkcje tablicowe:
a. wygenerować losowo tablicę o rozmiarze 4x4 o elementach całkowitych z przedziału (-20, 20),
b. zamienić drugi wiersz z czwartym,
c. obliczyć i wyświetlić sumę elementów drugiej i trzeciej kolumny,
d. następnie przekształcić tablicę w tablicę 2x8,
e. utworzyć nową tablicę 1x8 o dowolnych elementach i dopisać ją jako nowy wiersz w tablicy
utworzonej w poprzednim podpunkcie,
f. zapisać ostatnią tablicę o rozmiarach 1x9 do pliku ASCII o nazwie plik1.txt i pliku mat o nazwie
plik2.mat.
2. Utworzyć m-plik odczytujący dane zapisane w plikach plik1.txt i plik.mat.