background image

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 

background image

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? 

background image

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.: 

 

background image

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

 

background image

 ‘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); 

 

background image

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.