You are on page 1of 12

clc; clear; close all

%% Pierwsze programy str 14


% % program 1
% a = input('dana liczba=')
% x=a^3
% disp('szescian tej liczby='),disp(x)
% %
%
%
%
%
%
%

% Program poprawiony
% Program oblicza szescian podanej liczby
disp('Obliczanie szescianu danej liczby:');
a = input('dana liczba= ','s');
x=a^3;
disp(['szescian tej liczby=', num2str(x)]);

% Program oblicza naprnie


% disp('Obliczanie naprenia:');
% disp('sigmamax - maksymalne naprnie, ');
% disp('Amin - pole przekroju poddanego naprniu');
% disp('Fmax - sia dziaajca na przekrj Amin powodujca naprnie,
');
% disp('Rmin - promie przekroju Amin');
% Rmin = input('podaj promie przekroju, na ktry dziaa sia = ');
% Amin=pi*Rmin^2;
% Fmax=input('podaj warto siy normalnej dziaajcej na pole przekroju
= ');
% sigmamax=Fmax/Amin;
% disp(['Warto naprenia wynosi ', num2str(sigmamax)]);

%% program si musi przedstawi str 14


% wpisz w oknie comend help nazwa_programu (nazwa_programu - nazwa mpliku)

%% wprowadzanie danych z klawiatury str 14


%
%
%
%
%

% przykad z helpa
reply = input('Do you want more? Y/N [Y]: ', 's');
if isempty(reply)
reply = 'Y';
end

%% instrukcja IF str 16
%
%
%
%
%
%
%
%
%
%
%

clear
x = input('x=');
if x<-1
y = 1-x^2
else
if x>1
y = 1+x^2
else
y = x
end
end

%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%

% Program pyta o temp na dworze


disp('What''s the temperature outside today?')
temp=input('temp = ');
if temp <= -1
disp('mrz')
else
if temp >= 25
disp('gorco')
else
if -1 < temp < 25 && temp < 15
disp('zimno')
else
%
if 15 <= temp < 25
disp('ciepo')
%
end
end
end
end

% %% Sprawdzanie parzystoci liczb


%
% disp('Sprawdmy, czy Twoja liczba jest parzysta i podzielna przez 3')
% x = input('Podaj swoj liczb: x = ');
% y = mod(x,2);
% z = mod(x,3);
% if y == 0 && z == 0
%
disp(['Liczba x = ', num2str(x), ' jest parzysta i podzielna przez
3'])
% else
%
if y ~= 0 && z == 0
%
disp(['Liczba x = ', num2str(x), ' jest podzielna przez 3, '...
%
'ale nie jest liczb parzyst'])
%
else
%
if y == 0 && z ~= 0
%
disp(['Liczba x = ', num2str(x), ' jest parzysta, ale '...
%
'nie jest podzielna przez 3'])
%
else
%
disp(['Liczba x = ', num2str(x), ' nie jest parzysta '...
%
'i nie jest podzielna przez 3'])
%
end
%
end
% end

% % Poszukujemy przyczyn nie wiecenia arwki - program 'ekspercki'


%
% disp('Aby znale rozwizanie niewieccej arwki, odpowiedz na kilka
pyta.')
% disp('Wpisuj 1, gdy odpowied na pytanie jest twierdzca oraz 0 - w
przeciwnym przypadku.')
% x = input('Czy wczye kontakt? ');
% if x == 0
%
disp('Wcz kontakt.')
% elseif x == 1
%
x = input('Sprawd arwk, czy arwka ma odpowiedni gwint? ');

%
if x == 0
%
disp('Podcz arwk z odpowiednim gwintem.')
%
elseif x == 1
%
x = input('Czy arwka jest dobra i niespalona? ');
%
if x == 0
%
disp('Podcz dobr arwk.')
%
elseif x == 1
%
x = input('Czy kabel jest podpity do arwki i kontaktu?
');
%
if x == 0
%
disp('Podepnij kabel.')
%
elseif x == 1
%
x = input('Czy kabel jest bez uszkodze? ');
%
if x == 0
%
disp('Wymie kabel na nieuszkodzony.')
%
elseif x == 1
%
x = input('Czy bezpiecznik odpowiadajcy badanemu
obwodowi z arwk jest wczony? ');
%
if x == 0
%
disp('Wcz bezpiecznik.')
%
elseif x == 1
%
x = input('Czy bezpiecznik jest dobry niespalony? ');
%
if x == 0
%
disp('Wymie bezpiecznik na nowy.')
%
elseif x == 1
%
x = input('Czy w oknach okolicznych
budynkw wieci si wiato? ');
%
if x == 0
%
disp('Prawdopodobnie przerwa w dostawie
prdu - sprawd czy na drzwiach Twojego budynku')
%
disp('znajduje si jaka informacja o
takich przerwach.')
%
disp('Jeli takiej informacji nie ma,
skontaktuj si z elektrowni, aby ustali')
%
disp('przyczyn awarii.')
%
elseif x == 1
%
x = input('Czy w ssiednim pokoju po
wczeniu kontaktu wiato si wieci? ');
%
if x == 0
%
disp('Prawdopodobnie awaria
gwnego bezpiecznika prdu w Twoim budynku.')
%
elseif x == 1
%
x = input('Czy masz moliwo
sprawdzenia gwnego bezpiecznika w Twoim budynku? ');
%
if x == 0
%
disp('Sprowad elektryka z
Twojego rejonu.')
%
elseif x == 1
%
x = input('Czy gwny
bezpiecznik jest wczony? ');
%
if x == 0
%
disp('Wcz
bezpiecznik.')
%
elseif x == 1
%
x = input('Czy gwny
bezpiecznik jest nieuszkodzony? ');
%
if x == 0

%
disp('Bezpiecznik
gwny uleg uszkodzeniu, sprowad elektryka.')
%
else disp('Sprawd
jeszcze raz poszczeglne elementy obwodu zasilajcego arwk,')
%
disp('a jeli to nie
pomoe sprowad elektryka.')
%
end
%
end
%
end
%
end
%
end
%
end
%
end
%
end
%
end
%
end
%
end
% end
%

%% instrukcja switch str 17


%
% clear; disp('Kalkulator cztero-dziaaniowy:')
% x=input('x='); y=input('y=');
% zn=input('wpisz znak dziaania:', 's');
% switch zn
% case '+'
% wynik=x+y
% case '-'
% wynik=x-y
% case '*'
% wynik=x*y
% case '/'
% if y==0
% disp('Bad: Dzielenie przez zero!')
% else
% wynik=x/y
% end
% otherwise
% disp('Nierozpoznane dziaanie!')
% end
%% ptla for str 18
%
%
%
%
%

% % przykad 3
for i = 1:5
p(i) = (2*i)^2;
end
p

%
%
%
%
%
%
%

% % zamiennie i lepiej dla pojedynczych wartoci


i = 1:5;
p = (2*i).^2
% % tabela i wykres funkcji sinus kwadrat przykad 4
clear; clc
k=0; % zerujemy licznik elementw tabeli

% fprintf('\n
x
sin(x)'); % nagowek tabeli
% for alfa =0 : 5 : 360
%
k=k+1;
%
X(k)= alfa*pi/180; Y(k)=sin(X(k))^2;
%
fprintf('\n %5.1f %7.4f',alfa,Y(k));
% end
% plot(X,Y); set(gca,'XTick',0:pi/4:2*pi);
%
set(gca,'XTickLabel',{'0','1/4pi','1/2pi','3/4pi','pi','5/4pi','3/2pi','7
/4pi','2pi'}); grid on; % to wykres i siatka
% title('Funkcja sinus alfa kwadrat'); % tytu wykresu
% xlabel('x'); ylabel('y'); % etykiety osi

%
%
%
%
%
%
%

% % przykad 5
for w=1:3
for k=1:4
M(w,k)=w+k;
end
end
M

%
%
%
%
%
%
%
%
%
%
%
%
%

% % wiczenia 2.4.10

%
%
%
%
%
%
%

k = 0;
fprintf('\n
fi
beta'); % nagowek tabeli
for fi = 3.6 : 0.4 : 13
k = k + 1;
beta(k) = (fi - 0.5)/(1.1 + sin(fi));
fprintf('\n %5.1f %7.4f',fi, beta(k));
end

k = 0;
fprintf('\n
n sqrt(n)'); % nagowek tabeli
for n = 1 : 9
k = k + 1;
m(k) = mod(n,2);
if m(k) ~= 0
s(k) = sqrt(n);
fprintf('\n %5.f %7.4f',n,s(k))
end
end
close

%% Ptlka while str 18/19


%
%
%
%
%
%
%
%
%
%
%

clear;
p='T';
while p=='T'
disp('Obliczanie wartosci dowolnej funkcji f(x)');
x=input('Podaj wartosc x:');
funkcja=input('Wpisz wyraenie zalene od x','s');
y=eval(funkcja);
fprintf('\n x=%10.4f f(x)= %10.4f\n',x,y);
p=input('Czy nowe obliczenie? (T/N):', 's');
p=upper(p);
end

%% wyprowadzanie wynikw do pliku str 21


% % Przykad 7
% % Program zapisuje do pliku wartosci kata x oraz jego funkcji sin(x),
cos(x)
% [id, kom] = fopen('wyniki1.txt','wt'); % Tworzy plik wynikw
% if id<0
%
disp(kom)
% end
% fprintf(id,'%s\n', ' kat x [stopnie]
sin(x)
cos(x)' ); %
Nagwek tabelki
% for xs = 0 : 5 : 90
%
x = xs*pi/180; % kat xs zamieniony na radiany
%
y1=sin(x); y2=cos(x);
%
fprintf(id,' %3d', xs);
%
fprintf(id,' %20.4f %15.4f\n', y1,y2);
% end
% fclose(id);
% % % Przykad 8
% x = 0:.1:1; % generuje wektor wierszowy
% y = [x; exp(x)]; % skleja dwa wektory wierszowe w macierz y
% fid = fopen('exp.txt', 'w'); % otwiera plik do zapisu
% fprintf(fid, '%6.2f %12.8f\n', y); %wyprowadza do pliku macierz y
% fclose(fid); % zamyka plik
% type exp.txt % wyswietli tresc pliku
% % ======= a teraz wczytywanie z pliku:
% fid = fopen('exp.txt'); % otwiera plik
% A = fscanf(fid, '%g %g', [2 inf]); % wczytuje do macierzy A
% fclose(fid); % zamyka plik
% % ===== Potrzebna jest jeszcze transpozycja macierzy bo kolumny
wczytay sie do wierszy
% A = A';
%% Funkcje str 23
%
%
%
%
%
%

% % funkcja inline
% f1=inline('1+sin(x) '); % pozwala na przypisanie zmiennej acucha
% odpowiadajcego wyraeniu matematycznemu.
% Zmienn t moemy dalej uywac jak odpowiadajc jej funkcj.
f1(pi/6)

% % funkcja silnia
%
% silnia(9)

%
%
%
%
%
%
%
%

% pierwiastek z sumy kwadratw - wykorzystanie funkcji (str 23)


%
x=1;
while x ~= 0
x = input('x=');
p = (1 - pwsk(3,x))/(pwsk(2*x^2, 4));
disp(['p=',num2str(p)]);
end

% % rozwiazywanie rwnania kwadratowego


% [x1, x2]=prkw(1,1,1);
% [x1, x2]=prkw(-1,1,1);

% % % wykorzystanie funkcji dystans do wyliczania dugoci amanej


%
% disp('Podaj wsprzdne punktw, aby obliczy dugo amanej
dwuodcinkowej:')
% x1 = input('x1 = ');
% y1 = input('y1 = ');
% x2 = input('x2 = ');
% y2 = input('y2 = ');
% x3 = input('x3 = ');
% y3 = input('y3 = ');
% d1 = dystans(x1,x2,y1,y2); d2 = dystans(x2,x3,y2,y3);
% dl_lamanej = d1 + d2;
% disp(['Dugo amanej wynosi: ',num2str(dl_lamanej)])

%
%
%
%
%
%
%
%
%
%
%
%

N = input('Podaj ilo punktw amanej, N = ');


x = 0; y = 0;
for n = 1 : N
disp(['Podaj wsprzdne punktu ',num2str(n),':'])
x(n) = input(['x',num2str(n),'= ']);
y(n) = input(['y',num2str(n),'= ']);
end
for n = 2 : N
d(n) = dystans(x(n-1),y(n-1),x(n),y(n));
end
dl_lamanej = sum(d);
disp(['Dugo amanej wynosi: ',num2str(dl_lamanej)])

%% Grafika uchwytw i budowa interfejsu graficznego, wykresy str 27


%
%
%
%
%
%
%
%
%
%
%
%
%

% przykad 12
x= 0 : 0.2 : 2*pi;
plot(x,sin(x));
grid on
title('Przykad wykresu:');
xlabel('x');
ylabel('sin(x), cos(x)');
% a teraz drugi wykres
hold on % w tym samym ukadzie
P=plot(x,cos(x), ':m');
set(P,'Linewidth',3);
legend('sinus','cosinus');
hold off

%
%
%
%

Przykad 13
Wykres supkowy:
x=0 : 0.2 : 2*pi;
bar(x,sin(x));

%
%
%
%
%
%
%
%
%
%
%

% % testowanie
F1=figure('Position',[5 40 790 300], 'Name', 'TESTOWANIE');
grid on
get(F1,'Color')
set(F1,'Color', [0.9, 0.7, 0.95], 'MenuBar', 'none');
get(F1,'Color')
set(F1,'Position',[5 40 790 300], 'Color', [0.5 0.5 0.9])
set(F1,'Position',[5 40 790 300], 'Name', 'TESTOWANIE'...
, 'Color', [0.9, 0.7, 0.95], 'MenuBar', 'none');
get(F1);

% % % UICONTROLs - kontrolki,
% S1 = uicontrol('Style', 'Slider', 'Units', 'pixels', 'Position', [10,
20, 15, 40]);
% % % wiczenie A, str 29
% kontrolki1 %% uruchamia plik kontrolki1.m oraz zwizane z nim
procedury kolor.m i przyrost.m
% % wiczenie B, str 30
% pierwiastki %% uruchamia plik pierwiastki.m oraz zwizane z nim
procedury rysuj.m i nowe.m
%% GUIDE str 31
% guide

%% Macierze str 33
% % generowanie tablic
% for i=1:4; A(i)=2*i; A, end; % sposb niezalecany, gdy generowaniu
tablicy towarzyszy
%
% przymusowa operacja wielokrotnego
powikszania rozmiaru
%
% tablicy
% B(4)=0, for i=1:4; B(i)=2*i; B, end;
% sposb zalecany - najpierw
rezerwujemy miejsce
%
% dla tablicy w pamici programu
przez wstawienie
%
% zer do wszytskich elementw
wcznie z elementem
%
% o maksymalnych wartociach
wskanikw
% i=1:4; B=2*i
% sposb zalecany najbardziej, gdy unikamy ptli FOR.
Matlab jest
%
% zoptymalizowany do operacji na macierzach
% A(2,3)=0.

% A(3,5)=2.
elementu o
%

% rezerwacja miejsca dla tablic o wikszej liczbie wymiarw

% zmiana wielkoci tablicy z uwzgldnieniem zmiany wartoci


% maksymalnych wartociach wskanikw

%
%
%
%
%

% % wektor str 34
x = 0 : 0.2 : 1
a = x.*x
b = x.^2

% i = 1 : 6
% z(i)=2*i
% p=2*i

% % % wprowadzanie wektora i macierzy


%
% U = [220, 221, 220, 218, 218, 219, 220, 221]
% A = [1, 2, 3,4; 7, 8, 9,10]
% A(:, 2) % dwukropek oznacza wiersze wszystkie a 2 to wybrana druga
kolumna
% A(:, 2:3) % wybieramy kolumny 2 i 3
% A(:, 1:2:4) % wybieramy kolumny od 1 co 2 do 4
% A(2, :) % wybieramy drugi wiersz (a kolumny wszystkie)
% A(: , :) % to w tym przypadku to samo co A czyli caa macierz
% A(:) % wymusza natomiast zamiane macierzy na wektor (kolumnami)
%
%
%
%

A
A
A
A

=
=
=
=

zeros(2,3) %% generowanie macierzy z funkcji str 36


ones(2,4)
rand(2,5)
eye(3)

%
%
%
%
%

% % wczytywanie macierzy z pliku, przyklad 15, str 36


[plik1 info] = fopen('DANE1.TXT');
A = fscanf(plik1, '%f %f %f %f', [4, 2])
A = A.'
fclose(plik1)

%
%
%
%
%
%

A=[4, 2, 3; 3, 6, 1 ], B=[5, 3, 8; 4, 1, 2]
A+B
% A*B
A*B.'
A.*B

%% Wykresy trjwymiarowe str 38

% % przygotowanie siatki par wsprzdnych (x,y) dla funkcji z=f(x,y)


% [x y] = meshgrid(0:0.1:0.3, 1:3);
% z wyniku dziaania procedury
otrzymujemy,
%
% e funkcja wyliczana bedzie dla
par liczb
%
% (0, 1); (0.1, 1); (0.2, 1), ...

%
%
%
%

% % przykad
% najpierw siatka punktw (x,y) dla wykresu 3D:
[x,y]=meshgrid(-3*pi : 0.5 : 3*pi, -3*pi : 0.5 : 3*pi);
% nastepnie definiujemy funkcje z(x,y):

%
%
%
%
%
%
%
%
%
%
%

z = 600 - x .* y + 50 * sin(x) + 50 * sin(y);


% przy pomocy funkcji subplot wybieramy cwiartki okna graficznego
% i wyswietlamy w nich wykresy 3D:
% 1) wykres siatkowy:
subplot(2,2,1); mesh(x,y,z);
% 2) wykres powierzchniowy:
subplot(2,2,2); surf(x,y,z);
% 3)wykres warstwicowy:
subplot(2,2,3); contourf(x,y,z);
% 4)wykres siatkowy z warstwicami:
subplot(2,2,4); meshc(x,y,z);

%% Przykady zastosowania Matlaba, str 40


% demo
komend

% mona przejrze demo zastosowa wpisujc t komend w oknie

% % % ukady rwna sprowadzamy do postaci macierzowej a*x=c


% a=[2, -6, -8.56; 0, -5, 1; 1, 1, 1];
% macierz wspczynnikw przy
niewiadomych;
% c=[0;0;15.5];
% wektor wyrazw wolnych
%
% % wektor niewiadomych x wyznaczamy przez lewostronne pomnoenie obu
stron rwnania
% % przez macierz odwrotn do a zapisywan w Matlabie jako inv(a)
inv(a)*a*x= inv(a)*c
% x = inv(a)*c;
% disp(x)
% % jednak w zwizku z tym, e mnoenie przez inv() jest nie polecane w
Matlabie,
% % najlepiej skorzysta z operacji dzielenia lewostronnego macierzy "\",
% % jako mniej pracochonne dla komputera a\a*x=a\c
% x=a\c;
% disp(x)
% % wiczenia z ukadami rwna i macierzami str 41
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%

% w. A)
M = [-2 0.5 4.2 8; 0 4 8 2; -5 7 3 1; 10 12 -6 4];
C = [73.5; 15.2; -33; 5];
X = M\C;
disp(X)
% w. B)
transpM = M.'; disp(transpM)
transpC = C.'; disp(transpC)
wyznaczM = det(M); disp(wyznaczM)
wyb_kol1 = M(:,1); disp(wyb_kol1)
wyb_kol2 = M(:,2); disp(wyb_kol2)
wyb_kol1i2 = M(:,1:2); disp(wyb_kol1i2)
el11 = M(1,1); disp(el11)
el22 = M(2,2); disp(el22)
liczba_elemC = length(C);
rozmiarM = size(M);

% rozmiarC = size(C);
% % % elemensty macierzy numerowane s od 1!!
%% pierwiastki wielomianu str42
%
% % % rozwiazanie rwnania: 3*x^2 + 2*x + 1=0
% aa = [-3 2 1];
% pierwiastki = roots(aa);
% % % aby narysowa wykres wielomianu wygodnie uy funkcji polyval(a,xp)
% xp=min(real(pierwiastki))-1; xk=max(real(pierwiastki))+1;
% x=linspace(xp,xk);
%
% help polyval
% wyznacza wartosc wielomianu dla danego wektora
wspczynnikw
%
% a oraz danej wartosci x=xp. Jesli za xp wstawimy
ciag
%
% wartosci zmiennej niezalenej to otrzymamy ciag
wartosci
%
% wielomianu potrzebny do wykresu.
% y=polyval(aa,x);
% plot(x,y); grid on
% st=['W(x)=-3*x^2+2*x+1'];
% title(st);

%
%
%
%
%
%
%
%

% % w - pierwiastki wielomianu, str 42

%
%
%
%
%
%

WBx = [0.05 0 0 2.7 0 -500];


pierwiastki = roots(WBx);
xp=min(real(pierwiastki))-0.5; xk=max(real(pierwiastki))+0.5;
x=linspace(xp,xk);
y=polyval(WBx,x);
plot(x,y);

WAx = [-3.5 2.7 -50 12,6];


pierwiastki = roots(WAx);
xp=min(real(pierwiastki))-0.1; xk=max(real(pierwiastki))+0.1;
x=linspace(xp,xk);
y=polyval(WAx,x);
plot(x,y); grid on

%% interpolacja aproksymacja str 45


% % % interpolacja - zadanie znalezienia krzywej przechodzacej dokadnie
przez
% % %
zadane punkty nazywane wezami interpolacji
% %
% x=[-2 -1 0 2]; y=[0 1 1 2];
% X = -2: 0.1: 2;
% Y_lin = interp1(x, y, X, 'linear');
% Y_spline = interp1(x, y, X, 'spline');
% w = plot(x,y,'*', X,Y_lin,':', X, Y_spline, '--'); set(w,
'Linewidth',3); grid on
% % hold on
% % plot(x,y,'*r', 'Linewidth',1.5)
% % plot(X,Y_lin,':b','Linewidth',1.5)
% % plot(X, Y_spline, '--g','Linewidth',1.5);

% grid on

% % % aproksymacja - dopasowywanie krzywej teoretycznej do punktw


otrzymanych
% % %
z pomiarw. Krzywa ta (lub prosta) nie musi
dokadnie
% % %
przechodzi przez zadane punkty ale dymy do tego,
aby suma
% % %
kwadratw odchyek bya jak najmniejsza.
% %
% x=[-2 -1 0 2]; y=[0 1 1 2];
% X = -2.5: 0.1: 2.5;
% aprok2stop = polyfit(x, y, 2); % przyblienie wielomianem drugiego
stopnia
%
% (a = polyfit(x, y, n), gdzie n = 2)
% aprok3stop = polyfit(x, y, 3);
% w2stop = polyval(aprok2stop,X);
% w3stop = polyval(aprok3stop,X);
% w = plot(x,y,'*', X,w2stop,':', X, w3stop, '--'); set(w,
'Linewidth',3); grid on
%% % Analiza obrazw - przykady zastosowania grafiki uchwytw - str 46
% % (w odniesieniu do rozdziau 3 ze str 25)
PROFIL_01

% %

%
%
%

Uniwersalny program do ogladania przekrojw obrazw, jego


wywoanie powoduje wuwietlenie okna OTWRZ i pozwala
na wybranie obrazu do analizy

co nie dziaa w programie powyej

You might also like