Wszelkie prawa do zada
ń
, plików i instrukcji s
ą
zastrze
ż
one, nikt poza prowadz
ą
cymi zaj
ę
cia i studentami IA na AGH
nie ma prawa ich wykorzystywa
ć
. A tych co maj
ą
takie prawa, prosz
ę
, aby nie umieszczali ich w innym miejscu w sieci.
Obliczenia symboliczne
w programie Matlab
Przypomnienie
Pochodne cząstkowe
diff(‘funkcja’, zmienna)
W przypadku funkcji wielu zmiennych możliwe jest liczenie pochodnych cząstkowych. W tym
celu także korzystamy z funkcji diff(‘funkcja’, zmienna)
z=diff('2*x^2+y^6+2*x*y', x) - jeśli z jest wynikiem pochodnej po x z tej funkcji, to pochodną
mieszaną liczymy:
z2=diff(z,y)
lub:
z2=diff(diff('2*x^2+y^6+2*x*y', x),y)
Zad 1.
Proszę policzyć drugą pochodną mieszaną z tej funkcji i dwie trzecie
pochodne mieszane.
pochodna=diff(funkcja)./diff(x)- mając
wektor argumentów i wartości funkcji
zad 2. Dla różnych kroków 0.5 0.1 i 0.01 x=[0:krok:2*pi];
proszę w jednym oknie i na 3 wykresach narysować wykres funkcji sin(x) i jej pochodnej
Równanie różniczkowe zwyczajne
pierwszego rzędu
Do rozwiązywania tego typu równania
służy funkcja:
[t, y] = ode23 (‘nazwa_funkcji’, tspan, y0,options)
gdzie:
‘nazwa_funkcji’
zmienna łańcuchową będącą nazwą funkcji
Funkcja powinna być zadeklarowana w osobnym pliku *.m
albo za pomocą polecenia
inline – wtedy nazwa funkcji jest bez apostrofów
można też wykorzystać uchwyty do funkcji: f
un2 = @(x,y) (x+y)/2;
tspan
wartościami zmiennej, dla którego poszukiwane jest rozwiązanie,
y0
jest wektorem, w którym przechowywane są wartości rozwiązania układu
w chwili początkowej.
Wartości options są ustawiane za pomocą funkcji odeset i pozwalają ingerować w parametry
rozwiązywania równania
Analogicznie rozwiązuje się równania różniczkowe dla metody ode45
Np. aby rozwiązać równanie
1
1
( ,
)
2 *
3
dy
f t y
t
dt
=
=
−
dla warunków początkowych y(0)=2 i dla
0<=t<=3 należy wykonać polecenia
>> fun=inline('2*t-3','t','y');
>> ode23(fun,[0, 3],1) % co robi ta funkcja ?
I potem
>>[t,y]= ode23(fun,[0, 3],1) % a ta funkcja co robi?
Proszę wykonać powyższy przykład.
Deklaracja funkcji ( zamiast instrukcji inline) wygląda następująco:
function dy=fun2(t,y)
dy=2*t-3
Proszę powtórzyć wywołanie funkcji ode23 z funkcją fun2
Wykorzystując uchwyty do funkcji:
fun2 = @(t,y) (2*t-3);
Proszę powtórzyć wywołanie funkcji ode23 z funkcją fun3
zad 3. Proszę rozwiązać równanie różniczkowe za pomocą poniższych funkcji. Wynik proszę
przedstawić na jednym wykresie.
Równania różniczkowe zwyczajne pierwszego
rzędu
Do rozwiązywania tego typu równań służy
funkcja:
[t, y] =
ode23
(‘nazwa_funkcji’, tspan,
y0,options)
Dla układu równań takich jak np.:
Należy zadeklarować funkcję w następującej postaci:
function dy = rownania(t,y)
dy = zeros(3,1); % a column vector
dy(1) = y(2) * y(3);
dy(2) = -y(1) * y(3);
dy(3) = -0.51 * y(1) * y(2);
zad 5. Proszę rozwiązać powyższy układ równań.
Zad 6. Proszę rozwiązać i rozwiązanie przedstawić graficznie dla 0<=x<=1 rozwiązać układ równań:
Polecenia dotyczące plików tekstowych
Przed zapisaniem lub odczytaniem danych należy otworzyć plik
za pomocą funkcji fopen:
id_pliku=fopen(nazwa_pliku,rodzaj_dostępu)
gdzie: nazwa_pliku-łańcuch znaków z nazwą otwieranego pliku,
rodzaj_dostępu-łańcuch znaków o wartościach
Warto
ść
argumentu
opis
‘r’
otwarcie pliku do odczytu
‘w’
usuni
ę
cie zawarto
ś
ci istniej
ą
cego pliku lub otworzenie nowego i otwarcie go do
zapisu
‘a’
otwarcie pliku w celu dopisywania elementów na jego ko
ń
cu
‘r+’
otwarcie pliku do odczytu i zapisu
‘w+’
usuni
ę
cie zawarto
ś
ci istniej
ą
cego pliku lub utworzenie nowego i otwarcie go do
odczytu i zapisu
‘a+’
otwarcie pliku w celu czytania lub dopisywania elementów na jego ko
ń
cu
Wpisanie wartości do pliku to polecenie
fprintf(id_pliku,format,wartość_zmiennej)
format
Opis
%d
do zapisu liczb całkowitych
%f
do zapisu liczb rzeczywistych w formacie
stałoprzecinkowym
%e
do zapisu liczb rzeczywistych w formacie
zmiennoprzecinkowym
%g
automatyczny dobór krótszego formatu (%e lub
%f)
%c
do zapisu pojedynczych znaków
%s
do zapisu ła
ń
cuchów znakowych
np fprintf(id_pliku,' .2%f \n',15.12);
gdzie .2%f – liczba rzeczywista, dwa miejsca po przecinku.
\n przejdź do następnej linijki.
Zamykanie pliku fclose(id_pliku)
Czytanie wartości z pliku
fscanf(id_pliku, format);
A = fscanf(id_pliku, format);
zad 7. Proszę wylosować 100 licz całkowitych i zapisać je do pliku o nazwie liczby.txt. Potem proszę
napisać kod programu, który odczytuje każdą linijkę pliku i jeśli liczba jest parzysta to ja wypisuje na
ekranie.
Pliki tekstowe można też zapisać za pomocą
polecenia save
save('A.txt', 'A','-ascii')
lub save A.txt A -ascii
a odczytać za pomocą poleceń load lub
textread
zad 8. Proszę wylosować macierzy 10X10 licz całkowitych i zapisać je do pliku o nazwie liczby2.txt.
Potem proszę napisać kod programu, który odczytuje te dane.
Poszukiwanie miejsc zerowych
Metodą połowienia przedziału
Zad 9. Proszę wybrać dowolny wielomian rzędu 3 o nieznanych pierwiastkach, narysować go, a
potem napisać algorytm poszukiwania miejsc zerowych metodą połowienia przedziału w tych
przedziałach, w których funkcja przecina oś x.