Skrypt Podstawy Programowania w Języku Matlab
Skrypt Podstawy Programowania w Języku Matlab
Skrypt Podstawy Programowania w Języku Matlab
PODSTAWY PROGRAMOWANIA
W JĘZYKU MATLAB
GDAŃSK 2009
Niniejszy zeszyt przeznaczony jest dla studentów Wydziału Inżynierii Lądowej
i Środowiska Politechniki Gdańskiej jako pomoc dydaktyczna do laboratorium
z programowania w języku MATLAB. W jego pierwszej części omówiono podstawowe
funkcje: operacje na macierzach, działania tablicowe, operatory logiczne oraz elementy
algebry liniowej. W następnej pokazano pracę w tzw. skryptach wraz z instrukcjami
sterującymi oraz zastosowaniem funkcji. Kolejną część zeszytu poświęcono grafice dwu-
i trójwymiarowej, zaś 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.
Autorzy pragną wyrazić swą wdzięczność doktorowi Czesławowi Branickiemu za
wnikliwe uwagi dotyczące skryptu oraz za udostępnienie przykładów z dynamiki budowli.
RECENZENT:
Czesław Branicki
–2–
Środowisko i programowanie w języku MATLAB
MATLAB jest pakietem obliczeniowym firmy MathWorks przeznaczonym do
wykonywania różnorodnych inżynierskich i naukowych obliczeń numerycznych. Jego
nazwa pochodzi od połączenia pierwszych liter angielskich słów MATrix LABoratory –
Laboratorium Macierzowe, którego podstawowym typem danych jest macierz. Serce
pakietu stanowi interpreter języka, który wraz z biblioteką podstawowych działań na
macierzach umożliwia implementację algorytmów numerycznych. Pakiet posiada ponadto
obszerne biblioteki standardowych procedur umożliwiających rozwiązywanie typowych
problemów obliczeniowych oraz biblioteki dodatkowe (ang. toolbox) zawierające procedury
wspomagające specyficzne obliczenia numeryczne. Prosta budowa okienkowa ułatwia
korzystanie z programu, zaś zestaw zaawansowanych procedur graficznych umożliwia łatwą
i estetyczną wizualizację wyników w postaci dwu- i trójwymiarowych wykresów.
Dodatkową zaletą pakietu jest możliwość przeprowadzenia obliczeń symbolicznych tzn.
przekształcania wzorów matematycznych. Szeroki wachlarz dostępnych procedur
umożliwia szybsze i łatwiejsze programowanie niż ma to miejsce w przypadku takich
języków jak FORTRAN, PASCAL, C.
Rozpoczynając pracę z MATLABEM, jako językiem programowania, należy
zdefiniować kilka podstawowych pojęć [1]:
Algorytm: jest to przepis na rozwiązanie określonego zadania,
Implementacja: to kodowanie algorytmu do postaci programu z wykorzystaniem poleceń
wybranego języka programowania,
Zmienna: podobnie jak w matematyce jest klasyfikowana zgodnie z jej własnościami.
Rozróżnia się zmienne rzeczywiste, zespolone, logiczne lub też zmienne reprezentujące
wartości, zbiory wartości czy zbiory zbiorów,
Typ danych: określa zbiór wartości, które może przyjmować zmienna.
Niektóre z przykładów zawartych w tym zeszycie opracowano na podstawie pozycji [2], [3].
Przykłady poleceń
Podstawienie:
» a=3;
powoduje utworzenie zmiennej a o wartości 3.
UWAGA: Średnik po poleceniu powoduje, że wartość będąca wynikiem nie będzie
wyświetlana na ekranie.
» b=sin(a)
b =
0.1411
oblicza wartość funkcji sinus dla zmiennej a, wynik zapisuje do zmiennej b i wyświetla na
ekranie. Jeżeli nie podano nazwy zmiennej to wynik działania jest umieszczany w
standardowej zmiennej ans, np.:
» cos(pi/3)
ans =
0.5000
–3–
Utworzona (zdefiniowana) zmienna jest pamiętana od momentu utworzenia, aż do chwili jej
usunięcia. Możliwa jest przy tym nie tylko zmiana wartości, ale również rozmiaru zmiennej.
Nazwy zmiennych i informacje o nich można uzyskać wywołując funkcje who i whos.
Przykład:
Przedstaw liczbę 2,5 w różnej postaci używając funkcji format.
» format short
» 2.5
ans =
2.5000
» format short e
» 2.5
ans =
2.5000e+000
–4–
» format long
» 2.5
ans =
2.50000000000000
Macierze
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.
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
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]
–5–
D =
1 4 1 3 1
2 0 1 4 1
1 2 2 0 1
2 4 7 1 0
Przykład:
Utwórz macierz A o wymiarze 3×2 wypełnioną zerami.
» A=zeros(3,2)
A =
0 0
0 0
0 0
–6–
Dostęp do elementów macierzy
Przykład:
» A=[1 2 3; 0 9 8; 1 1 0]
A =
1 2 3
0 9 8
1 1 0
» 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
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]) - tworzy macierz 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]) - tworzy macierz B z elementów macierzy A które leżą
B = na przecięciu wierszy 1 i 3 z kolumnami 1, 3 i 5
1 3 5
1 0 2
Przykład:
» A=[1 2 3 4; 4 5 6 7]
A =
1 2 3 4
4 5 6 7
–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
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
» max(A)
ans =
1 9 8 7 6 6
Przykład:
» min(A)
ans =
0 1 0 0 2 2
Przykład:
» mean(A)
ans =
0.6667 4.0000 3.6667 3.6667 4.3333 4.3333
–8–
Działania na macierzach
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]
B =
1 1 1
0 -2 2
Suma:
» A+B
ans =
2 0 3
-2 1 3
Różnica:
» A-B
ans =
0 -2 1
-2 5 -1
Mnożenie macierzy:
Przykład:
Zdefiniuj dwie macierze A i B, a następnie oblicz ich iloczyn oraz pomnóż elementy
macierzy A przez 2.
–9–
Definicja macierzy:
» A=[1 1 0; 2 1 1]
A =
1 1 0
2 1 1
» B=[2; 2; 2]
B=
2
2
2
Iloczyn macierzowy:
» A*B
ans =
4
8
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
–10–
Przykład:
Zdefiniuj wektor kolumnowy A, a następnie oblicz sumę kwadratów elementów tego
wektora.
UWAGA: Suma kwadratów elementów może być obliczana jako iloczyn skalarny A T A
» A=[1 2 3]’
A =
1
2
3
» A’*A
ans =
14
Działania tablicowe
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
–11–
Potęgowanie tablicowe (podniesienie elementów macierzy A do drugiej potęgi):
» A.^2
ans =
25 36 4
4 16 1
Algebra liniowa
Przykład:
Zdefiniuj macierz A o wymiarze 4×4, 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
Przykład:
Rozwiąż układ równań liniowych:
⎧x + 2 y − z = 3
⎪
⎨3x − 4 y + 2 z = −5
⎪5 x − 2 y + 3 z = 2
⎩
–12–
UWAGA: Układ ten można zapisać w postaci macierzowej: AX = B , gdzie:
⎡1 2 − 1⎤ ⎡x ⎤ ⎡ 3⎤
⎢
A = ⎢3 − 4 ⎢ ⎥
2 ⎥ , X = ⎢ y ⎥ , B = ⎢⎢ −5 ⎥⎥ ,
⎥
⎢⎣5 − 2 3 ⎥⎦ ⎢⎣ z ⎥⎦ ⎢⎣ 2 ⎥⎦
dla której rozwiązanie ma postać: X = A −1B
Operacje na łańcuchach
Zmienna typu łańcuchowego może zawierać nazwę instrukcji, którą można wykonać
używając funkcji eval.
Przykład:
» t=[0:pi/3:2*pi];
» s=‘sin(t)’;
» eval(s)
ans =
0 0.8660 0.8660 0 -0.8660 -0.8660 0
–13–
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:
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
clear
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
Operatory logiczne
== równe
~= różne
< mniejsze
> większe
<= mniejsze równe
>= większe równe
& i (odpowiada koniunkcji w matematyce)
| lub (odpowiada alternatywie w matematyce)
–14–
Instrukcje sterujące
PĘTLA FOR
Działanie pętli FOR polega na wykonaniu ciągu_instrukcji dla kolejnych wartości
zmiennej_iterowanej zwanej też licznikiem pętli. 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).
SKŁADNIA
for zmienna_iterowana = macierz_wartości
ciąg_instrukcji
end
Przykład:
Napisz skrypt, który generuje wektor A o wymiarze 1×5 o elementach spełniających
zależność:
Ai = 1 + i , i = 1..5
Rozbuduj powyższy skrypt, aby generował macierz A o wymiarze 10×5, którego elementy
spełniają zależność:
–15–
i
Aij = 1 + , i = 1..10, j = 1..5
j
Dalej proces ten przebiega analogicznie aż do osiągnięcia przez licznik pętli zewnętrznej I
wartości 10. Tak zdefiniowana pętla wygeneruje elementy macierzy A o indeksach od
A(1,1) do A(10,5).
–16–
PĘTLA WHILE
Działanie pętli WHILE polega na wykonaniu ciągu_instrukcji dopóki
wyrażenie_warunkowe jest spełnione.
SKŁADNIA
while wyrażenie_warunkowe
ciąg_instrukcji
end
Poniższy przykład realizuje zwiększanie wartości licznika i dopóki ten nie osiągnie
wartości 100. Wtedy następuje wyjście z pętli.
Przykład:
% Próba realizacji pętli WHILE
clear
i=0;
while i<100
i=i+1
end
Przykład:
% Program obliczający pierwiastki kwadratowe
clear
clc %polecenie czyści okno poleceń
klucz = 't';
while klucz == 't'
p = input('Podaj wartość p = ')
disp('Pierwiastek kwadratowy wynosi')
Q = sqrt(p)
klucz = input('Czy chcesz liczyć dalej? [t/n] :','s')
end
–17–
INSTRUKCJA WARUNKOWA IF
SKŁADNIA
if wyrażenie_warunkowe1
ciąg_instrukcji1
elseif wyrażenie_warunkowe2
ciąg_instrukcji2
else
ciąg_instrukcji3
end
Przykład:
Napisz skrypt wybierający z wektora w element o wartości większej niż wartość zadana
przez użytkownika.
–18–
Przykład:
Napisz skrypt używając instrukcji warunkowej IF do zrealizowania wyboru jednej z
dostępnych opcji (polecenie menu):
Funkcje
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ą.
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.:
–19–
» silnia(5)
ans =
120
Przykład:
Napisz program wyznaczający największy wspólny dzielnik dwóch podanych przez
użytkownika liczb naturalnych. Program ma sprawdzać czy wprowadzone liczby są
liczbami naturalnymi.
WSKAZÓWKA: Wykorzystaj funkcję round(n).
–20–
% Program znajduje największy wspólny dzielnik (NWD)
% dwóch liczb naturalnych n1 i n2.
clear
clc
disp('Znajdowanie największego wspólnego dzielnika (NWD)')
disp('dwóch liczb naturalnych.');
disp('Wprowadź liczby n1, n2');
%wprowadzanie danych
n1=input('Podaj n1 = ');
%sprawdzenie czy n1 jest liczbą naturalną
while n1<0 | n1~=round(n1)
disp ('Podaj liczbę naturalną')
n1=input('Podaj n1 = ');
end
n2=input('Podaj n2 = ');
%sprawdzenie czy n2 jest liczbą naturalną
while n2<0 | n2~=round(n2)
disp ('Podaj liczbę naturalną')
n2=input('Podaj n2 = ');
end
%obliczenia
%ustalenie wspólnych dzielników
if n1<=n2
n=n1;
else n=n2;
end
k=0;%aktualna ilość wspólnych dzielników
for i=1:n
%sprawdzenie czy dzielenie jest bez reszty
if (mod(n1,i)==0)&(mod(n2,i)==0)
k=k+1;
wspolny(k)=i;
end
end
disp('Wspólne dzielniki są następujące:');
disp(wspolny)
%znalezienie NWD
nwd=wspolny(1);
for i=2:k
if wspolny(i)>nwd
nwd=wspolny(i);
end
end
disp('Największy wspólny dzielnik NWD wynosi: NWD = ')
disp(nwd)
–21–
Zapisz program pod nazwą najwiekszy.m i uruchom.
Przykład:
Napisz program sortujący podane przez użytkownika dane liczbowe. Użytkownik podaje
n = liczbę danych do posortowania. Program ma sprawdzać czy wprowadzona liczba n jest
liczbą naturalną.
WSKAZÓWKA: Wykorzystaj funkcję round(n).
–22–
Grafika dwuwymiarowa
Przykład:
Napisz skrypt kreślący przykładowy wykres wraz z opisem.
–23–
Rysowanie
Grafika trójwymiarowa
Przykład:
Napisz skrypt kreślący krzywą w przestrzeni trójwymiarowej.
–24–
Zapisz go pod nazwą krzywa3d.m i uruchom.
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 -π ,π .
–25–
Inne elementy rysunków, takie jak: opisy, etykiety, linie pomocnicze wykonuje się
podobnie, jak w grafice dwuwymiarowej. Dodatkowo jednak należy zdefiniować elementy
dotyczące trzeciego wymiaru, np.:
text(x,y,z,’tekst’)
Przykład 1:
%rysowanie wykresu
clf
if(o==1)
y=exp(x);
plot(x,y,'b-')
title('Wykres funkcji f(x)=exp(x)')
elseif(o==2)
y=exp(x+sin(x));
plot(x,y,'m-')
title('wykres funkcji f(x)=exp(x+sin(x))')
elseif(o==3)
y=exp(x+log(x));
–26–
plot(x,y,'r-')
title('wykres funkcji f(x)=exp(x+log(x))')
elseif(o==4)
y=exp(x+(3*x+1));
plot(x,y,'g-')
title('wykres funkcji f(x)=exp(x+(3*x+1))')
end
xlabel('x')
ylabel('f(x)')
grid
text(x(1),y(1),num2str(y(1)))
text(x(101),y(101),num2str(y(101)))
save wyniki.mat
–27–
Przykład 2:
% Program rysuje wykresy sił tnących i momentów zginających
% belki wolnopodpartej obciążonej siłą skupioną
% Dane do programu:
% l - długość belki
% P - wartość siły skupionej
% x - odległość punktu przyłożenia siły od lewej podpory
clear
clc
disp('Program rysuje wykresy sił tnących i momentów
zginających belki wolnopodpartej')
disp(' obciążonej siłą skupioną przyłożoną w wybranym
punkcie belki')
disp(' ')
%wprowadzanie danych
l=input('Podaj długość belki wolnopodpartej l= ');
while l<=0
disp(' !!! Długość musi być wartością dodatnią !!!')
l=input('Podaj długość belki wolnopodpartej l= ');
end
P=input('Podaj wartość siły skupionej P= ');
x=input('Podaj odległość punktu przyłożenia siły od lewej
podpory belki x= ');
while x<0 | x>l
disp('!!! Punkt przyłożenia siły musi się znajdować na długości belki !!!')
x=input('Podaj odległość punktu przyłożenia siły od lewej
podpory belki x= ');
end
%obliczanie reakcji
disp(' ');
disp('Reakcja na lewej podporze:');
Ra=P*(l-x)/l
disp('Reakcja na prawej podporze:');
Rb=P*x/l
%rysowanie wykresów
clf
–28–
subplot(2,1,1)
plot(i,T,'Color','red')
line([0 l],[0 0],'Color','red')
xlabel('Odleglosc')
ylabel('Sila tnaca')
subplot(2,1,2)
plot(i,M,'Color','red')
line([0 l],[0 0],'Color','red')
xlabel('Odleglosc')
ylabel('Moment zginajacy')
text(x,-Mmax,num2str(Mmax))
save wyniki.mat
–29–
Przykład 3:
%wprowadzanie danych
h=input('Podaj całkowitą wysokość przekroju h= ');
while h<=0
disp(' Wysokość musi być wartością dodatnią!')
h=input('Podaj całkowitą wysokość przekroju h= ');
end
b=input('Podaj szerokość półki b= ');
while b<=0
disp(' Szerokość musi być wartością dodatnią!')
b=input('Podaj szerokość półki b= ');
end
t=input('Podaj grubość środnika t= ');
while t<=0 | t>=b
disp('Grubość środnika musi być wartością dodatnią i mniejszą od szerokości półki!')
t=input('Podaj grubość środnika t= ');
end
d=input('Podaj grubość półki d= ');
while d<=0 | d>=h
disp('Grubość półki musi być wartością dodatnią i mniejszą od wysokości przekroju!')
d=input('Podaj grubość półki d= ');
end
–30–
disp('Momenty bezwładności:')
Ix=b*d^3/12 + b*d*(yc-d/2)*(yc-d/2) + t*(h-d)^3/12 +...
t*(h-d)*(d+(h-d)/2-yc)*(d+(h-d)/2-yc)
Iy=d*b^3/12 + (h-d)*t^3/12
disp('Kwadraty promieni bezwładności:')
ix2=Ix/A
iy2=Iy/A
save wyniki.mat
–31–
teowego o całkowitej wysokości h = 16, szerokości półki b = 15, grubości środnika t = 5 i
grubości półki d = 4, będące przykładowym wynikiem działania programu:
Pole powierzchni:
A =
120
Odległość środka ciężkości od góry przekroju
yc =
6
Momenty bezwładności:
Ix =
2720
Iy =
1250
Kwadraty promieni bezwładności:
ix2 =
22.6667
iy2 =
10.4167
Współrzędne wierzchołków rdzenia w układzie przechodzącym
przez środek ciężkości przekroju :
ans =
0 -3.7778
-1.3889 0
-1.5625 1.4167
0 2.2667
1.5625 1.4167
1.3889 0
–32–
Przykład 4:
–33–
Przykład 5:
clear
clc
–34–
am = input('Podaj amplitudę sygnału am : ');
while am<=0
disp(' Podaj wartość większą od zera !')
am=input('Podaj amplitudę sygnału: ');
end
w = 2*pi*f;%obliczenie częstości
x = am*sin(w*t);%generacja sygnału sinusoidalnego
%************************************************************
%obliczenia
%************************************************************
%wydruk odpowiedzi
plot(base,powerxn);
title(['Transformata Fouriera sygnalu sinusoidalnego'...
'o czestotliwosci f = 'num2str(f)...
'i amplitudzie am = 'num2str(am)]);
xlabel('czestotliwosc f');
ylabel('znormalizowany modul wartosci wyjsciowych FFT');
–35–
Przykład 6:
–36–
Przykład 7:
–37–
plot(t,q,t,obw,t,-obw)
title('Drgania swobodne tlumione ukladu o jednym stopniu
swobody')
xlabel('czas [s]')
ylabel('Przemiesczenie q [cm]')
grid
Przykład 8:
–38–
% pierwszego (x'=Ax+BF, y=Cx+Du). W analizowanym przypadku A
% jest macierzą 2x2, B jest wektorem o wymiarze 2x1, C jest
% wektorem o wymiarze 1x2 a D jest wektorem 1x1. W programie
% macierze te są generowane jawnie.
% Można jednak wygenerować je automatycznie używając funkcji
% ord2 w postaci [a,b,c,d] = ord2(w,ksi) dostępnej w
% toolboxie Control.
clear
clc
%wybór funkcji obciążenia
o=menu('Wybierz funkcję obciążenia','Obciążenie
F=sin(w*t)',...
'Obciążenie "zęby piły"','Obciążenie impulsem');
disp(' ')
w=input('Podaj częstość kołową układu : ');
ksi=input('Podaj współczynnik tłumienia : ');
while w<=0
disp(' Podaj wartość większą od zera !')
w=input('Podaj częstość kołową : ');
end
–39–
%************************************************************
%generacja macierzy układu równań
a = [0 1;-w^2 -2*ksi*w];
b = [0 1]';
c = [1 0];
d = [0];
%************************************************************
%obliczenia
%************************************************************
%drukowanie odpowiedzi
figure(1);
plot(T,F);
grid;
title('Obciazenie');
xlabel('czas [s]');
ylabel('F');
figure(2);
plot(T,Xrozw(:,1));
grid;
title('Przemieszczenie');
xlabel('czas [s]');
ylabel('x');
figure(3);
plot(T,Xrozw(:,2));
grid;
title('Predkosc');
xlabel('czas [s]');
ylabel('v');
–40–
–41–
BIBLIOGRAFIA:
–42–
Funkcje matematyczne
sin(x) sinus
cos(x) cosinus
tan(x) tangens
asin(x) arcus sinus
acos(x) arcus cosinus
atan(x) arcus tangens
sinh(x) sinus hiperboliczny
cosh(x) cosinus hiperboliczny
tanh(x) tangens hiperboliczny
asinh(x) arcus sinus hiperboliczny
acosh(x) arcus cosinus hiperboliczny
atanh(x) arcus tangens hiperboliczny
sqrt(x) Pierwiastek kwadratowy
exp(x) ex
log(x) Logarytm naturalny
log2(x) Logarytm przy podstawie 2
log10(x) Logarytm przy podstawie 10
Funkcje dodatkowe
Zaokrągla elementy macierzy x do najbliższej liczby
round(x)
całkowitej
Oblicza resztę z dzielenia odpowiadających sobie
rem(x,y)
elementów macierzy x i y
gcd(a,b) Oblicza największy wspólny dzielnik liczb a i b
lcm(a,b) Oblicza najmniejszą wspólną wielokrotną liczb a i b
–43–