1
Ćwiczenie 6. Metody obliczeniowe cd.
Zastosowania obliczeń symbolicznych
W Symbolic Math Toolbox do całkowania wyrażeń symbolicznych wykorzystuje się następujące funkcje:
int(S) – oblicza całkę nieoznaczoną wyrażenia symbolicznego S,
int(S,v) - oblicza całkę nieoznaczoną dla S , ze względu na zmienną v,
int(S,a,b) – zwraca całkę oznaczoną dla S, w granicach od a do b,
int(S,v,a,b) – jw.., dla ustalonej zmiennej v.
Ćwiczenie
Znaleźć wzór na prędkość w ruchu jednostajnie przyśpieszonym w przedziale [t
0
, t] z przyśpieszeniem a oraz
warunkiem początkowym v(t
0
)=v
0
.
Zadanie to możemy rozwiązać na 2 sposoby:
Sposób 1. Wykorzystanie funkcji int
Korzystamy z tego, że przyśpieszenie jest pochodną prędkości v względem czasu t.
= ,
=
Po scałkowaniu otrzymujemy:
=
+
Metoda obliczeń symbolicznych w Matlab-ie:
syms
syms
syms
syms a v0 t0 t
v = v0 + int
int
int
int a,t,t0,t
Wynik obliczeń symbolicznych:
v = v0 + a* t-t0
Sposób 2. Wykorzystanie funkcji dsolve
Funkcja dsolve rozwiązuje symbolicznie zwykłe równania różniczkowe.
dsolve
dsolve
dsolve
dsolve 'równanie1', 'równanie2',… 'zmienna1', 'zmienna2',…
Warunki początkowe są określane przez równania podobne do 'y(a)=b' lub 'Dy(a)=b' gdzie y jest zmienną
zależną, zaś a i b są stałymi.
Przyśpieszenie jest pochodną prędkości v względem czasu t.
= ,
=
Określenie zmiennych symbolicznych:
syms
syms
syms
syms a t0 t v0 v
Wywołanie funkcji dsolve zapis równania różniczkowego w postaci symbolicznej .
dsolve
dsolve
dsolve
dsolve 'Dv=a ', 'v t0 =v0 ', 't'
Metoda obliczeń symbolicznych w Matlab-ie:
% program rozwiązania równania różniczkowego dv/dt=a, v t0 =v0
syms
syms
syms
syms a t0 t v0 v
v = dsolve
dsolve
dsolve
dsolve 'Dv = a','v t0 = v0' %zmienna t jest domyślna
Ćwiczenie
Obliczyć symbolicznie wzór na drogę w ruchu jednostajnie przyśpieszonym z przyśpieszeniem a oraz
warunkiem początkowym s(t
0
)=s
0
przy wykorzystaniu wzoru symbolicznego na prędkość
v = v
0
+ a* t – t
0
Metoda obliczeń:
2
Prędkość jest pochodną drogi s względem czasu t.
2
= , 2
= 2
Po scałkowaniu otrzymujemy:
2 = 2 +
Metoda 1. Obliczenia symbolicznego wzoru na drogę, z wykorzystaniem wzoru symbolicznego na prędkość v
oraz funkcji całkującej int:
syms
syms
syms
syms a v0 t0 t s0
v = v0 + a* t-t0
s = s0 + int
int
int
int v, t, t0, t
Wynik obliczeń symbolicznych:
s =
s0 + ½*a* t^2 – t0^2 – a*t0* t-t0 + v0* t-t0
Podstawianie do wzoru wartości liczbowych:
Wartości liczbowe znajdujemy korzystając z funkcji subs, mającej składnię:
subs(wyrażenie,{lista zmiennych},{lista_wartości})
Pierwszy sposób:
Podstawiamy za zmienne symboliczne wartości liczbowe:
t0=0, v0=0, s0=0
Korzystamy z funkcji subs, która podstawia do wzoru symbolicznego wartości liczbowe:
s1=subs s
otrzymujemy znany wzór na drogę w ruchu jednostajnie przyśpieszonym:
s1 = ½*a*t^2
Drugi sposób:
s2 = subs s,{a,t0,v0,s0},{4,0,0,0}
Otrzymujemy wzór na drogę: s2=2*t^2
Metoda 2: Obliczenia symboliczne z dwukrotnym wykorzystaniem funkcji całkowania int:
% Obliczenie drogi
syms
syms
syms
syms a v0 t0 t s0
v = v0 + int
int
int
int a, t, t0, t
s = s0 + int
int
int
int v, t, t0, t
Zadanie
Po podstawieniu dowolnych konkretnych wartości t0, s0, v0 i a narysować wykresy v(t) i s(t) korzystając z
poznanej funkcji ezplot o postaci:
ezplot(f) - zakres zmiennej niezależnej domyślny,
ezplot
f,[min,max] – z ustalonym przedziałem zmiennej niezależnej.
Rozwiązywanie symboliczne układu równań przy użyciu funkcji solve
Funkcja solve ma następującą składnię:
solve
solve
solve
solve 'równanie1', 'równanie2',…, 'rownanieN', 'zmienna1', 'zmienna2',…, 'zmiennaN'
Ćwiczenie
Obliczyć symbolicznie przyśpieszenie z równania: v=v0+a*(t-t0)
Metoda obliczeń w Matlab-ie:
syms
syms
syms
syms a t0 v0 t v
3
% obliczenie wzoru symbolicznego na niewiadomą a
a = solve
solve
solve
solve('v = a*(t-t0)+v0','a')
% podstawienie danych liczbowych pod zmienne symboliczne
v0=0; t0=0; t=5; v=20;
% podstawienie danych liczbowych do wzoru
a1=subs
subs
subs
subs(a)
Wynik obliczeń:
a =
(-v+v0)/(-t+t0)
a1 =
4
Ćwiczenie
Znaleźć symboliczne równanie paraboli przechodzącej przez 3 punkty, która ma miejsca zerowe na końcach
przedziału (0,a), zaś w połowie przedziału przyjmuje wartość 1.
Korzystamy z tego, że parabola jest wykresem równania kwadratowego i z rozkładu równania kwadratowego
na czynniki:
Ax
2
+Bx+C=A(x-x
1
)(x-x
2
)
gdzie x
1
,x
2
są pierwiastkami równania
Ponieważ
x
1
=0, x
2
=a (pierwiastki naszego równania kwadratowego)
w naszym przypadku równanie paraboli przyjmie postać:
f
(x)=A*x*(x-a)
W połowie przedziału x=a/2
Z warunków zadania wynika, że
f
(a/2)=1, czyli otrzymujemy równanie z jedną niewiadomą A:
A*a/2*(a/2-a)=1
Rozwiązujemy go symbolicznie przy pomocy funkcji solve
A=solve
solve
solve
solve('A*a/2*(a/2-a)=1', 'A')
Metoda obliczeń w Matlab-ie:
syms
syms
syms
syms
A
a
x
A=solve
solve
solve
solve(
'A*a/2*(a/2-a)=1'
,
'A'
)
Zadanie
a)
Utworzyć wykres powyższej paraboli.
b)
Założyć a=6. Rozwiązać powyższe zadanie przy pomocy aproksymacji wielomianem 2-go stopnia.
Ćwiczenie
1.
Obliczyć symbolicznie tor punktu materialnego poruszającego z prędkością początkową v
0
pod kątem
∝
do poziomu pod wpływem siły ciężkości mg bez uwzględnienia oporu powietrza oraz prędkość i
przyśpieszenie punktu materialnego. Tor punktu jest określony równaniami:
I
J
I
= 0,
J
(0) = cos ∝ ,
J(0) = 0
I
K
I
= −M,
K
(0) = sin ∝ ,
K(0) = 0
Droga punktu materialnego jest określona wzorem :
2 = N OP
QR
Q
S
I
+ P
QT
Q
S
I
,
prędkość wzorem :
=
QU
Q
,
zaś przyśpieszenie wzorem:
=
QV
Q
.
4
Rozwiązanie w Matlabie:
clear
syms
a
t0
t
v0
v
g
alfa0
x1 = dsolve(
'D2x = 0'
,
'Dx(0) = v0*cos(alfa0)'
,
'x(0)=0'
,
't'
)
y1 = dsolve(
'D2y = -g'
,
'Dy(0) = v0*sin(alfa0)'
,
'y(0)=0'
,
't'
)
alfa0=pi/4;
v0=1;
g=9.81;
%-------------------------położenie y(x)
%wstawienie danych do wzorów
xu1=subs(x1)
yu1=subs(y1)
%macierze dla punktów czasu
t=0:0.01:3;
xp1=subs(xu1)
yp1=subs(yu1)
subplot(3,1,1)
plot(xp1,yp1)
title(
'Położenie y(x)'
)
%---------------------------składowe prędkości vx(t) i vy(t)
syms
t
vx=diff(xu1)
vy=diff(yu1)
t=0:0.01:3;
vx=subs(vx)
%wstawienie danych
vx1=ones(1,length(t))*vx;
%bo nie zależy od czasu- ones
ones
ones
ones to macierz jedynek
vy1=subs(vy);
%macierz dla punktów czasu
subplot(3,1,2)
plot(t,vx1,t,vy1)
title(
'Składowe prędkosci vx(t) vy(t)'
)
% ----------------------------------wyznaczenie s(t)
syms
t
s=int
int
int
int(sqrt(diff
diff
diff
diff(xu1,t)^2+diff
diff
diff
diff(yu1,t)^2),t,0,t) %całka oznaczona
t=0:0.01:2;
st=subs
subs
subs
subs(s);
subplot(3,1,3)
plot(t,st)
title('s(t)')
Poniżej otrzymane wykresy:
5
Zadanie
Korzystając ze wzoru
_ =
`a + bcd
cef
g
h
i
ce
obliczyć długość krzywej funkcji sin(x) w przedziale [0,
π
]
Zadania dodatkowe do samodzielnej analizy
1.
Obliczyć masę zaspy śniegu na dachu o powierzchni prostokątnej o wymiarach 10m×20m, która w
środku dachu ma wysokość h=0,5 m.
Przyjąć, że przekroje poprzeczne i podłużne zaspy mają kształt paraboliczny.
Masa właściwa śniegu waha się od 0,2 do 0,9 masy właściwej wody.
Przyjąć, że powierzchnia zaspy wyraża się wzorem:
z x,y =h*p x *q y
gdzie p(x), q(y) są parabolami o wartościach 0 na brzegu dachu i wartości 1 w środku przekroju., zaś h jest
wysokością zaspy na środku dachu.
Rozwiązanie:
clear
figure 1
%parabole
fplot
'4* 5+x .* 5-x /10^2'
,[-5 5]
hold
on
fplot
'4* 10+x .* 10-x /20^2'
,[-10 10]
0
5
10
15
-6
-4
-2
0
2
4
Poło
ż
enie y(x)
0
0.5
1
1.5
2
-15
-10
-5
0
5
10
Składowe pr
ę
dkosci vx(t) vy(t)
0
0.5
1
1.5
2
0
5
10
15
20
s(t)
6
a=10
b=20
h=0.5
figure(2)
[x,y]=meshgrid(-a/2:0.5:a/2, -b/2:0.5:b/2);
z = 16*h.*(a/2+x).*(a/2-x)/a^2.*(b/2+y).*(b/2-y)/b^2;
mesh(x,y,z)
%wykres 3D zaspy
syms
y
x
h
a
b
z = 16*h.*x.*(a-x)/a^2.*y.*(b-y)/b^2;
p=int(int(z,x,0,a),y,0,b)
%całka podwójna
Mmax=0.9*p
% masa w tonach!!!