Skip to content

Instantly share code, notes, and snippets.

@Zulcom
Last active November 15, 2016 14:16
Show Gist options
  • Save Zulcom/a65484efe4eb88c74fd06a5b83e9202c to your computer and use it in GitHub Desktop.
Save Zulcom/a65484efe4eb88c74fd06a5b83e9202c to your computer and use it in GitHub Desktop.
Informatics commission - Matlab
% 13. Написать функцию rand_sum(N, M) на языке MATLAB, которая возвращает вектор из
% N сумм, каждая из которых состоит из M случайных слагаемых, равномернораспределённых в интервале [0; 1].
function B = rand_sum(N, M) % объявляем функцию rand_sum в которую передается N и M, и возвращает она B
rng('shuffle') % инициализируем генератор случайных чисел
B = sum(randn(M,N)); % присваиваем B результат суммы случайно сгенерированной матрицы размером M а N
end % закрываем объявление функции
%15. Написать программу на языке MATLAB, которая рисует точку, движущуюся по параболе.
b = axes; % создаем систему координат b
prom = -2:0.01:2; %создаем отрезок, на котором будет построен график параболы
plot(b,prom,prom.^2,':'); % строим на системе координат b график параболы для отрезка prom. Обратите внимание, дял возведения в степень используется точка, поскольку prom - вектор
hold (b,'on'); % делаем так, чтобы на систему координат каждый раз новая точка наносилась поверх, а не стиралось всё и писалось снова
while true %цикл, чтобы когда точки достигали конца промежутка, пробежка начиналась снова
for x = -2:0.01:2 % цикл пробежки по x в промежутке от -2 до 2, где шаг хода равен 0.09
c = scatter(b,x,x.*x,15,'filled','black'); % построить окружность на системе координат b в точке (x,x*x) радиусом 15, заполненный черным цветом
drawnow % построить окружность прямо сейчас
delete(c); % удалить с системы координат созданную окружность, чтобы в каждый момент времени на графике была лишь одна окружность
end %завершение цикла пробежки
end %завершение вечного цикла (условно, цикл на деле может быть закончен только принудительным прерыванием программы
%16. Написать программу на языке MATLAB, которая рисует точку, движущуюся по синусоиде.
b = axes; % создаем систему координат b
prom = -pi:0.01:5*pi; %создаем отрезок, на котором будет построен график синуса
plot(b,prom,sin(prom)); % строим на системе координат b график синуса для отрезка prom
hold (b,'on'); % делаем так, чтобы на систему координат каждый раз новая точка наносилась поверх, а не стиралось всё и писалось снова
while true %цикл, чтобы когда точки достигали конца промежутка, пробежка начиналась снова
for x = -pi:0.09:5*pi % цикл пробежки по x в промежутке от -pi до 5*pi, где шаг хода равен 0.09
c = scatter(b,x,sin(x),15,'filled','black'); % построить окружность на системе координат b в точке (x,sin(x)) радиусом 15, заполненный черным цветом
drawnow % построить окружность прямо сейчас
delete(c); % удалить с системы координат созданную окружность, чтобы в каждый момент времени на графике была лишь одна окружность
end %завершение цикла пробежки
end %завершение вечного цикла (условно, цикл на деле может быть закончен только принудительным прерыванием программы
% 4 .Написать программу на языке MATLAB, которая строит график функции sin(x^2) на
% отрезке [−π, π]. На графике должны быть подписи осей, заголовок, и координатная сетка
x= -pi:0.1:pi; % задаём вектор аргументов
y = sin(x.^2); % задаем вектор значений
plot(y); % рисуем график
grid on; % включаем коорд. сетку
title('sin(x^2)'); % подписываем график
xlabel ('Ось x'); % подписываем ось х ...
ylabel ('Ось y'); % и ось у
% 5. Написать программу на языке MATLAB, которая строит график функции sin(x2+ y2)
% на отрезке [−π, π] в виде СЕТКИ. На графике должны быть подписи осей, заголовок, и координатная сетка.
% задаём область определения функции двух переменных на промежутке от -pi до pi по х
% и на промежутке от -1 до 1 по y, записываем это в матрицы x и y
[x,y] = meshgrid(-pi:0.1:pi,-1:0.1:1);
z = sin(x.^2 + y.^2); % задаём функцю двух переменных
% Обратите внимание на точки перед знаком вохведения в степень – они указывают на матричное произведение, поскольку x и y матрицы
mesh(x,y,z); % строим график функции в виде СЕТКИ
title('sin(x^2 + y^2)'); % подписываем график
xlabel ('Ось x'); % подписываем ось х ...
ylabel ('Ось y'); % ось у ...
zlabel ('Ось z'); % и ось z
% 6. Написать программу на языке MATLAB, которая строит график функции cos(x2+ y2)
% на отрезке [−π, π] в виде ПОВЕРХНОСТИ. На графике должны быть подписи осей, заголовок, и координатная сетка.
% задаём область определения функции двух переменных на промежутке от -pi до pi по х
% и на промежутке от -1 до 1 по y, записываем это в матрицы x и y
[x,y] = meshgrid(-pi:0.1:pi,-1:0.1:1);
z = cos(x.^2 + y.^2); % задаём функцю двух переменных.
% Обратите внимание на точки перед знаком вохведения в степень – они указывают на матричное произведение, поскольку x и y матрицы
surf(x,y,z); % строим график функции в виде ПОВЕРХНОСТИ
title('cos(x^2 + y^2)'); % подписываем график
xlabel ('Ось x'); % подписываем ось х ...
ylabel ('Ось y'); % ось у ...
zlabel ('Ось z'); % и ось z
% 7. Написать программу на языке MATLAB, которая генерирует N случайных чисел,
% равномерно распределённых в интервале от 0 до 2, и строит их гистограмму. На
% графике должны быть подписи осей, заголовок, и координатная сетка.
N = input('Vvedite N:'); % вводим N их Command Window
rng('shuffle') % инициализируем генератор случайных чисел
hist (2.*rand(N,1)); % рисуем гистограмму случайных чисел от 0 до 2
grid on; % включаем коорд. сетку
title(['Гистограмма распределения ' num2str(N) ' случайных чисел в промежутке [0;2]']); % подписываем график
xlabel ('Элементы'); % подписываем ось x ...
ylabel ('Количество элементов'); % и ось y
% 8. Написать программу на языке MATLAB, которая сортирует строки матрицы A,
% состоящей из N строк и M столбцов, по неубыванию первого элемента строки.
N = input('Vvedite N:'); % вводим N из Command Window
M = input('Vvedite M:'); % вводим M из Command Window
rng('shuffle') % инициализируем генератор случайных чисел
A = randn(N,M); % генерируем матрицу случайных чисел размером NxM
disp (sortrows(A,1)); % сортируем по первому элементу строки и выводим её в Command Window
% 12. Написать функцию cross_mat(N, M) на языке MATLAB, которая возвращает матрицe из N строк и M столбцов,
% у которой на главной и побочной диагоналях стоят единицы, а остальные элементы равны нулю
function B = cross_mat(N,M) % объявляем функцию cross_mat в которую передается N и M, и возвращает она B
B = eye(N,M); % создаём единичную матрицу NxM
B = B + fliplr(B); % добавляем к ней её же, но с переставленными столбцами слева направо
B(B==2) = 1; % если матрица квадратная, то в цетральном элементе получится 1+1=2. Устанавливаем всем 2-йкам в матрице единицы.
end % закрываем объявление функции
% 10. Написать функцию invert_rows(A) на языке MATLAB, которая переставляет столбцы
% матрицы A в обратном порядке и возвращает результат
function B = invert_rows(A) % Объявляем функцию с названием инверт_ровс, которая получает матрицу А и возвращает матрицу В
B = fliplr(A); % переворачиваем матрицу
end % Закрываем реализацию функции
% 14. Написать функцию is_comm(A, B) на языке MATLAB, которая возвращает истину,
% если умножение матриц A, B является коммутативным (A B = B A), и ложь, если нет.
function B = is_comm(A,B) % объявляем функцию is_comm в которую передается A и B, и возвращает она B
B = isequal(A*B,B*A); % присваиваем b результат проверки выражения
end % закрываем объявление функции
% 9. Написать функцию plot_row_sums(A) на языке MATLAB,
% которая отображает суммы cтрок матрицы A в виде столбчатой диаграммы
function plot_row_sums(A) % объявляем функцию plot_row_sums, аргумент у неё будет массив A
bar(sum(A)); % рисуем столбчатую диаграмму сумм стоблцов матрицы А
end % закрываем реализацию функции
% 11. Написать функцию remove_negative(A) на языке MATLAB,
% которая из матрицы A удаляет строки с отрицательной суммой и возвращает результат.
function B = remove_negative(A) % объявляем функцию remove_negative, которая принимает матрицу A и возвращает матрицу B
B = A; % чтобы не зачищать исходную матрицу, будем работать с матрицей B
rowsums = sum(B'); % считаем сумму всех столбцов транспонированной матрицы B
v =[]; % создаем вектор, в котором будем хранить номера строк, в которых сумма элементов меньше 0
for i = 1:length(rowsums) % бежим циклом от 1 до кол-ва строк
if (rowsums(i)<0) %если сумма в строке меньше 0
v(end+1) = i; %записываем номер стоблца в конец вектора v
end
end %закончили бегать
B(v,:)=[]; % удаляем найденные строки
end % закрываем объявление функции
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment