одно окно одни оси, с дополнениями к графикам

Московский государственный технический университет

Им. Н. Э. Баумана

 

Кафедра «Защита информации»

 

 

Учебная практика

Работа в среде 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

 

Тема: «Графика. Диаграммы и гистограммы»

Задания

  1. Постройте графики функций одной переменной на отрезке [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/