1.Podaj i opisz znane Ci polecenia do generowania macierzy przynajmniej do jednego napisz sposób wywołania rezultat działania.
rand(n) - generuje macierz nxn wypełnioną pseudolosowymi liczbami z przedziału [0, 1] o rozkładzie jednostajnym
randn(n) - generuje macierz nxn wypełniona pseudolosowymi liczbami o rozkładzie normalnym ze średnią 0 i wariancją 1
eye(n) - generuje jednostkową macierz nxn
ones(n) - generuje macierz nxn o elementach równych 1
zeros(n) - generuje zerową macierz nxn
magic(n) - generuje macierz nxn, której suma elementów w każdym wierszu, kolumnie i przekątnej jest taka sama
2. Podaj dwa alternatywne sposoby generowania wektora. Opisz działanie tych poleceń różnice miedzy nimi.
-linspace(x1, x2, n) - generuje n liczb z przedziału [x1, x2] o rozkładzie liniowym
np.A = linspace(1, 5, 5)
A = 1 2 3 4 5
-logspace(x1, x2, n) - generuje n liczb z przedziału [x1, x2] o rozkładzie logarytmicznym
A = logspace(1, 5, 5)
A =10 100 1000 10000 100000
3.Jeżeli A=[123456;098765;110022]napisz wynik działania A (:,[1:3,5]
zwróci macierz składająca się ze wszystkich wyrazów w kolumnach 1-3 i 5
4.Podaj w jaki sposób dopisać wiersz do już istniejącej macierzy A składającej się z liczb 20,15,17
A = [20,15,17]
A = [A; [13,7,21]] lub A(2, :) = [13,7,21]
A =
20 15 17
13 7 21
5. Napisz wynik działania A.*B oraz A*A jeśli A=[12;23] B=[11,21]
A=[12;23] B=[11,21]
A*B =
132 252 -mnożenie macierzowe
253 483
A.*A =
144 -mnożenie tablicowe
529
A*A oraz A.*B - nie wykonają się ponieważ nie zgadza się rozmiar macierzy
6.Podaj polecenia umożliwiające generowanie transmitancji zastępczej dla określonego układu połączenia
Kr = tf([4], [1])
Kr = 4
T = feedback([Kr], [1])
T = 0.8
7. Omów sposób zastosowania procedury ode 45 do równań różniczkowych.
Do rozwiązywania układów równań różniczkowych służą funkcje między innymi: ode23, ode45 oraz ode115. Różnią się one sposobem rozwiązywania układu i zaokrąglania liczb. Najczęściej stosowana jest funkcja ode45. Parametrami funkcji są:
nazwa m-pliku, w którym zdefiniowany jest układ równań
podstawa czasu - X
warunki początkowe - P
z = ode45(`uklad.m', X, P)
8.Napisz m.plik rysujący wykres funkcji y=3x+1 w przedziale [-3,3] linia czerwona kreskową
x = [-3:0.1:3];
y = 3 * x + 1;
plot(x, y, `r—`)
9. Dla wielomianu y=x3+3x2-9x-2 oblicz i wykreślić przebieg w przedziale [-5,5 do3] pierwiastki.
y = [1 3 9 2]
pierwiastki = roots(y)
x = [-5.5:0.1:3];
y = polyval(y, x);
plot(x, y)
10. Opisz strukturę m-funkcji oraz pochodną
M-funkcja składa się z:
-słowa kluczowe function, nazwy zmiennej wyjściowej, nazwy funkcji, argumenty funkcji, ciało funkcji
------------------- początek m-funkcji -------------------
%komentarz pojawiający się po wywołaniu polecania help fun
Function y=fun(x) %komentarz po pierwszej komendzie nie jest wyświetlany jako help
y=1./(1+x.^2);
------------------- koniec m-funkcji --------------------
Pochodna wielomianu:
polyder(A) - zwraca wektor, którego elementy są współczynnikami pochodnej wielomianu o współczynnikach zapisanych w wektorze A
A = [4 5 1 3]
dY = polyder(A)
dY =
12 10 1
polyval(dY, X) - zwraca wartości funkcji dY na przedziale X
Pochodna funkcji wymiernej:
Wzór ogólny pochodnej funkcji można uzyskać jedynie dla wielomianów, dla pozostałych funkcji można obliczyć tylko jej wartości.
L = [1 0 0 0]
M = [1 0 0 1]
[dL, dM] = polyder(L, M)
dY = polyval(dL, X) ./ polyval(dM, X)
Pochodne pozostałych funkcji:
Aby policzyć wartości innych funkcji na przedziale X należy skorzystać z definicji (iloraz różnicowy).
diff(A) - zwraca wektor, którego elementy powstały poprzez różnice kolejnych elementów wektora A, tzn. [A2 - A1, A3 - A2, …, An - An-1]; długość tego wektora jest o jeden mniejsza od długości wektora A, ponieważ nie można nic odjąć od A1
A = sin(X)
dY = diff(A) ./ diff(X)
1.Zmienna globalna - wyjaśnić
Zmienna globalna to taka zmienna, do której dostęp możliwy jest z każdego miejsca programu. Po jej zadeklarowaniu wszystkie funkcje i skrypty mogą z niej korzystać. Pozwala to zaoszczędzić pamięć. Jeżeli zmienna globalna została zadeklarowana, ale nie przypisano do niej jeszcze żadnej wartości, wynikiem jej wywołania będzie zbiór pusty. Przykład deklaracji zmiennej globalnej `x':
>> global x
2.Wyniki działań: A.*B A*B i jakieś tam inne operacje A [1 2;2 3] B[1 1;2 1]
Jeżeli A = [ 1 2 oraz B = [ 1 1 to:
2 3 ] 2 1 ]
A.*B = [ 1*1 2*1 = [ 1 2
2*2 3*1 ] 4 3 ]
A*B = [ 1*1+2*2 1*1+2*1 = [ 5 3
2*1+3*2 2*1+3*1 ] 8 5 ]
3.Operacja wyciągania z macierzy A[3, 1:5] [.....]
Polecenie A[3, 1:5] wywoła elementy macierzy A z wiersza 3 i kolumn od 1 do 5 (co 1)
4.Napisz polecenie umożliwiające wykreślenie funkcji: V=Aebsin(t) dla t[0;20]
A=1
B=...
Zrobić do wykresu: legenda, podpisać osie, tytuł wykresu, wyświetlanie , pewnie jakąś kolorową przerywaną linią)
t = 0:20;
A = 1;
b = 2;
V = A*exp(b*sin(t));
plot (t,V,'r:');
title (`Zadanie 4');
xlabel (`t');
ylabel (`V');
legend ('V = A*exp(b*sin(t))')
5.Różnica miedzy m-plikiem skryptowym a funkcyjnym
M-plik skryptowy to odrębny program, który wywołujemy wpisując jego nazwę (bez rozszerzenia) w oknie głównym Matlaba. Następuje szereg procedur zapisanych w skrypcie.
M-plik funkcyjny zawiera jedynie funkcję, którą możemy się posłużyć do naszych obliczeń, bądź też zwraca wynik dla podanej przez nas wartości. Odnosimy się do niej używając jej nazwy (nazwy pliku, w którym została zapisana).
Przykład m-pliku skryptowego: Przykład m-pliku funkcyjnego:
x=input (`Podaj wartość x: ') function y = funkcja(x)
y=sin(x.*x) y=sin(x.*x)
6.Napisz skrypt obliczający równanie kwadratowe
clear all
clc
disp('Rownanie kwadratowe a*x^2+b*x+c')
a=input('Podaj a: ');
b=input('Podaj b: ');
c=input('Podaj c: ');
delta=b*b-4*a*c;
disp('Szukane pierwiastki:')
x1=(-b-sqrt(delta))/2*a
x2=(-b+sqrt(delta))/2*a
7.napisz m-plik pochodna funkcji : y(x)=x2/(x3+1)
l=[1 0 0];
m=[1 0 0 1];
disp('Zadana funkcja:')
G=tf(l,m)
l1=polyder(l);
m1=polyder(m);
disp('i jej pochodna:')
G1=tf(l1,m1)
8.napisz m-plik obliczający całke y=x3+3x2-9x-2 <-5,5>
Plik „calka.m”:
function y = calka(x)
y=x.^3+3*x.^2-9*x-2
W oknie głównym:
quad('calka',-5,5)
9.procedura ode 45 - wyjaśnić
ode45(`nazwa_funkcji',wektor_przedz_czas,wektor_war_poczatk)
10.Równanie opisujące PID , schemat, widok wykresu podczas robienia i symulacji zapisanie do pliku i tam inne bajery
11.zamodelowanie schematu:
y..+4y.+29y=0
y.(0)=15 y(0)=15
Zapewnić obserwację sygnału y I możliwość późniejszego odtworzenia
W obu integratorach w polu „Initial condition” wpisujemy wartość „15”
12.Opracować model układu opisanego układem równań różnicowych dx1/dt=ax1(t)-bx2(t) +cu1(t) ,,,, dx2/dt=ex1(t)-cu2(t)
x1,x2-- zmienne
u—wymuszenia
cu1 ma postać skoku jednostkowego au2 ma wartość stałą
a,b,c,e - stałe współczynniki
dx1/dt = ax1(t) - bx2(t) + cu1(t)
dx2/dt = ex1(t) - cu2(t)
13.Opracować model regulatora PID na wejście którego jest skok jednostkowy i wykreśla jego odpowiedź. Założyć następujące parametry regulatora T1=0,001s
K=10 Td=0.008s
reshape(macierz,w,k)- zmiana rozmiaru macierzy na w wierszy i k kolumn
np. reshape(a,1,6)
repmat(macierz,w,k)- powielenie macierzy
np. repmat(b,2,3)- robi jedną macierz 2x3 z macierzy b
p=rem(a,2)==0)- dzielenie macierzy a przez 2 z resztą, jeżeli jest reszta to mamy 0
size a- rozmiar macierzy a, np. mamy macierz 3x4, >>[m,n]=size(a) .. wyskakuje m=3,n=4
axis([xmin,xmax,ymin,ymax])- zmiana rozmiaru wykresu
subplot(liczba okien w pionie, liczba okien w poziomie, aktywne okno)
bez kropki- operacje macierzowe, z kropką- operacje tablicowe
solve- oblicza pierwiastki, solve(`wpisujemy równanie')
roots(W)- miejsca zerowe wielomianu W
conv- iloczyn wielomianu, deconv-iloraz wielomianu
polyval- punkty, w których ma policzyć wartość, np. >>x=[-1:0.1:1]; y=polyval(W,x); plot(x,y)
L=polyder(W)- liczy pochodną wielomianu (jako wielomian L)
pow2(0:1:100)- wyświetla potęgi liczby 2 od 0 do 100, co 1
GRAFIKA:
Kolory:
b-niebieski, g-zielony, r-czerwony, c-błękit, m-purpura, y-żółty, k-czarny, w-biały,
Rodzaje linii:
- ciągła, : punktowa, -- kreskowa
Symbole do wykresów:
. punkt, o okrąg, x znak x, + plus, * gwiazdka, s kwadrat, d diament, v trójkąt,
Zadanie 1.
Rozwiązać poniższy układ równań:
a) metodą Eulera:
Tworzę nowy m-plik skryptowy:
dt=0.001;
tczas=2;
x(1)=1;
y(1)=3;
z(1)=0;
for i=1:tczas/dt
t(i+1)=i*dt;
dx=(2*x(i)-3-x(i)*y(i))*dt;
dy=(3*y(i)-2+2*x(i))*dt;
dz=(4*x(i)-y(i))*dt;
x(i+1)=dx+x(i);
y(i+1)=dy+y(i);
z(i+1)=dz+z(i);
end
subplot(1,3,1)
plot(t,x,'LineWidth',[2])
legend('x(t)');
subplot(1,3,2)
plot(t,y,'LineWidth',[2])
legend('y(t)');
subplot(1,3,3)
plot(t,z,'LineWidth',[2])
legend('z(t)')
b) z pomocą ode45:
Tworzę nowy m-plik funkcyjny:
function dy=rozniczki(t,y)
dy(1)=3*y(1)-y(2)+2*y(3);
dy(2)=4*y(3)-y(1);
dy(3)=2*y(3)-3-y(3)*y(1);
dy=dy';
end
I w głównym oknie Matlaba uruchamiam m-plik wpisując:
>> [t,y]=ode45('rozniczki',[0,1],[3,0,1]);
>> subplot(1,3,1);
>> plot(t,y(:,3),'LineWidth',[2])
>> legend('x(t)');
>> subplot(1,3,2);
>> plot(t,y(:,1),'LineWidth',[2])
>> legend('y(t)');
>> subplot(1,3,3);
>> plot(t,y(:,2),'LineWidth',[2])
>> legend('z(t)');
Zadanie 2.
Rozwiązać podaną całkę:
Tworzę m-plik funkcyjny:
function q=calka(x,y)
q=y.^3*exp(x.^2);
end
I uruchamiam go wpisując w oknie głównym:
>> q1=dblquad('calka',-2,2,-2,2)
Zadanie 3.
Napisać m-plik funkcyjny, który oblicza silnię z podanej liczby
Tworzę m-plik funkcyjny:
function[wynik]=silnia(n)
wynik=1;
for i=1:n
wynik=wynik*i;
end
Żeby obliczyć silnię z jakiejś liczby wpisuję w oknie głównym, np.:
>> silnia(7)
Zadanie4 .Dany jest wielomian
. Wykreślić za pomocą funkcji subplot na wykresie 1 przebieg wielomianu w przedziale x
[-3,3] o kroku 0,01. Na wykresie 2 wykreślić pochodną wielomianu (poleceniem polyder).
x=[-3:0.01:3];
W1=[3,0,0,2,0,-8,1];
W2=[5,0,-1,0,1];
W=deconv(W1,W2)
y=polyval(W,x);
subplot(2,1,1)
plot(x,y)
grid
xlabel('os X');
ylabel('os Y');
title('wielomian W','FontSize',[15]);
Wprim=polyder(W);
yprim=polyval(Wprim,x);
subplot(2,1,2)
plot(x,yprim)
grid
xlabel('os X');
ylabel('os Y');
title('pochodna wielomianu W','FontSize',[15]);
Zadanie 5.
Napisać m-plik skryptowy oraz m-plik funkcyjny obliczający pierwiastki równania kwadratowego ax2+bx+c=0. W przypadku m-pliku skryptowego parametry a,b,c należy wczytać z klawiatury, natomiast w przypadku funkcji parametry te muszą być podane podczas jej wywołania. Rozpatrzyć przypadki gdy
<0,
=0,
>0.
Rozw.:
a) m-plik skryptowy
disp('Obliczanie pierwiastków równania kwadratowego ax^2+bx+c=0')
a=input('Podaj a: ');
b=input('Podaj b: ');
c=input('Podaj c: ');
delta=b^2-4*a*c;
if a~=0
disp('Jest to rownanie kwadratowe');
if delta>0
x1=(-b-sqrt(delta))/(2*a);
x2=(-b+sqrt(delta))/(2*a);
disp('równanie ma dwa pierwiastki:')
x1
x2
elseif delta==0
x=-b/(2*a);
disp('równanie ma jeden pierwiastek podwójny:')
x
else disp('Równanie nie ma pierwiastków')
end
elseif a==0 && b==0 && c==0
disp('Równanie tożsamościowe')
elseif a==0 && b==0 && c~=0
disp('Równanie sprzeczne')
else disp('To nie jest rownanie kwadratowe')
end
b) m-plik funkcyjny
Tworzę nowy m-plik:
function z=rownanie(a,b,c)
delta=b*b-4*a*c;
if delta>0
disp('dwa pierwiastki rzeczywiste');
x1=(-b-sqrt(delta))/(2*a);
x2=(-b+sqrt(delta))/(2*a);
disp('x1=');
disp(x1);
disp('x2=');
disp(x2);
elseif delta==0
disp('rownanie ma jeden pierwiastek podwojny');
x1=(-b)/(2*a);
disp('x= ')
else
disp('rownanie nie ma pierwiastkow');
end
I wywołuję funkcję w oknie głównym. Np.:
>> rownanie(-2,3,-1)
Zad. 6
Rozwiązać metodą Eulera:
Rozw.:
dt=0.001;
tczas=2;
x(1)=1;
y(1)=3;
t(1)=0;
i=1:2000;
for i=1:tczas/dt
t(i+1)=i*dt;
dx=(2*x(i)-3)*dt;
dy=(3*x(i)*y(i))*dt;
x(i+1)=dx+x(i);
y(i+1)=dy+y(i);
end
Zad. 7
Rozwiązać całkę:
Rozw.:
function y=calka(x)
y=x.^(-0.5).*exp(x);
end
q1=quad8(`calka',0,1)
Zad. 8
Napisz m-plik obliczający całke y=x3+3x2-9x-2 <-5,5>
Plik „calka.m”:
function y = calka(x)
y=x.^3+3*x.^2-9*x-2
W oknie głównym:
quad('calka',-5,5)
Zad.9
Oblicz wartość funkcji f(x) określonej wzorem:
Rozw.:
if x>3
f=x.*x-6;
elseif x>=-1&x<=3
f=x;
else
f=x.*x-2;
end
Zad. 10
Obliczyć
h=0.1; x=-3:h:3
disp(`licznik i mianownik funkcji:')
L=[1 0] i M=[1 0 1]
disp(`licznik i mianownik funkcji pochodnej:')
[L1 M1]=polyder(L,M)
y=polyval(L,x)./polyval(M,x)
yprim=polyval(L1,x)./polyval(M1,x)
subplot(2,1,1), plot(x,y)
subplot(2,1,2), plot(x,yprim)
Zad.11
Zróżniczkować, wykreślić wielomian i jego pochodną dla x<0,3>:
y(x)=-x3+8x
Rozw.:
h=0,05; x=0:h:3
disp(`wsp. wielomianu')
C1=[-1 0 8 0]
y1=polyval(C1,x); %wartość wielomianu
C2=polyder(C1); %rozniczkowanie wielom.
y2=polyval(C2,x); wartość poch.
subplot(2,1,1), plot(x,y1)
subplot(2,1,2), plot(x,y2)
STABILNOŚĆ:
L=[... .. ..]; M=[… .. …]
H=tf(L,M)- wyświetli nam transmitancję
zero(H)- zera, pole(H)-bieguny
pzmap(H)-wykres zer i biegunów
step(H)- skok jednostkowy, impulse(H)-impuls Diraca, nyquist(H), nichols(H).nichols(L,M), bode(H), margin(H)-pokazuje zapas wzmocnienia, fazy
połączenia transmitancji:
szeregowe:
[L,M]=series(L1,M1,L2,M2) lub G3=series(G1,G2)
Równoległe:
[L,M]=paralel(L1,M1,L2,M2) lub G3=paralel(G1,G2) (jak ujemne to minus przy L2 lub G2)
Sprzężenie zwrotne:
[L.M]=cloop(L1,M1,-1)- jak nie ma G2
[L,M]=feedback(L1,M1,L2,M2,-1)- jak jest jakieś G2
Albo G=feedback(G1,1,-1) .. sprzężenie dodatnie bez minusa
dx1/dt
x1
ax1
u1
ax1
cu1
bx2
x2
dx2/dt
ex1
u2
cu2