ĆWICZENIE 6. Scilab: Obliczenia symboliczne i numeryczne Uwaga: Podczas operacji kopiowania i wklejania potrzeba skasować wklejone pojedyńcze cudzysłowy i wpisać je ręcznie dla każdego ich wystąpienia 6.1 Tworzenie wielomianów Istnieją dwa sposoby tworzenia wielomianów. Pierwszy z nich. p=poly([1 2 3], z, coeff ) p = 1 + 2z + 3z 2 p jest wielomianem zmiennej z posiadającym trzy współczynniki 1,2,3. Istnieje możliwość napisania samego c w miejsce coeff. Dodatkowo, jeśli pominiemy trzeci argument w wywołaniu funkcji będzie, to oznaczać, że generowany wielomian ma mieć pierwiastki podane jako pierwszy argument tu [1 2 3]. p=poly([1 2 3], z ) p = - 6 + 11z - 6z 2 + z 3 Powyższa konstrukcja stosowana jest w przypadku kolejno rosnących wykładników. Aby wygenerować dowolny wielomian np. zmiennej x x=poly(0, x ) \\tworzymy wielomian ze zmienną x i można teraz pisać w ten sposób: p=1+x^2 p=1+ x 2 6.2 Pierwiastki wielomianów Pierwiastki wielomianów znajduje się poleceniem roots(p), gdzie p jest wcześniej zdefiniowanym wielomianem lub wielomianem wpisanym bezpośrednio do wyrażenia: p=poly([1 2 3], z, c ) roots(p) ans = - 0.3333333 + 0.4714045i - 0.3333333-0.4714045i 6.2 Pochodna wielomianu Polecenie do obliczenia pochodnej wielomianu to derivat. derivat(p) Polecenie horner() pozwala na wyliczenie wartości wielomianu w wybranym punkcie. horner(p,3) wartość wielomianu p w punkcie 3 6.3 Tworzenie funkcji Tworzenie funkcji odbywa się w Scilabie na dwa sposoby: Pierwszy jest prosty ale i ograniczony do prostych wyrażeń matematycznych. Korzystamy z polecenia deff() deff( nazwa funkcji i sposób wywołania, to co oblicza, instrukcje do wykonania ) Funkcję wywołujemy wg tego, co wpiszemy w pierwszym wyrażeniu. deff( z=sincos(x), z=cos(x)*sin(x) ) -->sincos(0) ans = 0. Można też tak, gdy mamy więcej instrukcji do wykonania możemy umieścić zmienną i instrukcje w nawiasach kwadratowych. Drugi sposób definiowania funkcji polega na wykorzystaniu polecenia: function[lista arg zwracanych przez funkcję]=nazwa_funkcji(argumenty wywołania) Ciąg instrukcji... Przykład1 funkcja obliczająca iloczyn liczb naturalnych od 1 do n: function[a]=iloczyn(n) a=1 for x=1:n do
a=a*x end -->b=iloczyn(4) b=24 Przykład2 function[pole, Obwod]=kolo(promien) -->Pole=%pi*promien^2 -->Obwod=2*%pi*promien --> Kreslenie prostej grafiki Do rysowania prostych wykresów funkcji służy polecenie plot(x,y,x,y1) rysuje dwa wykresy o argumentach x i wartościach y i y1 i plot2d(arg1, arg2, arg3) arg1 to zmienne określające dziedzinę, arg2 to zmienne przechowujące wartości funkcji Wartości arg3 są pokazane w tabeli poniżej: -->[P,O]=kolo(6) O = 37.699112 P = 113.09734 6.4 Wykresy funkcji Zanim narysujemy wykres należy zdefiniować przedział dla zmiennej - argumentu funkcji (zwykle x). Korzystamy z polecenia linspace: x=linspace(wart poczatk, wart konc, ilość punktów podziału) x =linspace(0,0.8,9) x= 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 lub x= wartość początkowa : przyrost : wartość ostateczna x=0: 0.3: 1 x = 0. 0.3 0.6 0.9 Tabela nr 1. Możliwe wartości dla arg3. Poniższy przykład ilustruje wykorzystanie tego polecenia: x=linspace(0,2*%pi,101) plot(x, exp(-x).*sin(4*x)) Polecenie do rysowania więcej niż jednej funkcji na jednym wykresie wyglada tak: -->x=linspace(-1,1,61)'//wektor kolumnowy -->x1=linspace(-3,1,61)' -->y=x.^2 -->yter=2*y -->ybis=1-x1.^2 jeżeli dziedzina sama: plot2d([x x x],[y ybis yter]) wszystkich funkcji jest taka Jeżeli dziedzina funkcji jest różna w tym przypadku funkcja ybis ma dziedzinę należącą do zakresu wektora x1. plot2d([x x1 x],[y ybis yter])
6.7 Układy równań nieliniowych Do obliczanie służy polecenie fsolve(punkt start, funkcja). Pierwsze ustalamy, jakie wektory będziemy mieli, czyli porządkujemy równania. Te same równania można zapisać w postaci macierzowej. Przykład: Rys nr1. Wykres trzech funkcji z różnymi dziedzinami 6.5 Całkowanie numeryczne Obliczenie wartości całki oznaczonej jest stosunkowo proste i sprowadza się do wykorzystania polecenia integrate(). [x]=integrate( expr, x,x0,x1), gdzie expr to wyrażenie pod całką x zmienna całkowalna x0,x1 granice całkowania lub polecenie intg(): [v,err]=intg(a,b,f) gdzie v to wartość całki err to błąd a i b to przedziały całkowania f to nazwa funkcji np. zdefiniowana przy pomocy polecenia deff(). 6.6 Obliczanie pochodnych Obliczaniem pochodnych po jednej lub kilku zmiennych (wyznaczanie gradientu funkcji) zajmuje się funkcja: numdiff(): Przykład: -->function[y]=fun(x) -->y=(x-3).^2+4*x.^2 --> -->numdiff(fun,2) -->numdiff(fun,2) ans = 14. numdiff(fun,0) ans = - 6. function [Y]=fst(X) //przyjmujemy X=[x1x2], Y=[y1y2] a=[0,1-2,1] b=[0,0-1,0] c=[-1,00,0] d=[-8-4] Y= a*x +b*x^2 + c*cos(x) + d // lub inny sposób: function [Y]=fst(X) Y= [X(2)-cos(X(1))-8 X(2)-2*X(1)-X(1)^2-4 ] // początkowym rozwiązaniem jest punkt (0,0) xy1=fsolve([00],fst)
Znalezione rozwiązanie: xy1=[ 1.2959523 8.2713968] punkt początkowy [-3,0] xy2=fsolve([-30],fst) Przykład prezentujący rozwiązanie podanego niżej równania. zmienne x i y wstawiono do wektora x, a wyniki przechowuje wektor z. function [z]=zadanie(x) z(1)=x(2)-x(1).^2+1 z(2)=x(1)-(2*x(2)-x(2).^2)/3 //Ustawienie osi na środku rysunku: ster_axe=gca() ster_axe.y_location="origin" ster_axe.x_location="origin" //szkicowanie wykresów: x1=linspace(-3,3,101) y1=x1.^2-1 y2=linspace(-3,5,101) x2=(2*y2-y2.^2)/3 //3 i 5 oznacza kolor wykresu plot2d(x1,y1,3) plot2d(x2,y2,5) //szukanie rozwiązań: pocz=[-58] //wartość bliska rozw. na szkicu wykresów roz=fsolve(pocz,zadanie) disp(roz) plot2d(roz(1:1),roz(2:2),-5) pocz=[3-4] roz=fsolve(pocz,zadanie) disp(roz) plot2d(roz(1:1),roz(2:2),-5) //roz(1:1) pierwsza wspólrzędna roz, //roz(2:2) druga wspolrzedna roz //-5 to znak rombu
Zadanie 1. Rozwiązania równań a) Znaleźć pierwiastki wielomianu b) Znaleźć rozwiązania równania, gdzie b). Zadanie 4. Dla dowolnie ustalonych zmiennych x, y, z oblicz wartość zmiennych a i b: c) Znaleźć rozwiązania równania d) Znaleźć rzeczywiste rozwiązania układu równań Pomocne funkcje: Narysować wykresy funkcje i zrobić wizualizacje rozwiązań. e) Znaleźć rzeczywisty rozwiązania układu równań Narysować wykresy funkcje i zrobić wizualizacje rozwiązań. Zadanie 2. Obliczanie pochodnych w punkcie a) Obliczyć pochodną, gdzie b) Oblicz gradient funkcji y w punkcie (1,1): c) Obliczyć pochodne (gradient funkcji y), gdzie. Zadanie 5. Wyznacz wartość sumy Jak zapisać to działanie w kilku liniach? Jak obliczyć wartość analogicznego wyrażenia o 20 elementach? Zadanie 3. Znaleźć całki: a)