Docsity
Docsity

Przygotuj się do egzaminów
Przygotuj się do egzaminów

Studiuj dzięki licznym zasobom udostępnionym na Docsity


Otrzymaj punkty, aby pobrać
Otrzymaj punkty, aby pobrać

Zdobywaj punkty, pomagając innym studentom lub wykup je w ramach planu Premium


Informacje i wskazówki
Informacje i wskazówki

Podstawy programowania w języku MATLAB, Prace dyplomowe z Tecniche E Linguaggi Di Programmazione

Obszerne opracowanie z zakresu tematu

Typologia: Prace dyplomowe

2019/2020

Załadowany 26.08.2020

czarna_magia
czarna_magia 🇵🇱

4.5

(23)

107 dokumenty

1 / 36

Toggle sidebar

Ta strona nie jest widoczna w podglądzie

Nie przegap ważnych części!

bg1
POLITECHNIKA GDAŃSKA
WYDZIAŁ INŻYNIERII LĄDOWEJ
PODSTAWY PROGRAMOWANIA
W JĘZYKU MATLAB
ROBERT JANKOWSKI, IZABELA LUBOWIECKA, WOJCIECH WITKOWSKI
GDAŃSK 2002
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24

Podgląd częściowego tekstu

Pobierz Podstawy programowania w języku MATLAB i więcej Prace dyplomowe w PDF z Tecniche E Linguaggi Di Programmazione tylko na Docsity!

P O L I T E C H N I K A G D A Ń S K A

WYDZIAŁ INŻYNIERII LĄDOWEJ

PODSTAWY PROGRAMOWANIA

W JĘZYKU MATLAB

ROBERT JANKOWSKI, IZABELA LUBOWIECKA, WOJCIECH WITKOWSKI

GDAŃSK 2002

WSTĘP

  • Niniejszy zeszyt przeznaczony jest dla studentów Wydziału Inżynierii Lądowej Politechniki Gdańskiej jako pomoc dydaktyczna do laboratorium z programowania w języku MATLAB, prowadzonego w ramach przedmiotu podstawy informatyki.
  • W pierwszej części zeszytu omówiono podstawowe funkcje: operacje na macierzach, działania tablicowe, operatory logiczne oraz elementy algebry liniowej.
  • W następnej części pokazano pracę w tzw. skryptach wraz z instrukcjami sterującymi oraz zastosowaniem funkcji.
  • Kolejną część zeszytu poświęcono grafice dwu- i trójwymiarowej.
  • W ostatniej części pokazano przykładowe programy z dziedziny mechaniki budowli, wytrzymałości materiałów i dynamiki.
  • Działania poszczególnych instrukcji zobrazowano w postaci licznych przykładów przeznaczonych do samodzielnego wykonania.
  • W zeszycie czcionką courier wyróżniono komendy języka MATLAB.
  • Niektóre przykłady programów pochodzą z książki A. Zalewskiego i R. Cegieły pt. „MATLAB – obliczenia numeryczne i ich zastosowania”, Wydawnictwo Nakom, Poznań

Nazwy zmiennych i informacje o nich można uzyskać wywołując funkcje who i whos.

  • Usunięcie zmiennej z pamięci: clear a - usuwa zmienną a ; clear - usuwa wszystkie zmienne znajdujące się w pamięci.
  • Zapisanie zmiennych na dysku: save nazwa_pliku (domyślnie przyjmowane jest rozszerzenie .mat ).
  • Wczytanie danych z pliku dyskowego: load nazwa_pliku
  • Korzystanie z podręcznej pomocy podającej opis funkcji: help nazwa_funkcji
  • Zawartość aktualnego katalogu można wyświetlić używając funkcji dir lub ls.
  • Do zmiany katalogu służy polecenie: cd nazwa_katalogu

Liczby rzeczywiste i ich formaty

  • Podstawowym typem dla elementów macierzy wykorzystywanym przez MATLAB są liczby rzeczywiste.
  • Maksymalną i minimalną wartość liczby rzeczywistej dodatniej można poznać za pomocą funkcji realmax i realmin.
  • Do określenia sposobu, w jaki liczby rzeczywiste są przedstawione na ekranie służy polecenie format postać_liczby, gdzie _postaćliczby określa postać, w jakiej liczby rzeczywiste będą wyświetlane na ekranie (np. short, short e, long).

Przykład: Przedstaw liczbę 2,5 w różnej postaci używając funkcji format. » format short » 2. ans =

» format short e » 2. ans = 2.5000e+ » format long » 2. ans =

Macierze

  • Definicja macierzy przez wyliczenie elementów:

Przykład: » A=[2 2 2 1; 1 2 3 1]; lub: » A=[2 2 2 1 1 2 3 1] A = 2 2 2 1 1 2 3 1 Poszczególne elementy macierzy oddziela się spacjami, a wiersze średnikami lub umieszcza się je w oddzielnych liniach.

  • Definicja macierzy przez wygenerowanie elementów: A=[min:krok:max] Polecenie generuje wektor poczynając od elementu o wartości min , kończąc na elemencie o wartości max z krokiem krok. Jeżeli parametr krok zostanie pominięty, przyjmuje się, iż krok =1.

Przykład: Wygeneruj macierz dwuwierszową o wyrazach od 1 do 10 w pierwszym wierszu i o wyrazach od 2 do 20 (co 2) w wierszu drugim. » A=[1:10; 2:2:20] A = 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20

  • Definicja macierzy wykorzystując elementy innych macierzy:

Przykład: Utwórz macierz D budując ją ze zdefiniowanych macierzy A , B i C. » A=[1 4 1; 2 0 1]; » B=[3 1; 4 1]; » C=[1 2 2 0 1; 2 4 7 1 0]; » D=[A B; C] D = 1 4 1 3 1 2 0 1 4 1 1 2 2 0 1 2 4 7 1 0 UWAGA: Przy takim budowaniu macierzy należy pamiętać o zgodności wymiarów.

» A=[1 2 3; 0 9 8; 1 1 0]

A =

» A(2,3) - odwołanie do elementu w wierszu 2 i kolumnie 3; ans = 8 » A(3,2) - odwołanie do elementu w wierszu 3 i kolumnie 2 ans = 1

  • Wybór największego elementu
  • max(A) - zwraca największy element wektora A. W przypadku gdy A jest macierzą, zwraca wektor wierszowy, którego elementami są maksymalne elementy z każdej kolumny A Przykład:

» max(A) ans = 1 9 8

  • Wybór najmniejszego elementu
  • min(A) - zwraca najmniejszy element wektora A. W przypadku gdy A jest macierzą, zwraca wektor wierszowy, którego elementami są maksymalne elementy z każdej kolumny A Przykład:

» min(A) ans = 0 1 0

  • Obliczanie wartości średniej elementów
  • mean(A) - zwraca średnią arytmetyczną elementów wektora A. W przypadku gdy A jest macierzą, zwraca wektor wierszowy, którego elementami są średnie arytmetyczne elementów z każdej kolumny A

Przykład:

» mean(A) ans = 0.6667 4.0000 3.

  • Odwołanie do podmacierzy:

Przykład: » A=[1 2 3 4 5 6; 0 9 8 7 6 5; 1 1 0 0 2 2] A = 1 2 3 4 5 6 0 9 8 7 6 5 1 1 0 0 2 2 » B=A(:,[1:3 5]) - utworzenie macierzy B poprzez pobranie z macierzy A B = kolumn: 1-3 oraz 5 1 2 3 5 0 9 8 6 1 1 0 2 » B=A([1 3],1:2:5) - utworzenie macierzy B z elementów macierzy A leżących B = na przecięciu wierszy 1 i 3 z kolumnami 1, 3 i 5 1 3 5 1 0 2

  • Usuwanie wektora z macierzy:

Przykład: » A=[1 2 3 4; 4 5 6 7] A = 1 2 3 4 4 5 6 7 » A(2,:)=[ ] - usuwa drugi wiersz z macierzy A A = 1 2 3 4 » A(:,1:2)=[ ] - usuwa dwie pierwsze kolumny z macierzy A A = 3 4

Działania na macierzach

  • Suma i różnica macierzy

Przykład: Zdefiniuj dwie macierze A i B , a następnie oblicz ich sumę, różnicę oraz dodaj do elementów macierzy A liczbę 2.

Definicja macierzy: » A=[1 -1 2; -2 3 1] A = 1 -1 2 -2 3 1 » B=[1 1 1; 0 -2 2]

ans = 2 2 0 4 2 2

  • Odwracanie i transpozycja

Przykład: Zdefiniuj macierz A , a następnie wyznacz macierz odwrotną do niej i dokonaj transpozycji.

» A=[1 2 3; 0 9 8; 3 4 7] A = 1 2 3 0 9 8 3 4 7 »inv(A) - zwraca macierz odwrotną do A ans = -15.5000 1.0000 5. -12.0000 1.0000 4. 13.5000 -1.0000 -4. » A’ - transponuje macierz A ans = 1 0 3 2 9 4 3 8 7

  • Przykład Zdefiniuj wektor kolumnowy A , a następnie oblicz sumę kwadratów elementów tego wektora.

» A=[1 2 3]’ A = 1 2 3 » A’*A ans = 14

Działania 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.

Definicja macierzy: » 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

