• Nie Znaleziono Wyników

Laboratorium komputerowe 5

N/A
N/A
Protected

Academic year: 2021

Share "Laboratorium komputerowe 5"

Copied!
6
0
0

Pełen tekst

(1)

1

Laboratorium komputerowe 5 – przykładowe rozwiązania

zad. 1.

a)

function c=dwawektory1(a,b)

n = length(a); % liczba elementów w wektorze a m = length(b); % liczba elementów w wektorze b if n==m

for i=1:n

c(2*i-1) = a(i); % elementy nieparzyste,

% do których wpisujemy

% kolejne elementy z a c(2*i) = b(i); % elementy parzyste,

% do których wpisujemy

% kolejne elementy z b end

else

disp('Wektory maja rozna liczbe elementow.');

end end

Uwaga

W ramach sprawdzenia, w Command Window albo w innym skrypcie, utworzyć dwa wektory i sprawdzić działanie funkcji.

a = [1 2 3 4 5];

b = [-1 -2 -3 -4 -5];

dwawektory1(a,b) Wynik:

[1 -1 2 -2 3 -3 4 -4 5 -5]

(2)

2 b)

function c=dwawektory2(a,b)

n = length(a); % liczba elementów w wektorze a m = length(b); % liczba elementów w wektorze b if n==m % ten sam przypadek co w podpunkcie a)

for i=1:n

c(2*i-1) = a(i);

c(2*i) = b(i);

end

elseif n>m % wektor a jest dłuższy

for i=1:m % tak samo jak w podpunkcie a) c(2*i-1) = a(i);

c(2*i) = b(i);

end

for i=m+1:n % zostały do wpisania tylko

% elementy z wektora a c(m+i) = a(i);

end

else % wektor b jest dłuższy

for i=1:n % tak samo jak w podpunkcie a) c(2*i-1) = a(i);

c(2*i) = b(i);

end

for i=n+1:m % zostały do wpisania tylko

% elementy z wektora b c(n+i) = b(i);

end

end end

(3)

3 zad. 2.

a)

function A = macierz1(n)

num = 1; % liczba, która będzie wpisywana

% jako kolejny element macierzy A(i,j) for i=1:n

for j=1:n

A(i,j) = num;

num = num + 1; % definiujemy kolejną liczbę end

end end

b)

function A = macierz2(n)

num = 1; % liczba, która będzie wpisywana do A(i,j) for j=1:n % dla kolejnych kolumn

for i=1:n % przechodzimy po wierszach A(i,j) = num;

num = num + 1; % definiujemy kolejną liczbę

end end

end

Alternatywnie możemy wykorzystać funkcję z podpunktu a):

function A = macierz2(n)

A = macierz1(n)'; % transpozycja macierzy

% zwróconej przez funkcję

% macierz1() end

(4)

4 c)

function A = macierz3(n)

p = 1; % zmienna, za pomocą której będziemy

% sterowali porządkiem wpisywanych liczb

% w kolejnych wierszach:

% od początku albo od końca

num = 1; % liczba, która będzie wpisywana do A(i,j) for i=1:n

if p>0

for j=1:n % od początku wiersza A(i,j) = num;

num = num + 1;

end else

for j=n:-1:1 % od końca wiersza A(i,j) = num;

num = num + 1;

end end

p = -p; % w następnym wierszu porządek

% będzie przeciwny niż w obecnym end

end

zad. 3.

s1 = 0; % zmienna do obliczenia sumy s2 = 1; % zmienna do obliczenia iloczynu for i=3:15

s1 = s1 + (i+3)/(i+7);

end

for j=4:16

s2 = s2 * (j+2)/(j+6);

end

s = (2+s1)/(3*sqrt(2)+s2);

disp(s);

Wynik:

2.7120

(5)

5 Uwaga:

