Московский государственный технический университет
Им. Н. Э. Баумана
Кафедра «Защита информации»
Учебная практика
Работа в среде Matlab
Руководитель
Деулина И. И.
Исполнитель
Студент группы ИУ 10-22
Власенко Олеся
Москва 2012
Содержание:
1. Лабораторная работа 1………………………………………………………... 2
2. Лабораторная работа 2………………………………………………………… 4
3. Лабораторная работа 3, 4, 5……………………………………………………12
4. Лабораторная работа 6…………………………………………………………16
5. Лабораторная работа 7…………………………………………………………20
6. Лабораторная работа 8…………………………………………………………26
7. Лабораторная работа 9…………………………………………………………34
8. Вывод……………………………………………………………………………36
9. Список литературы…………………………………………………………….37
Лабораторная работа 1
Тема: «Вычисление и рисование графиков функций»
Задания.
Создать функцию пользователя y = f (x), вычислить ее значение в точке х 0 и простроить график.
Функция: х0=3,1
Выполнение:
x = 0:0.05:1;
y = sec(x) + sin (x) -1;
plot (x, y)
x0=3.1
y0 = sec(x0) + sin (x0) -1
Ход работы:
График функции:
Лабораторная работа 2
Тема: «Графика. Диаграммы и гистограммы»
Задания
- Постройте графики функций одной переменной на отрезке [0.01, 2π]:
и
Выведите графики различными способами:
• в отдельные графические окна;
• в одно окно на одни оси;
• в одно окно на отдельные оси.
Дайте заголовки, разместите подписи к осям, легенду, используйте различные цвета, стили линий и типы маркеров, нанесите сетку.
Выполнение:
x = 0.01:0.01:2*pi;
y = sqrt(x) -1-cos(0.5*x);
f = exp(-x).* sqrt(1+x+x.^2) - (x.^2);
plot (x, y, x, f) % одно окно одни оси
plotyy (x, y, x, f) % лучшее расположение осей (наиболее подходящий масштаб)
subplot(1,2,1); plot(x,f) % одно окно разные оси
subplot(1,2,2); plot(x,y)
figure; plot (x,y) % отдельные окна
figure; plot (x,f)
plot (x, y, 'Y.-', x, f, 'm*--') % одно окно одни оси, с дополнениями к графикам
grid on
title ('Графики двух функций')
legend ('График 1','График 2')
xlabel ('Ось Х')
ylabel ('Ось У')
Ход работы:
Одно окно одни оси
% лучшее расположение осей (наиболее подходящий масштаб)
Одно окно разные оси
Отдельные окна
одно окно одни оси, с дополнениями к графикам
2. Визуализируйте функцию двух переменных на прямоугольной области определения
Выведите графики различными способами:
• каркасной поверхностью;
• залитой цветом каркасной поверхностью;
• промаркированными линиями уровня (самостоятельно выбрать значения функции, отображаемые линиями уровня);
• освещенной поверхностью.
Расположите графики в отдельных графических окнах и в одном окне с соответствующим числом осей. Представьте вид каркасной или освещенной поверхности с нескольких точек обзора.
Выполнение:
[x, y] = meshgrid (-1:0.05:1, -1:0.05:1);
z=(((sin(x.^2)) + (cos(x.^2))).^(x*y));
mesh (x, y, z) % каркасная поверхность
surf(x, y, z) % залитая цветом
colorbar
surfc(x, y, z) % промаркированная линиями уровня
colorbar
surfl (x, y, z) % освещенной поверхностью
subplot(2,3,1); mesh (x, y, z)
title ('Каркасная поверхность')
subplot(2,3,2); surf(x, y, z)
colorbar
title ('Залитая цветом')
subplot(2,3,3); surfc(x, y, z)
colorbar
title ('Промаркированная линиями уровня')
subplot(2,3,4); surfl (x, y, z)
title ('Освещенная поверхность')
subplot(2,3,5); mesh (x, y, z)
title ('Каркасная поверхность(поворот)')
subplot(2,3,6); surf(x, y, z)
colorbar
title ('Залитая цветом(поворот)')
//Поворот поверхностей осуществлялся вручную, с помощью специальной кнопки
Ход работы:
Поверхности:
3. Постройте векторное поле градиента функции.
Визуализируйте трехмерное векторное поле на поверхности (возьмите разные поверхности):
• поверхность является гиперболоидом;
• поверхность является параболоидом;
• поверхность задана параметрически:
Выполнение:
[x, y] = meshgrid (-5:0.05:5, -5:0.05:5);
z=sqrt((x.^2) + (y.^2) +1);
f= ((x.^2)/8 +(y.^2)/8);
subplot(3,2,1); plot3 (x, y, z)
title('Элиптический параболоид')
subplot(3,2,2); plot3 (x, y, f)
title('Однополостный гиперболоид')
n = 0:0.5:3;
m = 0:0.5:3;
b = cos(n).*cos(m);
c = sin(n).*sin(m);
d = m.*n;
subplot(3,2,3); plot3 (m, n, b)
grid on
subplot(3,2,4); plot3 (m, n, c)
grid on
subplot(3,2,5); plot3 (m, n, d)
grid on
Ход работы:
Поверхности:
Лабораторная работа 3,4,5
Тема: «Использование операторов в MATLAB»
Задание:
Напишите файл-функцию для решения поставленной задачи. Там, где это возможно, предложите два решения: с использованием конструкций языка программирования и без них, применяя функцию find и др.
1. Вычислить произведение элементов вектора, не превосходящих среднее арифметическое значение его элементов.
Выполнение:
function c = fun1(a)
disp(prod(find(a <(mean(a)))));
Задание:
2. Подсчитать число нулей и единиц в заданной матрице.
Выполнение:
function c = fun2(A)
disp(sum(sum(A==0)))
disp(sum(sum(A==1)))
Задание:
3. Определить количество положительных элементов вектора, расположенных между его максимальным и минимальным элементами.
Выполнение:
function c = fun3(a)
i=find(a == max(a));
j=find(a == min(a));
disp(sum((a(j:i)>0)) -2);
end
Задание:
4. Просуммировать отрицательные элементы матрицы, лежащие ниже главной диагонали.
Выполнение:
function c = fun4(a)
disp(sum(sum(find(triu(a)<0))));
end
Задание:
5. Заменить положительные элементы вектора суммой всех его отрицательных элементов.
Выполнение:
function c = fun5(a)
a(a > 0) = sum(a(a < 0));
c=disp(a);
Задание:
6. Заполнить квадратную матрицу А, каждый элемент которой определяется следующим образом:
Выполнение:
function c = fun6(A)
clc
clear
n=input(' Введите размер матрицы ');
for i=1:n
for j=1:n
if i>j
A(i,j)=i-j;
end
if i==j
A(i,j)=i+j;
end
if i<j
A(i,j)=i^2+j^2;
end
end
end
display(A)
Задание:
7. Вычислить сумму:
Выполнение:
function c = fun7(m,n)
syms x a b
c=symsum(symsum(((x^(a+b))/((a+b)^2)),b,1,m),a,1,n);
disp(c);
Задание:
8. Для матрицы размера п на m найти значение выражения:
Выполнение:
function c = fun8(A)
c=sum(prod(A),2);
disp(c)
Задание:
9. По заданному х найти максимальное значение п, для которого следующая сумма не превосходит 100:
Выполнение:
function c = fun9(x)
s=0;
k=0;
while s<=100
k=k+1;
u=k*(x.^k);
s=s+u;
end
n=k;
display(n);
Задание:
10. Вычислить сумму:
с заданной точностью ε. Суммировать следует, пока модуль отношения текущего слагаемого к уже накопленной части суммы превосходите.
Сравнить результат с точным значением, построив графики ех и s(x) для .
Выполнение:
function c =fun10()
clc
N = 10;
eps = 1e-12;
eps_current = 1;
a = 1;
mysum = @(a,x) sum(a.^(1:x)./ cumprod(1:x));
S = mysum(a, N);
while(eps_current > eps)
S_old = S;
N = 2 * N;
S = mysum(a, N);
eps_current = (S - S_old) / S_old;
end
Задание:
11. Заданы окружности, координаты их центров содержатся в массивах х и у, а радиусы в массиве r. Известны координаты некоторой точки. Требуется вывести график, на котором маркером отмечено положение точки, синим цветом изображены те окружности, внутри которых лежит точка, а остальные окружности нарисованы красным цветом.
Выполнение:
function c= fun11(x_center,y_center,R,x1,x2)
fi = 0:0.01:2*pi;
x = x_center + R * cos(fi);
y = y_center + R * sin(fi);
plot(x,y)
hold on
plot(x1,x2,'.r');
hold off
//сохраненные файл-функции находятся в архиве, в папке «Лабораторная работа 3 4 5»
Лабораторная работа 6
Тема: «М-файлы»
Задания.
1. Напишите и выполните файл-программу построения графиков следующих функций с заголовком, подписями к осям, сеткой. Используйте разные типы линий и маркеров. Для вычисления значений функций создайте файл-функцию. Для fpiot и plot используйте две подобласти на одном рисунке:
;
;
Выполнение:
Содержание файла-программы:
x=0:0.1:2*pi;
u=(sin(log(x+1))+cos(log(x+1)));
subplot(2,2,1)
plot(x,u)
title('u')
grid on
x=-0.9:0.1:0.9;
f=1./(1+(1./(1+x)));
subplot(2,2,2)
plot(x,f)
title('f')
grid on
x=0.5:0.1:1.5;
g=x.^(x.^x);
subplot(2,2,3)
plot(x,g)
title('g')
grid on
x=0:0.1:1;
h=sin(6*pi.*(x.^2).*abs(x-(2/3)));
subplot(2,2,4)
plot(x,h)
title('g')
grid on
Графики:
2. Напишите и выполните файл-программу для построения поверхностей.
Для вычисления значений функций создайте файл-функцию:
Выполнение:
Содержание файла-программы:
x=-1:0.1:1;
y=-1:0.1:1;
[X,Y]=meshgrid(x,y);
z=exp(3*X.*sin(Y.*pi*0.5)) + exp(3*Y.*sin(X.*0.5*pi));
subplot(1,2,1)
surf(X,Y,z)
title('Z')
grid on
x=0:0.1:1;
y=0:0.1:1;
[X,Y]=meshgrid(x,y);
w=(sin(exp(X.*2)-exp(Y.*(-2)))+cos(exp(Y.*2)-exp(X.*-2)));
subplot(1,2,2)
surf(X,Y,w)
title('W')
grid on
Поверхности:
2. Напишите файл-функцию для решения следующих задач:
1) по заданному вектору определить номер его элемента с наибольшим отклонением от среднего арифметического всех элементов вектора;
function c = function1(a)
[ maxVal maxInd ] = max(abs(a - mean(a)));
2)вычислить сумму всех элементов вектора с нечетными индексами;
function b = summa(a,m,n)
a=m:2:n;
b= sum(a);
3) найти максимальное значение среди диагональных элементов заданной матрицы;
function c = function3(A)
c = max(diag(A))
4) переставить первый столбец квадратной матрицы с ее диагональю;
function b =function4(A)
v = diag(A);
A=diag(A(:,1));
A(:,1)= v;
b=A;
5) просуммировать все внедиагональные элементы заданной матрицы;
function S =sum(A)
S = sum(sum(A)) - sum(diag(A));
6) заменить максимальный элемент вектора средним значением всех его элементов;
function x = replaceMax2Mean(x)
x(x == max(x)) = mean(x);
7) заменить элемент матрицы с индексами 1,1 произведением всех элементов матрицы;
function ans = proizv(A)
A (1,1) = prod(prod(A));
8) построить многоугольник (замкнутый) с координатами вершин (xi9yi), заданными
векторами хну;
function z= function8(X,Y)
X=[1 2 3 2 1];
Y=[1 2 0 5 1];
z=patch(X,Y,[1 0 0]);
9) отобразить элементы заданного вектора синими маркерами, а максимальный элемент— красным и вернуть значение и номер максимального элемента.
function c = function9(a)
I=max(a);
i=find(a == max(a));
disp(i);
disp(I);
plot(a,'.b');
hold on
plot(a(i),'.r');
hold off
end
//сохраненные файл-функции находятся в архиве, в папке «Лабораторная работа 6»
Лабораторная работа 7
Тема: «Методы вычисления в MATLAB»
Задания
1. Вычислите интеграл от функции:
по промежутку между ее двумя соседними корнями, принадлежащими отрезку [0, 4].
Выполнение:
fplot ('(cos (x - sqrt(2)).*exp(2*sin (x))-1)', [0,4])
grid on
x1 = fzero ('(cos (x - sqrt(2)).*exp(2*sin (x))-1)', 0.5)
x2 = fzero ('(cos (x - sqrt(2)).*exp(2*sin (x))-1)', 2.5)
I = quad ('(cos (x - sqrt(2)).*exp(2*sin (x))-1)', x1, x2)
Ход работы:
График функции:
2. Вычислите интеграл от функции
по промежутку между ее локальным максимумом и локальным минимумом, абсциссы которых принадлежат отрезку [-5, 0].
Выполнение:
fplot ('sin(x) - (x.^2).* cos (x)', [-5,0])
grid on
x1 = fminbnd ('sin(x) - (x.^2).* cos (x)', -4, -3.5)
x2 = fminbnd ('sin(x) - (x.^2).* cos (x)', -1.5, -1)
I = quad ('sin(x) - (x.^2).* cos (x)', x1, x2)
Ход работы:
График функции:
Задание:
Найдите корень уравнения f(z) = 0.1, если
Выполнение:
syms x
f = x.* tan(x).^2;
integral=int (f, x)
c = log(cos(0)) + 0*tan(0) - 0^2/2
% по теореме Ньютона-Лейбница d= f(z)-f(0) т.к. с= f(0)=0, то d = f(z)
syms z
d = log(cos(z)) + z*tan(z) - z^2/2
fplot ('log(cos(z)) + z*tan(z) - z^2/2-0.1', [-10,10])
% f(z) = 0.1
grid on
% на графике видно, что корень уравнения не один, их количество стремится к бесконечности
Ход работы:
График:
Задание:
4. Решите систему дифференциальных уравнений для х [0, 5]:
Выполнение:
Фаил-программа:
function F = ddefun(x,y,Z)
Y1 = Z(:,1);
Y2 = Z(:,2);
F = [ Y2(1)
-Y1(2)+Y2(1)];
function S = ddehistory(x)
S = [(sin(x) + 0.1)
(x -2)];
function ddetest
sol =dde23(@ddefun,[0.5; 1], @ddehistory,[0, 5]);
figure
subplot (2,1,1)
plot (sol.x, sol.y(1,:), 'o')
y1= inline ('sin(x) + 0.1');
hold on
fplot (y1, [0,5], 'r')
title ('Первая компонента решения')
legend ('приближенное значение','точное значение')
subplot (2,1,2)
plot (sol.x, sol.y(1,:), '+')
y2 = inline('x-2');
hold on
fplot(y2, [0,5], 'r')
title ('Вторая компонента решения')
legend ('приближенное значение', 'точное значение')
//запустив последнюю функцию, мы получим результат на экране
Решение:
График решение:
Задание:
5. Решите дифференциальное уравнение для
Выполнение:
Фаил-программа:
function solvdem
Y0=[0.02;1];
[T,Y]=ode113(@oscil,[0;5],Y0);
plot(T,Y(:,1),'r.-')
hold on
plot(T,Y(:,2),'k.:')
grid on
hold off
function F = oscil(x,y)
F= [y(2); 0.1*(y(1)^2)-3*y(1) + 2*sin(x)];
График решение:
//сохраненные файл-функции находятся в архиве, в папке «Лабораторная работа 7»
Лабораторная работа 8
Тема «Работа с массивами»
Задания
1. Задана квадратная матрица
Элементы матрицы А обозначим aik. Требуется узнать и записать размер матрицы в переменную n (конечно, он равен 3, но лучше использовать функцию для автоматического определения размера) и вычислить приведенные ниже величины (нормы матрицы):
Выполнение:
A= [ -1.2 4.6 -0.3
2.8 9.9 -0.7
0.9 -2.5 7.1]
n=size(A)
S = sum (A)
S = sum (S)
p = sum (max(A))
q = sum (max (A, [ ], 2))
Ход работы:
2. При помощи встроенных функций для заполнения стандартных матриц,
индексации двоеточием и, возможно, поворота, транспонирования или
вычеркивания получите следующие матрицы:
;
;
Выполнение:
d = [ 2 3 4 5 6 7 8]
N = diag (d) + diag (ones (1, 6), 1) + diag (ones (1,6), -1) + diag ((5), 6) + diag ((5), -6)
N (6,7) = 0
Ход работы:
Выполнение:
A = eye(7) + rot90(-eye(7))
A (4,4) = 5
Ход работы:
Выполнение:
A = diag(ones (1,7),4) + eye (11,11)
A (8:11,:) = [ ]
Ход работы:
Выполнение:
A = eye (11,11) + diag (ones (1,10),1)
D = diag (-1*ones(1,10),1)
D (:, 5:end) = 0
B = -1*eye(11)
B (1:3,:) = 0
S = A + D + B
Ход работы:
3. Сконструируйте блочные матрицы (используя функции для заполнения стандартных матриц) и определите заданные величины, применяя функции обработки данных и поэлементные операции.
; ;
;
Выполнение:
M= [ eye(3) 4*eye(3); 2*ones(3) 3*ones(3)]
S= sum(sum (sqrt(M^2)))
N = [ ones(2) -3*ones(2,4); -3*ones(4,2) 2*eye(4)]
Ход работы:
1)Переставьте столбцы матрицы в порядке возрастания суммы элементов столбца.
Выполнение:
[V, ind] = sort(sum(A))
A = A ([ ind],:)
Ход работы:
2)Найдите сумму всех положительных элементов матрицы.
Выполнение:
N = max (A, 0)
S = sum(sum (N))
Ход работы:
3) Считайте матрицу из файла matr.txt (предварительно создайте ее самостоятельно),
замените в ней все элементы, большие среднего арифметического ее элементов, на среднее арифметическое и запишите ее в файл newmatr.txt (включите этот файл в отчет)
Выполнение:
A = load ('matr.txt')
Sr = mean(mean (A))
S = max (A, Sr)
save ' newmatr.txt ' S -ascii
Ход работы:
4)Определите максимальный столбцовый и строчный индексы отрицательных элементов матрицы.
Выполнение:
[ i, j ] = max(find (A<0))
Ход работы:
Лабораторная работа 9
Тема: «Интерактивная среда для построения графиков»
Задания
Постройте поверхности из задания к лабораторной работе №2. Используя средства редактора свойств Property Editor, оформите их графическое представление:
• задайте характеристики осей;
• подберите цветовую палитру для лучшего отражения свойств поверхности;
• поварьируйте свойства граней и маркеров точек сетки;
• воспользуйтесь камерой для всестороннего осмотра и изучения поверхности
Выполнение:
[x, y] = meshgrid (-5:0.05:5, -5:0.05:5);
z=sqrt((x.^2) + (y.^2) +1);
f= ((x.^2)/8 +(y.^2)/8);
b = ((x.^2)/8 -(y.^2)/8);
surf(x,y,z)
surf(x,y,f)
surf(x,y,b)
Поверхности:
Двуполостный гиперболоид
Однополостный гиперболоид
Гиперболический параболоид
Вывод:
В ходе данной лабораторной работы, мы научились работать с графиками, с массивами и матрицами. Мы научились простейшим операциям с графиками, таким как построение графиков функций, вычисление их значений в заданной точке, выводам графиков различными способами. С помощью специальной кнопки, посмотреть график со всех сторон. Научились визуализировать функции нескольких переменных на прямоугольной области определения, а так же определять экстремумы функции. Разобрались в работе с массивами в matlabи при помощи функций для заполнения матриц, индексация двоеточием и транспонирования получали нужные матрицы. Выполнять различные арифметические операции, например решение интегралов и дифференциальных уравнений. Эти знания пригодятся нам в дальнейшем обучении, так как matlabможет выполнять различные технические вычисления.
Список литературы:
1. Ануфриев И., Смирнов А., Смирнова Е. MATLAB 7.0. БХВ-Петербург · 2005.
2. http://solidbase.karelia.ru/edu/meth_calc/files/sod.shtm
3. http://matlab.exponenta.ru/