Mnożenie tablicowe: » A.*B ans = 25 -12 4 2 -8 1

Dzielenie tablicowe: » A./B ans = 1 -3 1 2 -2 1

Potęgowanie tablicowe (podniesienie elementów macierzy A do drugiej potęgi): » A.^ ans = 25 36 4 4 16 1

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

  • Na zmiennych typu łańcuchowego można dokonywać niektórych działań macierzowych, na przykład transpozycji: » s’ ans = M A T L A B
  • 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.

  • 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ść a: ’) Podaj wartość a:

lub:

» wzor=input(‘Podaj wzór funkcji f(x): ‘,’s’) Podaj wzór funkcji f(x):

UWAGA: Użycie parametru ‘s’ w funkcji input powoduje, iż wprowadzona dana jest traktowana jako łańcuch znaków.

Skrypty

  • Przykład: Napisz skrypt (otwierając z menu File z opcji New plik M-file ), który kreśli wykres wybranej

przez użytkownika funkcji jednej zmiennej w przedziale 0, 4 π.

% skrypt rysuje wykres wybranej funkcji

x=[0:0.1:4*pi]; wzor=input(‘Podaj wzór funkcji jednej zmiennej f(x): ‘,’s’) y=eval(wzor); plot(x,y); % kreślenie wykresu funkcji y=f(x)

Zapisz go pod nazwą wykres.m , a następnie uruchom wpisując w oknie komend jego nazwę: » wykres

WSKAZÓWKA: Podaj na przykład funkcję: sin(x)+2cos(2x)

Operatory logiczne

  • Operatory logiczne w języku MATLAB:

= = równe ~ = różne < mniejsze

większe < = mniejsze równe = większe równe & i | lub

Instrukcje sterujące

  • Pętla FOR („dla”): for zmienna_iterowana = macierz_wartości ciąg_instrukcji end

Działanie pętli polega na wykonaniu ciągu_instrukcji dla kolejnych wartości zmiennej_iterowanej. Wartościami tymi są kolejne wektory kolumnowe pobrane z macierzy_wartości (jeżeli jest to wektor, to kolejno zostaną wykonane instrukcje dla danych elementów tego wektora).

Przykład: Napisz skrypt, który generuje wektor A o wymiarze 1x5, którego elementy spełniają zależność: Ai = 1 + i

% Próba realizacji pętli FOR for i=1: A(i)=sqrt(1+i); % pierwiastek kwadratowy

przeciwnym razie sprawdzane jest wyrażenie_warunkowe2, jeżeli jest ono spełnione wykonywany jest ciąg_instrukcji2, jeżeli nie, wykonywany jest ciąg_instrukcji3. Instrukcję warunkową IF można rozbudować dla większej liczby _wyrażeńwarunkowych i odpowiadających im ciągów_instrukcji.

Przykład: Napisz skrypt używając instrukcji warunkowej IF do zrealizowania wyboru jednej z dostępnych opcji (polecenie menu):

% Próba realizacji instrukcji IF o=menu(‘Przykładowe menu’, ‘Opcja 1’, ‘Opcja 2’, ‘Opcja 3’); if (o==1) disp(‘Opcja 1’) elseif (o==2) disp(‘Opcja 2’) elseif (o==3) disp(‘Opcja 3’) end

Zapisz skrypt w pliku instrukcjaif.m i uruchom go.

Funkcje

  • W języku MATLAB istnieje możliwość definiowania własnych funkcji, jako elementów strukturalnych programu. Definicja funkcji ma następującą postać:

function [wartość_funkcji]=nazwa_funkcji(argument1,..,argumentN) ciąg instrukcji

Przykład: Napisz funkcję (otwierając z menu File z opcji New plik M-file ) wyznaczającą wartość silni n! , gdzie n jest liczbą naturalną.

% Funkcja wyznacza watość n! function[wynik]=silnia(n) wynik=1; for i=1:n wynik=wynik*i; end

Zapisz ją pod nazwą silnia.m , a następnie uruchom wpisując w linii komend jej nazwę wraz z wartością argumentu n umieszczoną w nawiasie, np.: » silnia(5) ans = 120

Budowa strukturalna programu

  • Skrypty, które stanowią większą całość nazywamy programami.
  • W skrypcie możemy wywołać istniejące już (wcześniej zdefiniowane) inne skrypty lub funkcje.
  • Polecenie help nazwa_skryptu wyświetla na ekranie tekst umieszczony w pierwszych liniach komentarza_._

Przykład: Napisz program, który wypisuje na ekranie informację o jego działaniu oraz imię i nazwisko autora, a następnie wyznacza wartość n! dla podanej przez użytkownika wartości n. (Uwaga: użyta w poniższym przykładzie funkcja round(n) zaokrągla liczbę rzeczywistą n do liczby całkowitej)

