• Nie Znaleziono Wyników

Laboratorium komputerowe 4

N/A
N/A
Protected

Academic year: 2021

Share "Laboratorium komputerowe 4"

Copied!
6
0
0

Pełen tekst

(1)

1

Laboratorium komputerowe 4 – przykładowe rozwiązania

część 1: zadania z wykorzystaniem pętli for

Przypomnienie

Definicja funkcji musi zostać zapisana w pliku o takiej samej nazwie, jak nazwa funkcji.

Przy nazwach funkcji proszę zwracać uwagę na małe/wielkie litery oraz ogólne zasady tworzenia nazw. Plik funkcyjny musi zaczynać się od nagłówka funkcji i zawierać definicję tylko jednej funkcji.

zad. 1.

function b = wektor_dodatnie(a)

n = length(a);

b = [];

for i = 1:n

if a(i) > 0

b = [b a(i)];

end

end end

% wywołanie funkcji (np. w Command Window):

x = [2,-1,0.5,1.2,3,-4,5,7,-2]

wektor_dodatnie(x)

(2)

2 część 2: zadania z wykorzystaniem pętli while

zad. 2 (zad. 1 z piątego rozdziału skryptu)

x = input('Podaj liczbe: '); % wczytanie pierwszej liczby

maks = x; % liczba największa

while x ~= 0 % wczytanie zera kończy działanie pętli x = input('Podaj liczbe: '); % wczytanie kolejnej

% liczby

if x > maks % jeśli wczytany x jest większy niż

% dotychczasowa liczba największa

maks = x; % to uaktualniamy liczbę największą end

end

disp(maks);

zad. 3 (zad. 2 z piątego rozdziału skryptu)

W celu obliczenia średniej z liczb wprowadzonych z klawiatury należy dodawać kolejne wczytane liczby oraz zliczać ile liczb zostało wczytanych.

x = input('Podaj liczbe: '); % wczytanie pierwszej liczby

n = 1; % licznik wczytanych liczb

s = x; % suma liczb,

% na początku równa pierwszej

% wczytanej liczbie

while x~=0

x = input('Podaj liczbe: '); % wczytanie kolejnej % liczby

n = n + 1; % zwiększenie licznika

s = s + x; % dodanie wczytanej liczby

end

(3)

3

% obliczenie średniej

% ostatnią wczytaną liczbą jest zero, które kończy pętlę

% i nie jest uwzględniane przy obliczaniu średniej,

% dlatego wszystkich wczytanych liczb (bez zera) jest n-1

if n > 1

s=s/(n-1);

disp(s);

else

disp('Nie wczytano liczb różnych od zera.') end

zad. 4 (zad. 5 z piątego rozdziału skryptu)

fpp = 1; % wyraz poprzedni poprzedniego

% - numer wyrazu: n-2

fp = 1; % wyraz poprzedni – numer wyrazu: n-1 f = fpp + fp; % wyraz bieżący – numer wyrazu: n n = 2;

while f < 1000

% w każdej iteracji wyraz poprzedni staje się poprzednim

% poprzedniego, wyraz bieżący staje się poprzednim oraz

% obliczamy nowy wyraz bieżący fpp = fp;

fp = f;

f = fpp + fp;

n = n+1;

end

% po wykonaniu ostatniej iteracji

% ostatnim wyrazem mniejszym niż 1000 jest wyraz fp,

% wyraz f jest pierwszym wyrazem większym niż 1000.

disp(n-1);

disp(fp);

Szukanym wyrazem jest wyraz: 𝐹15 = 987 (wyrazy zaczynamy indeksować od zerowego).

(4)

4 zad. 5.

eps = 1e-6; % przyjęta dokładność obliczeń

ap = 3; % początkowa wartość wyrazu

% poprzedniego – należy przypisać

% taką wartość, aby pierwsze

% sprawdzenie warunku w pętli

% dało logiczną prawdę n = 0;

a = 1; % pierwszy wyraz ciągu