Trochę matematyki – w tym konkretnym przypadku możemy zamienić tożsamościowo zakres indeksów w sumie lub iloczynie i następnie uprościć program. Przykładowo możemy zrobić podstawienie 𝑗 = 𝑖 + 1, czyli 𝑖 = 𝑗 − 1. Stosujemy to podstawienie do iloczynu i otrzymujemy:

2 + ∑ 𝑖 + 3 𝑖 + 7

15𝑖=3

3√2 + ∏ 𝑗 + 2 𝑗 + 6

16𝑗=4

= 2 + ∑ 𝑖 + 3 𝑖 + 7

15𝑖=3

3√2 + ∏ 𝑖 + 1 + 2 𝑖 + 1 + 6

16−1𝑖=4−1

= 2 + ∑ 𝑖 + 3 𝑖 + 7

15𝑖=3

3√2 + ∏ 𝑖 + 3 𝑖 + 7

15𝑖=3

Teraz zakresy indeksów sumy i iloczynu, jak również samo wyrażenie są takie same. Program można zapisać następująco:

s1 = 0; % zmienna do obliczenia sumy s2 = 1; % zmienna do obliczenia iloczynu for i=3:15

w = (i+3)/(i+7);

s1 = s1 + w;

s2 = s2 * w;

end

s = (2+s1)/(3*sqrt(2)+s2);

disp(s);

zad. 4.

n = 1;

an = (sin(n)–0.1*n*n+20)/(n+1);

while an>0 n = n+1;

an = (sin(n)–0.1*n*n+20)/(n+1);

end

disp('Numer wyrazu: ');

disp(n);

disp('Wyraz ciągu: ');

disp(an);

Wyniki:

Numer wyrazu:

15

Wyraz ciągu:

-0.11561

(6)

6 zad. 5.

Metoda 1

Najpierw znajdujemy wszystkie elementy większe od 10, a w drugim kroku znajdujemy najmniejszy z nich. Jest to metoda mniej efektywna, wymaga zapamiętania wszystkich elementów większych od 10, a następnie przeglądnięcie ich w celu znalezienia najmniejszego.

tmp=[]; % wektor pusty, do którego będą wpisywane

% elementy an większe od 10 for n = 1:100

an = 0.5*cos(n-2)+10;

if an>10

tmp = [tmp an]; % dopisujemy na koniec

% wektora tmp element an end

end

m = min(tmp);

disp('Szukany element to: ');

disp(m);

Metoda 2

Przeglądamy po kolei wszystkie elementy i od razu wybieramy najmniejszy z tych, z które są większe od 10.

m = Inf; % szukany element najmniejszy większy od 10

% na początku przypisujemy wartość

% nieskończoność for n = 1:100

an = 0.5*cos(n-2)+10;

if an>10 && an<m % jeśli aktualny an jest większy

% od 10 i mniejszy od dotychczas

% znalezionego elementu najmn.

m = an; % uaktualniamy wartość m end

end

disp('Szukany element to: ');

disp(m);

Wynik: 10.002

Cytaty

Powiązane dokumenty

Zapis -0.0000 nie oznacza żadnego specjalnego symbolu matematycznego - jest to po prostu mała liczba ujemna, której co najmniej pierwsze cztery cyfry po

Macierz R jest macierzą pseudolosową, dlatego za każdym razem uzyskamy inne wyniki (dla mniejszych macierzy warto dodatkowo wyświetlić jak wygląda wygenerowana macierz

Napisać nowy skrypt, który z wykorzystaniem własnej funkcji do wyznaczania liczby

Funkcja obliczająca

Dodatkowo, zamiast wykonywania operacji w dwóch etapach (krok w przód, krok wstecz), będą wykonywane operacje dla całych kolumn.. Chętni mogą oczywiście zapisać

[r]

W pierwszym kroku rozpatrywany jest szczególny przypadek interpolacji 2-ego stopnia, a w kolejnym ogólna metoda dowolnego stopnia.. Warto przypomnieć sobie, jak oblicza

Interpolacja Lagrange’a 2-ego stopnia... Interpolacja Lagrange’a