Przykładowe zadania (wraz z rozwiązaniami) ze SciLaba 1. Określ
Transkrypt
Przykładowe zadania (wraz z rozwiązaniami) ze SciLaba 1. Określ
Przykładowe zadania (wraz z rozwiązaniami) ze SciLaba 1. Określ macierz A jako macierz kwadratową wymiaru n=10 wypełniając ją losowymi cyframi, następnie zlicz ile razy wystąpiła cyfra 7, oraz ile razy wystąpiły cyfry z przedziału [2, 4]. Rozwiązanie: // określenie macierzy A - funkcja rand(10,10) zwraca macierz 10x10 liczb z przedziału [0,1); // funkcja int() obcina część ułamkową liczby, pozostawiając część całkowitą A = int (10*rand(10,10)) // zliczenie ilości wystąpień podanych elementów - ilość zliczeń będzie podana w zmiennych // ile_7 oraz ile_2_4; będziemy korzystając z podwójnej pętli for sprawdzać każdy element macierzy, // jeśli będzie to cyfra 7 (lub cyfra 2,3,4) dodamy do właściwej zmiennej jedynkę. ile_7 = 0 ile_2_4 = 0 for i = 1:10 for j = 1:10 if A(i,j) == 7 then ile_7 = ile_7 + 1 end if (A(i,j) >= 2) & (A(i,j)<= 4) then ile_2_4 = ile_2_4 + 1 end end end 2. Dla określonej macierzy A oblicz wyznacznik macierzy powstałej po wykreśleniu z macierzy A 5-ego wiersza i 7-ej kolumny, podstawiając wynik pod zmienną wyzn. Pod zmienną suma_A podstaw sumę elementów znajdujących się w pierwszym i ostatnim wierszu, oraz pierwszej i ostatniej kolumnie. Rozwiązanie: wymiar = size(A) wyzn = det( A([1:4,6:wymiar(1)], [1:6,8:wymiar(2)]) ) suma_A = sum(A(1,:)) + sum(A(wymiar(1),:)) + sum(A(2:wymiar(1)-1,1)) suma = suma + sum(A(2:wymiar(1)-1,wymiar(2))) lub przy użyciu pętli suma_A = 0 wymiar = size(A) for i=1:wymiar(1) suma_A = suma_A + A(i,1) + A(i,wymiar(2)) end for i=2:wymiar(2)-1 suma_A = suma_A + A(1,i) + A(wymiar(1), i) end 3. Zdefiniuj funkcję matwekt(), której argumentami są macierz prostokątna A, wektor kolumnowy b, oraz liczba naturalna n, a zwracaną wartością macierz powstała poprzez dodanie do n-tej kolumny macierzy A wektora b. Zakładamy że wymiary macierzy A i wektora b są zgodne. Rozwiązanie: lub function [B] =matwekt (A, b, n) B=A B( :, n) = B( :, n) + b endfunction function [B] =matwekt (A, b, n) m = size (A) B=A for i = 1: m(1) B( i, n) = B( i, n) + b( i) end endfunction 4. Zdefiniuj funkcję wektory(), której argumentami są dwa wektory tej samej długości x, y, zwracaną wartością wektor stałych logicznych z powstały poprzez porównanie współrzędnych wektorów x, y (tzn. zi= .T. jeśli xi = yi ). Sprawdź działanie funkcji dla wektorów x = [1, 2, 3], y = [2, 2, 2]. Rozwiązanie: function [z] =wektory (x, y) z = (x==y) endfunction lub function [z]=wektory (x,y) for i = 1:length(x) if x(i)==y(i) then z(i) = %T else z(i) = %F end end endfunction // sprawdzenie działania – wywołanie funkcji wynik = wektory ([1, 2, 3], [2, 2, 2]) 5. Narysuj wykres funkcji z(x,y) = sin(x) + cos(y) -xy dla dziedziny [ -2, 2] x [-3, 3] Funkcja jest funkcją dwóch zmiennych, znaczy to tyle iż w każdym punkcie płaszczyzny XY z danej dziedziny (która jest prostokątem o bokach określonych przez przedziały [ -2, 2] na osi X oraz [-3, 3] na osi Y) obliczamy wartość funkcji. Otrzymujemy zbiór punktów w przestrzeni XYZ które tworzą płat powierzchni rozpostarty nad prostokątem [ -2, 2] x [-3, 3] leżącym na płaszczyźnie XY. Chcąc narysować wykres przy użyciu poleceń Scilaba wpierw określamy dziedzinę wyróżniając na wektorze [-2, 2] oraz [-3, 3] skończoną liczbę punktów: Rozwiązanie: x = -2: 0.1: 2 y = -3: 0.1: 3 // x = [ -2, -1.9, -1.8, ..., 1.9, 2 ] // y = [ -3, -2.9, -2.8, ..., 2.9, 3 ] // następnie dla każdej możliwej pary (x,y) obliczamy wartość funkcji z(x,y) for i = 1: length(x) for j = 1:length(y) z(i,j) = sin(x(i)) + cos(y(j)) – x(i)*y(j) end end // zmienna z jest wtedy macierzą prostokątną o wymiarze określonym przez długości wektorów x i y, // rysujemy wykres funkcją plot3d() plot3d(x, y, z) inny sposób – użycie funkcji feval() : x = -2: 0.1: 2 y = -3: 0.1: 3 // x = [ -2, -1.9, -1.8, ..., 1.9, 2 ] // y = [ -3, -2.9, -2.8, ..., 2.9, 3 ] // definiujemy funkcję własną w Scilabie function z = f(x,y) z = sin(x) + cos(y) -xy endfunction przy // tworzymy macierz z wykorzystując funkcję SciLaba feval() - otrzymujemy dokładnie to samo co // użyciu podwójnej pętli w sposobie przedstawionym powyżej z = feval(x,y,f) // rysujemy wykres funkcją plot3d() plot3d(x, y, z) 6. Zapisz skrypt który da odpowiedź na pytanie ile początkowych wyrazów ciągu a(n) = n + 1/n należy zsumować aby suma wyrazów nie przekroczyła 1000. Rozwiązanie: Wykorzystujemy instrukcję pętli while – tą instrukcję z reguły używa się wtedy gdy nie jest znana liczba iteracji (powtórzeń), lecz warunek przy którym iteracje są wykonywane (wartość zmiennej suma oznaczać będzie sumę n pierwszych wyrazów ciągu, n – ilość zsumowanych wyrazów): suma = 0; n =1 while suma < 1000 // wartość zmiennej suma zwiększamy o kolejny wyraz ciągu suma = suma + n + 1/n // zwiększamy indeks o jeden n=n+1 end wynik = n – 1 7. Zapisz skrypt służący do symulacji rzutu monetą wykorzystując funkcję rand(). Skrypt ma obliczać ile rzutów jest potrzebnych do wyrzucenia 25 razy orła. Rozwiązanie (wartość zmiennej ile_rzutow oznaczać będzie po wykonaniu skryptu liczbę rzutów monetą): ile_rzutow = 0; ile_orlow = 0 while ile_orlow < 25 // wynik losowania będący cyfrą 0 lub 1 rzut = round(rand()) // wyrzucono orła if rzut == 1 then ile_orlow = ile_orlow + 1 end ile_rzutow = ile_rzutow + 1 end Zadania ze SciLaba do samodzielnego rozwiązania 1. Zapisz ciąg instrukcji symulujący rzut kostką do gry, wynik podstaw pod zmienna rzut, oraz zapisz do niesformatowanego pliku tekstowego “rzut_kosci” (zastosuj funkcję rand() ). 2. Zapisz, stosując funkcje rand(), oraz round(), ciąg instrukcji symulujący rzut monetą (dopuszczalne wartości = 0,1). Po wykonaniu losowania wypisz na ekranie “orzeł” (gdy “ẅylosowano” 0), oraz “reszka” (gdy “ẅylosowano” 1) 3. Wykonaj 10 rzutów kostką do gry, zsumuj liczbę wszystkich wyrzuconych oczek, podstawiając pod zmienną kosci. 4. Wykonaj 100 rzutów kostką do gry, zlicz ile razy została wyrzucona szóstka, liczbę szóstek podstaw pod zmienną szostki. 5. Zapisz ciąg instrukcji symulujący rzuty kostką do gry, tak aby rzucanie kostka odbywało się tak długo aż zostanie wyrzucona piątka. Zlicz ile wykonano rzutów, wynik podstaw pod zmienną oczka. 6. Zapisz ciąg instrukcji symulujący rzuty kostką do gry, tak aby rzucanie kostka odbywało się tak długo aż zostanie wyrzuconych sześć czwórek. Zlicz ile wykonano rzutów, wynik podstaw pod zmienną gra. 7. Wykonaj 100 rzutów kostką do gry, rezultaty kolejnych rzutów zapisz do macierzy Bm (10x10), oblicz wyznacznik z macierzy Cm, powstałej z macierzy Bm, z wszystkich parzystych wierszy i kolumn. Zsumuj elementy dolnego trójkąta (pod przekątna główną) macierzy Bm. W macierzy Bm, zamień wszystkie cyfry mniejsze od liczby 3 zerami. 8. Narysuj wykres funkcji z(x,y) = sin(x) * sin(y) dla dziedziny [ -2, 2] x [-2, 2] 9. Narysuj wykres funkcji z(x,y) = sin(x) * sin(y) + sin(x) + sin(y) dla dziedziny [ -2, 2] x [-2, 2] 10.Zdefiniuj funkcję wektorki(), której argumentami są dwa wektory tej samej długości x (tablica liczb), y (tablica stałych logicznych), zwracaną wartością suma współrzędnych wektora x o tych indeksach dla których współrzędne wektora y są prawdziwe. Sprawdź działanie funkcji dla wektorów x = [1, 2, 3, 4, 5, 6], y = [F T T F F T]. (wynik = 11).