while abs(a-ap) > eps

n = n+1;

ap = a; % poprzedni wyraz ciągu

a = sqrt(8 + 2*a); % bieżący wyraz ciągu end

disp(a) % wynik – granica ciągu

Uzyskany wynik: 4.0000 (przy format long: 3.999999792882208)

zad. 6.

1

1 − 𝑥= ∑(−1)𝑛+1 (𝑥 − 2)𝑛

𝑛=0

= −1 + (𝑥 − 2) − (𝑥 − 2)2+ (𝑥 − 2)3− (𝑥 − 2)4+ . . .

Ciąg wyrazów szeregu

𝑎𝑛 = (−1)𝑛+1 (𝑥 − 2)𝑛 zapisujemy w postaci rekurencyjnej:

{ 𝑎0 = −1 𝑎𝑛 = − (𝑥 − 2) 𝑎𝑛−1 , 𝑛 > 0

Jeśli nie potrafimy zapisać ciągu wyrazów szeregu w postaci rekurencyjnej analizując kolejne wyrazy, możemy spróbować obliczyć:

𝑎𝑛 𝑎𝑛−1

(5)

5

Takie podejście oczywiście nie zawsze będzie działało, ale ograniczamy się tylko do przypadków, kiedy zależność rekurencyjną możemy wyznaczyć właśnie poprzez obliczenie ilorazu dwóch kolejnych wyrazów.

Dla bieżącego przykładu:

𝑎𝑛

𝑎𝑛−1 = (−1)𝑛+1 (𝑥 − 2)𝑛

(−1)𝑛 (𝑥 − 2)𝑛−1 = (−1)𝑛 (−1)(𝑥 − 2)𝑛−1(𝑥 − 2)

(−1)𝑛 (𝑥 − 2)𝑛−1 = − (𝑥 − 2)

Funkcja:

function s = szereg2(x)

eps = 1e-6; % przyjęta dokładność obliczeń

n = 0;

a = -1; % pierwszy wyraz szeregu

s = a; % suma z pierwszym wyrazem

if x > 1 && x < 3 % przedział zbieżności szeregu

while abs(a) > eps

n = n + 1;

a = -(x-2)*a; % wyraz szeregu

s = s + a; % suma szeregu

end

else

disp('Dla podanego x szereg jest rozbiezny');

end

end

Przykładowe wywołanie w Command Window:

format long szereg2(2.7)

% dla porównania możemy sprawdzić wynik ścisły:

x = 2.7;

1/(1-x)

(6)

6 zad. 7.

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

Cytaty

Powiązane dokumenty

Do wyznaczenia granicy ciągu zastosujemy bardzo prostą metodę sprowadzającą się do obliczania kolejnych wyrazów tego ciągu (jeśli ciąg jest zbieżny, to jego kolejne wyrazy

Przy nazwach funkcji proszę zwracać uwagę na małe/wielkie litery oraz ogólne zasady tworzenia nazw2. Plik funkcyjny musi zaczynać się od nagłówka funkcji i

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

Skªadowe kategorii private i protected nie s¡ widoczne na zewn¡trz, i tylko metody danej klasy mog¡ na nich operowa¢ (zapisa¢, odczyta¢, czy wywoªa¢, je»eli jest to

Przypomnij sobie informacje na temat: głoski, litery i sylaby (podr., str.. Dla utrwalenia wiadomości zapisz ją w zeszycie

Zastanówmy się, jak będzie wyglądać wykres zależności współrzędnej x wektora położenia Stefana od czasu t. Składa się on z dwóch fragmentów; każdy z nich opisuje jeden

Jeżeli zbiór implikantów istotnych nie jest pokryciem funkcji to dołącz do niego tylko te implikanty proste, dla których koszt funkcji będzie minimalny..

Przeciążanie operatorów umożliwia definiowanie działań dla własnych typów danych (struktur, obiektów) oraz na zmianę działania operatorów da wbudowanych typów (takich jak