% Program oblicza wartość silni n! dla wprowadzonej przez % użytkownika wartości n

disp(‘Program oblicza wartość silni n! dla wprowadzonej przez’) disp(‘użytkownika wartości n’) disp(‘ ‘) disp(‘Autor:’) disp(‘Imię i Nazwisko’) disp(‘ ‘) n=input(‘Podaj wartość n: ‘);

%sprawdzenie czy n jest liczbą naturalną while n<0 | n~=round(n) disp(‘Proszę podać liczbę naturalną’) n=input(‘Podaj wartość n: ‘); end

disp(‘Wartość n! wynosi:’) silnia(n)

Zapisz go pod nazwą program.m i uruchom.

Grafika dwuwymiarowa

  • Najczęściej spotykanym sposobem graficznej prezentacji danych w języku MATLAB jest wykres funkcji jednej zmiennej. Służy do tego funkcja plot(x,y), gdzie y=f(x);
  • Okno graficzne można wyczyścić wywołując funkcję clf;
  • Zamknięcie okna graficznego odbywa się poprzez wywołanie funkcji close;
  • Dodatkowe okna można otworzyć przy pomocy funkcji figure;
  • Otworzyć jak i zamknąć można dowolne okno podając jego numer jako argument;
  • W celu uzyskania kilku wykresów w jednym oknie należy wykorzystać funkcję

k - czarny

Przykład : Narysuj trójkąt o wierzchołkach w punktach (0,1), (3,4), (4,2) używając funkcji line oraz fill z wypełnieniem w kolorze niebieskim.

» line([0 3 4 0],[1 4 2 1]) » fill([0 3 4],[1 4 2],’b’)

Grafika trójwymiarowa

  • Większość funkcji języka MATLAB generujących rysunki trójwymiarowe służy do kreślenia powierzchni. W praktyce definiując powierzchnię trzeba się ograniczyć do skończonego zbioru punktów należących do obszaru.

[x,y]=meshgrid(X,Y) - tworzy macierze x i y opisujące położenie węzłów prostokątnej siatki pobierając wartości z wektorów X i Y. mesh(x,y,z) - rysuje siatkę powierzchni opisanej przez macierze x , y i z. surf(x,y,z) - rysuje kolorową powierzchnię opisaną przez macierze x , y i z. surfl(x,y,z) - rysuje kolorową powierzchnię opisaną przez macierze x , y i z uwzględniając na niej odbicie światła. plot3(x,y,z) - rysuje krzywą w przestrzeni opisaną przez wektory x , y i z.

Przykład:

Napisz skrypt kreślący siatkę wartości funkcji f ( x y , ) = sin ( x ) ⋅ sin ( y ) ⋅ exp( − x^2 − y^2 )w

przedziale - π ,π.

% Skrypt rysuje siatkę wartości funkcji clf [x,y]=meshgrid(-pi:0.2:pi,-pi:0.2:pi) z=sin(x).sin(y).exp(-x.^2-y.^2) mesh(x,y,z)

Zapisz go pod nazwą wykres3d.m i uruchom.

Rozbuduj powyższy skrypt o rysowanie kolorowej powierzchni poprzez dodanie na końcu polecenia: surf(x,y,z) lub: surfl(x,y,z)

Przykład: Napisz skrypt kreślący krzywą w przestrzeni trójwymiarowej:

% Skrypt kreśli krzywą w przestrzeni trójwymiarowej x=[0:0.1:10]; y=2cos(x); z=sin(2y); plot3(x,y,z) grid title('Wykres krzywej w przestrzeni trójwymiarowej') xlabel('x') ylabel('y') zlabel('z')

Zapisz go pod nazwą krzywa3d.m i uruchom.

  • Wykreślone powierzchnie można poddać cieniowaniu używając funkcji: shading flat shading interp shading faceted

Przykład: Napisz skrypt:

% Skrypt rysuje powierzchnie poddane cieniowaniu clf [x,y]=meshgrid(-3.5:0.7:3.5); z=sin(x).sin(y)+4exp(-(x-0.5).^2-(y-0.5).^2);

%Wykres w trybie flat subplot(1,3,1) surf(x,y,z) shading flat title(‘flat’)

%Wykres w trybie interp subplot(1,3,2) surf(x,y,z) shading interp title(‘interp’)

%Wykres w trybie faceted subplot(1,3,3) surf(x,y,z) shading faceted title(‘faceted’)

Zapisz go pod nazwą powierzchnie.m i uruchom.

  • Inne elementy rysunków, takie jak: opisy, etykiety, linie pomocnicze wykonuje się podobnie,