Výpočty, simulace a vizualizace v Matlabu¶
Cvičení jsou zaměřená na práci se skripty v Matlabu, procvičení základních funkcí, tvorbu matic, práci s náhodnými čísly, cykly, funkcemi a jednoduchými algoritmy.
Základy Matlabu¶
- Prostředí Matlabu, skripty a funkce
- Práce s okny, příkazy
clc,clear,close all
## Vektory a matice
- Tvorba vektorů a matic
- Indexování, řádky vs. sloupce
- Operace: sčítání, násobení, transpozice, inverze
## Náhodná čísla a statistika
- Funkce
rand,randi,randn - Výpočty součtu, průměru, středních hodnot
- Manipulace s 3D maticemi
Cyklus a podmínky¶
for,whileif,else,elseif- Vnořené cykly a operace po prvcích
## Funkce a vlastní algoritmy
- Definice funkcí:
function - Implementace jednoduchých algoritmů (např. bubble sort)
- Vektorové vs. skalární operace
## Vizualizace
- Grafy 2D a 3D (
plot,mesh,surf) - Přehledné zobrazení dat a výsledků
Základy a příkazy¶
- % - komentář
- ; na konci zamezí vypsání do konzole
Zkratky¶
- ctrl R - koment
- ctrl T - zrusit koment
- F9 - spusti označenou cast kodu
Udělat vždy¶
- clc; - vymaže konzoli
- clear;
- close all; - zavře soubory
- disp(x) - vypíše do konzole x (disp = display)
- 1:1:8 - generuje čísla od 1 do 8 po jednom
Matice¶
- ones(3) - 3x3 matice s jedničkama
- zeros(3,4) - 3x4 matice s nulama
- eye(3) - jedničky na diagonale
- inv(Matice) - inverce matice
- A*B - násobení matice
-
A.*B - násobení po prvcích
-
squeeze(C(1,:,:)); - z 3D na 2D
Random¶
- rand - nenáhodně
- randn - náhodně
- round zaokrouhlení
- mean - průměr
- numel - celkem prvku
- sum - součet
Funkce¶
Porovnání¶
- lexikograficky - porovná první řádek dvou sloupcu, pokud jsou stejné porovná druhý řádek
Přehled výuky¶
Přednášky¶
První přednáška¶
Otevřít / Stáhnout Matlab_1.pdf
Druhá přednáška¶
Otevřít / Stáhnout Matlab_2.pdf
Třetí přednáška¶
Otevřít / Stáhnout Matlab_3.pdf
Čtvrtá přednáška¶
Otevřít / Stáhnout Matlab_4.pdf
Pátá přednáška¶
Otevřít / Stáhnout Matlab_5.pdf
Šestá přednáška¶
Otevřít / Stáhnout Matlab_6.pdf
Cvičení¶
Zadání prvního cvičení¶
MATLB_cv1.pdf¶
Otevřít / Stáhnout MATLB_cv1.pdf
cv01.m¶
clear;clc;
% cv 01
% 1
a = 1:50;
% 2
b = 1:0.2:10;
% 3
A = [1 1 1; 1 1 1; 1 1 1];
B = [0 0 0; 0 0 0; 0 0 0];
D = [1 0 0; 0 1 0; 0 0 1];
% 4
M = [A, B, D];
% 5
C = [1 -1 1; 1 -1 0; -1 0 1];
% 6
B1 = inv(C);
% 7
x1 = C .* B1;
x2 = C * B;
% 8
x3 = M' * C;
% 9
%C(:,2) = [randi(10, [3,1])];
C(:,2) = rand(3,1);
%C(:,2) = rand( size(C(:,2)) );
% 10
C(1, :) = [7, 8, 9];
% 11
C1 = C(1, 2:3);
% 12
for i = 1:size(C,1)
for j = 1:size(C,2)
if C(i, j) >= 0
C(i, j) = 1;
else
C(i, j) = rand(1);
end
end
end
Zadání druhého cvičení¶
MATLB_cv2.pdf¶
Otevřít / Stáhnout MATLB_cv2.pdf
cv02.m¶
clear; clc;
% 1
minimum = 10;
maximum = 40;
r1 = floor(rand() * (maximum - minimum + 1)) + minimum;
r2 = floor(rand() * (maximum - minimum + 1)) + minimum;
r3 = floor(rand() * (maximum - minimum + 1)) + minimum;
C = randn(r1, r2, r3);
% 2
soucet = 0;
pocet_prvku = 0;
for i = 1:size(C,1)
for j = 1:size(C,2)
for k = 1:size(C,3)
soucet = soucet + C(i, j, k);
pocet_prvku = pocet_prvku + 1;
end
end
end
average = soucet / pocet_prvku;
average_sum = sum(C, "all") / pocet_prvku;
% 3
A = squeeze(C(1,:,:));
%radkove_prumery = mean(A, 2);
%A2 = A - radkove_prumery;
A2 = zeros(size(A));
for i = 1:size(A, 1)
A2(i, :) = A(i, :) - mean(A(i, :));
end
%4
function y = fce_sin2_cos(x)
y = (sin(x).^2) .* cos(x);
end
Zadání třetího cvičení¶
V MATLAB Grader
cv03.m¶
clc; close;
function Y = VecBubbleSort(X)
% Zde vlozte naprogramovanou funkci bublinkoveho razeni vektoru
% X - nesetridena vstupni matice
% Y - algoritmem setridena vystupni matice
Y = X;
for i = 1:size(Y, 2)-1 % sloupce % optimalizace a zrychleni kodu pomoci -1 a -i
for j = 1:size(Y, 2)-i % sloupce
for k = 1:size(Y, 1) % radky
if Y(k, j) > Y(k, j + 1) % podminka pokud je prvni sloupec vetsi nez ten druhy (nasledujici)
% logika bubble sortu, temp = pomocná proměnná temporary
temp = Y(:,j);
Y(:, j) = Y(:, j + 1);
Y(:, j + 1) = temp;
break % násilné ukonceni cyklu
end
if Y(k, j) < Y(k, j + 1) % pokud je menši tak at se cyklus ihned ukonci
break
end
end
end
end
end
B = round(randn(5,10));
disp('vstupní pole')
B
B_sorted = VecBubbleSort(B);
disp('seřazené pole')
B_sorted
Zadání čtvrtého cvičení¶
V MATLAB Grader
cv04cipher.m¶
clear; clc;
function cipher = cipher_for(text,key)
keyNums = double(key);
[keySorted, numbers] = sort(keyNums);
k = 1;
l = 1;
for i = 1:size(text, 2)
M(k, l) = text(i);
l = l + 1;
if mod(i, length(key)) == 0
k = k+1;
l = 1;
end
end
for i = 1:ceil(length(text)/length(key))
for j = 1:length(key)
M_cipher(i,j) = M(i,numbers(j));
end
end
for k = 1:numel(M_cipher)
cipher(1,k) = M_cipher(k);
end
end
function cipher = cipher_task(text, key)
% cipher = cipher_task(text, key)
% text - libovolne dlouhy retezec (pole char, radkovy vektor)
% key - libovolny retezec (pole char) kratsi/stejne dlouhy jako text: length(text)>=length(key)
% cipher - vystupni retezec - sifra - radkovy vektor
keyNums = double(key); % prevod klíčů na ascii hodnoty
[~, numbers] = sort(keyNums); % ~ pro ignorovani, serazeni klíčů
numRows = ceil(length(text) / length(key));
paddedText = pad(text, numRows * length(key));
M = reshape(paddedText, length(key), numRows)';
M_cipher = M(:, numbers);
cipher = M_cipher(:)';
end
key = 'stolek';
text = 'AHOJJAJSEMTVUJSUPERPOMOCNIK';
% šifrovaní původní funkcí
disp('Sifrovany vystup funkce cipher_for(text,key):')
cipher_for_var = cipher_for(text,key);
disp(cipher_for_var);
disp(newline)
disp('Sifrovany vystup vasi funkce cipher_task(text,key):')
cipher = cipher_task(text, key);
disp(cipher)
cv04decipher.m¶
clear; clc;
function text = decipher_for(cipher,key)
keyNums = double(key);
[keySorted, numbers] = sort(keyNums);
k = 1;
l = 1;
for i = 1:size(cipher, 2)
M_cipher(l, k) = cipher(i);
l = l + 1;
if mod(i, length(cipher)/length(key)) == 0
k = k+1;
l = 1;
end
end
for i = 1:ceil(length(cipher)/length(key))
for j = 1:length(key)
M(i,j) = M_cipher(i,numbers(j));
end
end
M = M';
for k = 1:numel(M_cipher)
text(1,k) = M(k);
end
end
function text = decipher_task(cipher,key)
% text = decipher_task(cipher, key)
% cipher - zasifrovany text (pole char, radkovy vektor, delka delitelna delkou klice)
% key - libovolny retezec (pole char), delka klice je delitelem delky cipher
% text - vystupni retezec - desifrovany text - radkovy vektor
keyNums = double(key);
[~, numbers] = sort(keyNums);
rows = length(cipher) / length(key);
M_cipher = reshape(cipher, rows, []);
M = M_cipher(:, numbers);
text = M';
text = text(:)';
end
key = 'STOLEK';
cipher = 'UESSDL KTUTMI OAEZIBGUKAARJ N ';
disp('Desifrovany vystup vasi funkce decipher_task(text,key):')
text = decipher_task(cipher, key);
disp(text)
Zadání pátého cvičení¶
MATLB_cv5.pdf¶
Otevřít / Stáhnout MATLB_cv5.pdf
cv05.m¶
clc; close;
% 1
phi = 0:(pi/3):2*pi;
x = cos(phi);
y = sin(phi);
figure;
plot(x, y);
axis equal;
% 2
function result = evaluateFunction(x, y)
if nargin < 2
y = 0;
end
result = x.*exp(-x.^2-y.^2)+tanh(x.*y);
end
result1 = evaluateFunction([1, 2, 3]);
disp(result1);
result2 = evaluateFunction([1, 2, 3], [4, 5, 6]);
disp(result2);
% 3
x =-5:0.05:5;
y1 = evaluateFunction(x);
y2 = evaluateFunction(x, 1);
y3 = evaluateFunction(x, 2);
% a
figure;
plot(x, y1, 'DisplayName', 'y = f(x)');
hold on;
plot(x, y2, 'Color', [1, 0.5, 0], 'DisplayName', 'y = f(x,1)');
plot(x, y3, 'Color', [1, 1, 0], 'DisplayName', 'y = f(x,2)');
hold off;
xlabel('x');
ylabel('y');
title('do jednoho grafu');
legend show;
exportgraphics(gcf, 'plot.jpg');
tempFileName = 'temp_plot.png';
exportgraphics(gcf, tempFileName);
img = imread(tempFileName);
imwrite(img, 'plot.bmp');
print(gcf, 'plot.pdf', '-dpdf');
delete(tempFileName);
% b
figure;
ax1 = subplot(3, 1, 1);
plot(x, y1);
title('subplot 1');
xlabel('x');
ylabel('f(x)');
ax2 = subplot(3, 1, 2);
plot(x, y2);
title('subplot 2');
xlabel('x');
ylabel('f(x, 1)');
ax3 = subplot(3, 1, 3);
plot(x, y3);
title('subplot 3');
xlabel('x');
ylabel('f(x, 2)');
linkaxes([ax1, ax2, ax3], 'x');
savefig('subplots.fig');
% 4
x = -5:0.1:5;
y = -6:0.2:6;
[X, Y] = meshgrid(x, y);
Z = evaluateFunction(X, Y);
figure;
surf(X, Y, Z);
title('3D plocha')
xlabel('x');
ylabel('y');
zlabel('f(x, y)');
grid on;
Soubory pátého cvičení¶
Zadání šestého cvičení¶
MATLB_cv6.pdf¶
Otevřít / Stáhnout MATLB_cv6.pdf
cv06.m¶
clc; close;
f = @(x) atan((x+1)./(x-1));
g = @(x) x./sqrt(x.^2 - 1);
h = @(x) x.^x;
x = -10:0.01:10;
y1 = f(x);
y1(x==1) = nan;
fig1 = figure;
plot(x, y1);
xlabel('x');
ylabel('f(x)');
title('Plot of f(x)');
y2 = g(x);
y2(imag(y2)~=0)=nan;
fig2 = figure;
plot(x, y2);
xlabel('x');
ylabel('g(x)');
title('Plot of g(x)');
y3 = h(x);
y3(imag(y3) ~= 0) = nan;
y3(isinf(y3)) = nan;
fig3 = figure;
plot(x, y3);
xlabel('x');
ylabel('h(x)');
title('Plot of h(x)');
saveas(fig1, 'f.eps', 'epsc');
saveas(fig2, 'g.eps', 'epsc');
saveas(fig3, 'h.eps', 'epsc');
MATLB_cv6_ukol.pdf¶
Otevřít / Stáhnout MATLB_cv6_ukol.pdf
Zadání sedmého cvičení¶
V MATLAB Grader
cv07.m¶
clc; close;
% 1. Sectete symbolicky zlomky (vysledna promenna frac_res = ...)
frac_res = ((sym(12)/63) + (21/51)) * (7/5) - (22/7);
% 2. Definujte funkci (vysledna promenna f = ..., nebo f(x) = ...)
syms x y;
f(x,y) = log(abs(cos(x))) + y * x * exp(-x^2);
% 3. Vyjadrete substituci (vysledna promenna g = ..., nebo g(y) = ...)
g = subs(f, x, 1/y);
% 4. Spoctete g(3) s presnosti na 100 cifer (vysledna promenna g_3 = ...)
g_3 = vpa(subs(g, y, 3), 100);
% 5. Urcity integral s presnosti na 6 desetinnych mist (vysledna promenna int_g_1_2_sym = ...)
int_g_1_2_sym = vpa(int(g, y, 1, 2), 6);
% 6. Neurcity integral (vysledna promenna int_f_dx = ...)
int_f_dx = int(x, y);
% 7. Symbolicke a numericke reseni sumy (vysledne promenne sum_sym = ..., sum_num = ..., sum_sym_n40 = ...)
syms k n;
sum_sym = symsum(sin((2*pi/3)*k), k, 1, n);
n_value = 40;
k_values = 1:n_value;
sum_num = sum(sin((2*pi/3) * k_values));
sum_sym_n40 = vpa(subs(sum_sym, n, n_value), 10);
% 8. Vypoctete limitu (vysledna promenna lim_f = ...)
lim_f = limit(f, x, pi/2);
% 9. Spoctete urcity integral (vysledna promenna int_diff_f = ...)
int_diff_f = int(diff(f,y), 0, inf);
% 10.a - Vyreste soustavu lineárních rovnic (vysledna promenna lin_eqns_res = ...)
syms a x y z;
A = [1, -3, a; 2, -6, 9; -a, 3, 0];
b = [1; 5; 0];
lin_eqns_res = A \ b;
% 10.b - Pro ktere a nema soustava jednoznacne reseni? h(vysledna promenna a_singular = ...)
a_singular = solve(det(A) == 0, a);
a_singular = double(a_singular);
% 10.c charakteristicky polynom (vysledna promenna ch_p = ...)
I = eye(size(A));
ch_p = det(A - x * I);
% 10.d Vlastni cisla matice soustavy (vysledna promenna vl_cisl = ...)
vl_cisl = eig(subs(A, a, 1));
% 11 Rozvinte vyraz (vysledna promenna expnd_expr = ...)
expnd_expr = expand(cos(3*x) - sin(3*x));
% 12 Vyreste rovnici (vysledne promenne eqn12_sym_res = ..., eqn12_num_res = ...)
eqn12_sym_res = solve(exp(-x^2 + 4*x - 9) == 1, x);
eqn12_num_res = roots([1 -4 9]);
Zadání osmého cvičení¶
MATLB_cv8.pdf¶
Otevřít / Stáhnout MATLB_cv8.pdf
muj_int.m¶
cv08.m¶
clc; clear;
% 1 1
syms x;
krok = 0.01;
a1 = 0;
b1 = 2 * pi;
analytical_f1(x) = 1/(2+cos(x));
analytical_int1 = int(analytical_f1, x, a1, b1);
numerical_f1 = @(x) 1 ./ (2 + cos(x));
numerical_int1 = muj_int(numerical_f1, krok, a1, b1);
% 1 2
a2 = 0;
b2 = sqrt(3);
analytical_f2(x) = x*atan(x);
analytical_int2 = int(analytical_f2, x, a2, b2);
numerical_f2 = @(x) x.*atan(x);
numerical_int2 = muj_int(numerical_f2, krok, a2, b2);
% 1 3
a3 = 0;
b3 = 2*pi;
analytical_f3(x) = sqrt(1 - sin(x)^2);
analytical_int3 = int(analytical_f3, x, a3, b3);
numerical_f3 = @(x) sqrt(1 - sin(x).^2);
numerical_int3 = muj_int(numerical_f3, krok, a3, b3);
% 1 4
a4 = -10;
b4 = 5;
analytical_f4(x) = exp(-x^2);
analytical_int4 = int(analytical_f4, x, a4, b4);
numerical_f4 = @(x) exp(-x.^2);
numerical_int4 = muj_int(numerical_f4, krok, a4, b4);
% 1 5
a5 = -Inf;
b5 = Inf;
analytical_f5(x) = exp(-x^2);
analytical_int5 = int(analytical_f5, x, a5, b5);
numerical_f5 = @(x) exp(-x.^2);
numerical_int5 = muj_int(numerical_f5, krok, -1000000, 1000000);
format long;
fprintf('\n=== Úloha 1 ===\n');
fprintf('1) Analyticky: %.6f, Numericky: %.6f\n', double(analytical_int1), numerical_int1);
fprintf('2) Analyticky: %.6f, Numericky: %.6f\n', double(analytical_int2), numerical_int2);
fprintf('3) Analyticky: %.6f, Numericky: %.6f\n', double(analytical_int3), numerical_int3);
fprintf('4) Analyticky: %.6f, Numericky: %.6f\n', double(analytical_int4), numerical_int4);
fprintf('5) Analyticky: %.6f, Numericky: %.6f\n', double(analytical_int5), numerical_int5);
% 2 1
syms n;
fs1 = (-1)^n * (1/(2^(n-1)));
an_sum1 = symsum(fs1, n, 1, Inf);
fs1_n = matlabFunction(fs1);
num_sum1 = sum(fs1_n(1:1000));
% 2 2
fs2 = 1 / (n*(n+1));
an_sum2 = symsum(fs2, n, 1, Inf);
fs2_n = matlabFunction(fs2);
num_sum2 = sum(fs2_n(1:1000));
% 2 3
fs3 = (-1)^n * (1/n);
an_sum3 = symsum(fs3, n, 1, Inf);
fs3_n = matlabFunction(fs3);
num_sum3 = sum(fs3_n(1:1000));
% 2 4
fs4 = (2*n - 1) / 2^n;
an_sum4 = symsum(fs4, n, 1, Inf);
fs4_n = matlabFunction(fs4);
num_sum4 = sum(fs4_n(1:1000));
fprintf('\n=== Úloha 2 ===\n');
fprintf('1) Analyticky: %.6f, Numericky: %.6f\n', double(an_sum1), num_sum1);
fprintf('2) Analyticky: %.6f, Numericky: %.6f\n', double(an_sum2), num_sum2);
fprintf('3) Analyticky: %.6f, Numericky: %.6f\n', double(an_sum3), num_sum3);
fprintf('4) Analyticky: %.6f, Numericky: %.6f\n', double(an_sum4), num_sum4);
% 3
syms a;
A = [1 7 a; a^2 3 1-a; 0 5 6];
f_det1(a) = det(A);
figure;
fplot(f_det1, [-10, 10]);
x_lx1 = solve(diff(f_det1) == 0);
x_lx1 = double(x_lx1);
x_lx1 = x_lx1(imag(x_lx1) == 0);
hold on;
plot(x_lx1, f_det1(x_lx1), 'x', 'MarkerSize', 40);
B = [a 8 -3*a; 1 (1-a)^2 a; 3 -1 4];
f_det2(a) = det(B);
figure;
fplot(f_det2, [-10, 10]);
x_lx2 = solve(diff(f_det2) == 0);
x_lx2 = double(x_lx2);
x_lx2 = x_lx2(imag(x_lx2) == 0);
hold on;
plot(x_lx2, f_det2(x_lx2), 'x', 'MarkerSize', 40);
fprintf('\n=== Úloha 3 ===\n');
disp(double(x_lx1));
disp(double(x_lx2));
Zadání devátého cvičení¶
MATLB_cv9.pdf¶
Otevřít / Stáhnout MATLB_cv9.pdf
cv09.m¶
clc; clear;
clc; clear all; close all
% 1
f1 = @(x) sin(x)./x + exp(-(x-4).^2);
x = -10:0.1:10;
y = f1(x);
figure;
plot(x, y, 'b')
hold on;
[xmin1, fmin1] = fminbnd(f1, 2, 4);
[xmin2, fmin2] = fminbnd(f1, 4, 6);
plot(xmin1, fmin1, 'rX', 'MarkerSize', 20);
plot(xmin2, fmin2, 'rX', 'MarkerSize', 20);
hold off;
% 2
f2 = @(xr) 1./4 .* xr.^4 - 41./6 .* xr.^3 +209./4 .* xr.^2 - 135 .* xr;
xr = -20:0.1:20;
yr = f2(xr);
figure;
plot(xr, yr, 'b');
hold on;
[xmin3, fmin3] = fminbnd(f2, -20, 20);
plot(xmin3, fmin3, 'rX', 'MarkerSize', 20);
hold off;
% 3
f3 = @(x1, x2) 100 .* (x2 - x1.^2).^2 + (1 - x1).^2;
x1 = -2:0.1:2;
x2 = -2:0.1:2;
[X1, X2] = meshgrid(x1, x2);
Z = f3(X1, X2);
figure;
surf(X1, X2, Z);
hold on;
f_wrp = @(x) f3(x(1), x(2));
[x_min, f_min] = fminsearch(f_wrp, [1; 1]);
plot3(x_min(1), x_min(2), f_min, 'rX', 'MarkerSize', 20);
% 4
f4 = [-5, -2, -6];
A = [
1, -1, 1;
3, 2, 4;
3, 2, 0;
];
b = [
20; 42; 30;
];
lb = [0; 0; 0];
f4xmin = linprog(f4, A, b, [], [], lb, []);
% 5
H = [ 8 2 0
2 4 -3
0 -3 6 ];
f = [
-1; 0; 0;
];
A = [
1, -1, 1;
1, 2, -6;
];
b = [
-1; 5;
];
lb = [
0; 0; 0;
];
f5xming = quadprog(H, f, A, b, [], [], lb, [], []);
syms x1 x2 x3;
f5 = 4 * x1^2 + 2 * x2^2 + 3 * x3^2 + 2 * x1 * x2 - 3 * x2 * x3 - x1;
hessian(f5);
x = [x1; x2; x3;];
F5s = simplify(1/2*(x.')*H*x+f.'*x);
Hs = hessian(F5s);

