MOiPP Wykład 7 Matlab cd.
Obliczenia kinematyczne - symbolicznie Znane wzory Stąd wynika:
Jeśli a=const, ruch jednostajnie przyspieszony dla przypadku: s0=0, v0=0 clc;clear; syms a t v=int(a,t,0,t) s=int(v,t,0,t) %lub alternatywnie s2=int(int(a,t,0,t),t,0,t) a=3; %jednostka [m/s2] v=subs(v) s=subs(s) subplot(2,1,1) ezplot(v,[0 10]); title('prędkość') subplot(2,1,2) ezplot(s,[0 10]); title('droga') t=10; %obliczamy drogę po 10 sek. s10=subs(s) v = a*t s = 1/2*a*t^2 s2 = s10 = 150
a=const
Hamowanie: a=-5 m/s^2 v0=100 km/h clc;clear; syms A B t v0 a=-5 %constans – ujemne! v=v0 +int(a,t,0,t) s=int(v,t,0,t) v0=100*10/36 subplot(3,1,1) ezplot(-5+0*t,[0 10]); title('przyspieszenie') disp('predkosc') v=subs(v) s=subs(s); subplot(3,1,2) ezplot(v,[0 10]); title('prędkość') subplot(3,1,3) ezplot(s,[0 10]); title('droga')
Interpretujemy poprawność: Prędkość maleje, gdy ujemna pojazd się cofa czyli droga zaczyna maleć (wracamy do miejsca startu) Obliczenie czasu powrotu do miejsca startowego: … %powrót sp=solve(s) subs(sp(2)) 11.1 s
Jeśli przyspieszenie dane funkcją, np.: a=f(t)=A*e-Bt clc;clear; syms A B t a=A*exp(-B*t) v=int(a,t,0,t) s=int(v,t,0,t) A=3;B=0.2; a=subs(a) subplot(3,1,1) ezplot(a,[0 10]); title('przyspieszenie') v=subs(v); s=subs(s); subplot(3,1,2) ezplot(v,[0 10]); title('prędkość') subplot(3,1,3) ezplot(s,[0 10]); title('droga') t=10; %obliczamy drogę po 10 sek s10=subs(s) a = A*exp(-B*t) v = -A*(-1+exp(-B*t))/B s = A*(-1+B*t+exp(-B*t))/B^2 3*exp(-1/5*t) s10 = 85.1501
Wykresy dla A=3 m/s2 B=0.2 Interpretujemy poprawność: Prędkość rośnie - coraz wolniej, bo przyspieszenie spada, choć nadal jest dodatnie
Zadanie: Prędkość początkowa auta: v0=100 m/s, Przyspieszenie jest funkcją a(t)= -0.2*t Po jakim czasie auto się zatrzyma? Teraz rozwiązujemy równanie różniczkowe: clc, clear syms t %rozw. równania różniczkowego v=dsolve('Dv=-0.2*t','v(0)=100') % szukamy miejsca zerowe dla v tk=subs(solve(v)) ezplot(v, [0 tk(2)]) hold on % oś x ezplot(0*t,[0 tk(2)]) title('v(t)') Rozwiązanie: tk=31.6228 sekund
Zadanie: Prędkość początkowa auta: v0=100 km/h, Przyspieszenie jest funkcją a(t)= -3exp(-2t) Do jakiej prędkości ustalonej zmierza pojazd Teraz rozwiązujemy równanie różniczkowe: %hamowanie clc, clear syms t %rozw. równania różniczkowego v=dsolve('Dv=-3*exp(-2*t)','v(0)=100*10/36') % wykres prędkości ezplot(v, [0 100]) hold on % oś x ezplot(0*t,[0 100]) title('v(t)') vd=subs(limit(v,t,inf)) %granica (limes dla t∞) Rozwiązanie: vd= 26.2778 10
Na marginesie: Lepsza kontrola zakresu osi y dla funkcji symbolicznej clc %Kontrola zakresu osi y dla funkcji symbolicznej syms x f = sin(x) h=ezplot(f,[0 2*pi]); %get X and Y data X = get(h,'XData'); %dostęp do wektora danych (520 punktów) Y = get(h,'YData'); %to samo dla y %teraz używamy plot plot(X,Y) axis( [0 2*pi -3 3])
Cykloida – droga punktu położonego na toczącym się kole
a=wt jeśli w=1 to a=t stąd
x=r (t-sin t) y=r (1-cos t) x=r (t-c sin t) y=r (1-c cos t) Można wyprowadzić ogólniejsze wzory: x=r (t-c sin t) y=r (1-c cos t) gdzie parametr c ilustruje położenie punktu: jeśli c=1 to punkt znajduje się na obwodzie koła jeśli c<1 to punkt znajduje się wewnątrz koła jeśli c>1 to punkt znajduje się poza kołem
clc,clear syms t r c x=r*(t-c*sin(t)) y=r*(1-c*cos(t)) t=0:0.1:4*pi; x=subs(x); y=subs(y); r=1;c=1; %punkt na obwodzie koła x1=subs(x); y1=subs(y); y0=0*t;%oś x r=1;c=0.5; %punkt w połowie obwodu x2=subs(x); y2=subs(y); r=1;c=1.5; %punkt poza kołem x3=subs(x); y3=subs(y); plot(x1,y0,'k',x1,y1,'b',x2,y2,'g',x3,y3,'r')
Helisa – równania parametryczne x = r sin t x = r cos t z = b t r=1,b=1 t=0:0.01:6*pi x=r*sin(t); y=r*cos(t); z=b*t; plot3(x,y,z) .. a jak obliczyć jej długość?
Analogia do poznanego wzoru na długość krzywej płaskiej clc, clear, syms t r b a x=r*sin(t); y=r*cos(t); z=b*t; a=6*pi; L=int(sqrt(diff(x,t)^2+diff(y,t)^2+diff(z,t)^2),t,0,a) r=1;b=1; L=subs(L)
Siła tnąca dla utwierdzonego jednostronnie pręta % Funkcja oblicza wartość siły tnącej w punkcie x pręta % dla sił skupionych podanych w tablicy P % oraz w odległościach umieszczonych w tablicy d % numeracja punktów od odległości największej do najmniejszej function S = silatnaca(x,P,d) S=0; n = length(P); i=1; while x<d(i) S = S + P(i); % dodaj kolejną siłę if i==n break %przerwanie pętli gdy ostatnia siła end i=i+1 % weź następną siłę
Wykorzystanie zdefiniowanej funkcji clc, clear P=[ 1 -1 -2 ] d=[ 3 2 1 ] i=1; for r=0:0.01:4 F(i)=silatnaca(r,P,d); x(i)=r; i=i+1; end plot(x,F)
Podsumowanie wiedzy
Edycja m-plików i ich uruchamianie Inicjacja zmiennych – nadawanie im wartości Proste obliczenia z wykorzystaniem funkcji matematycznych Zmienne zespolone Macierze Tworzenie macierzy jedno- i dwuwymiarowych Operacje macierzowe macierz odwrotna mnożenie macierzowo i elementowo podnoszenie do potęgi macierzowe i elementowe wyznacznik macierzy Wykorzystanie macierzy rozwiązywanie układu równań liniowych rozwiązywanie równania n-tego stopnia (roots) wektoryzacja danych dla wykresów
Wykresy funkcji wykresy 2D – funkcje plot i fplot wykres funkcji symbolicznej – ezplot zarządzanie zakresami zmiennej niezależnej i zależnej Proste obliczenia kinematyczne ruchu jednostajnego i jednostajnie przyspieszonego, wektoryzacja czasu, wykresy drogi, prędkości, przyspieszenia. Aproksymacja – przybliżanie danych dyskretnych parabolą n-tego stopnia
Instrukcje strukturalne w Matlabie Instrukcja warunkowa – cel i struktura, badanie kilku warunków, koniunkcja i alternatywa warunków Instrukcje iteracyjne – pętle sterowanie przebiegiem pętli liczonej for pętle zagnieżdżane (np. dla tablic dwuwymiarowych) zastosowania pętli w algorytmach wyszukiwania, sumowania i zliczania elementów pętla warunkowa while
Obliczenia symboliczne Inicjacja zmiennych symbolicznych (syms) Rozwiązywanie równań nieliniowych (solve) Podstawienie danych liczbowych do wyrażeń symbolicznych (subs) Wykresy funkcji symbolicznych (ezplot) Symboliczne obliczenia pochodnych (pierwszego i drugiego stopnia, pochodne cząstkowe) Całkowanie symboliczne (całki oznaczone i nieoznaczone) Równania różniczkowe (dsolve)
Wykorzystanie operacji symbolicznych Badanie funkcji f– wykres, miejsca zerowe, minima, maksima, punkty przegięcia miejsce zerowe (solve(f)) ekstremum – pochodna 1 rzędu ma miejsce zerowe minimum –pochodna 2 rzędu dodatnia maksimum –pochodna 2 rzędu ujemna punkt przegięcia –pochodna 2 rzędu ma miejsca zerowe Wykorzystanie równań różniczkowych w zadaniach kinematycznych
clc, clear syms x f=x^3-5*x^2+5*x+1 zera=solve(f); zera=subs(zera) subplot(3,1,1),ezplot(f,[-1,4]) df=diff(f) extrema=solve(df); extrema=subs(extrema) subplot(3,1,2),ezplot(df,[-1,4]) d2f=diff(df) pp=solve(d2f);%punkt przegięcia pp=subs(pp) subplot(3,1,3),ezplot(d2f,[-1,4]) disp('Badamy wartość d2f w punktach ext') disp('Jak dodatnie to minimum, ujemne to maximum') for k=1:length(extrema) x=extrema(k) if subs(d2f)<0 disp('Max') else disp('Min') end
WYNIKI zera = 3.4812 -0.1701 1.6889 pp x=1.6667 x=2.7208 minimum x=0.6126 maksimum Wniosek: pp różne od zera(3) pp jest tam, gdzie d2f=0