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