Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

c++, Matlab

.pdf
Скачиваний:
98
Добавлен:
30.03.2015
Размер:
1 Mб
Скачать

Возможен ввод элементов матриц и векторов в виде арифметических выражений, содержащих любые доступные системе функции, например:

>>V=[2+2/(3+4) exp(5) sqrt(10)];

>>V

Для указания отдельного элемента вектора или матрицы используются выражения видов V(1) или M(r, s), где r – номер строки элемента, s – номер столбца элемента. Например, результат выполнения команды

>> M(2, 3)

будет равен 6. Если нужно присвоить элементу M(r, s) новое значение х, следует использовать выражение M(r, s) = x.

Например, если элементу М(2, 2) надо присвоить значение 10, следует ввести команду

>> M(2,2)=10

ВНИМАНИЕ! В тексте программ Matlab не рекомендуется использовать символы i и j как индексы, так как i и j – обозначение квадратного корня из –1. При этом можно использовать символы

I и J.

В Matlab можно сгенерировать матрицу с помощью случайных чисел. Так, команда

>> F=rand(3)

порождает массив случайных чисел размером 3 × 3 с элементами, равномерно распределенными на интервале от 0 до 1. Если вызвать эту функцию с двумя аргументами, например R = rand(2, 3), то получится матрица R случайных элементов размером 2 × 3.

Возможно задание векторов и матриц с комплексными элементами, например:

>>i=sqrt(1);

>>CM =[1 2; 3 4] + i*[5 6; 7 8]

или

>>CM = [1+5*i 2+6*i; 3+7*i 4+8*i]

Это создает матрицу

1.0000 + 5.0000 i

2.0000 + 6.0000 i

CM =

+ 7.0000 i

.

3.0000

4.0000 + 8.0000 i

11

Операции с массивами

Наряду с операциями над отдельными элементами матриц и векторов, система позволяет производить операции умножения, деления и возведения в степень сразу над всеми элементами, т. е. над массивами [2]. Для этого перед знаком операции ставится точка. Например, оператор «*» означает умножение для векторов или матриц, а оператор «.*» – поэлементное умножение всех элементов массива. Так, если М – матрица, то М.*2 даст матрицу, все элементы которой умножены на скаляр – число 2.

Поменять местами строки матрицы с ее столбцами можно операцией транспонирования, которая обозначается знаком «.'» (точка и апостроф). Например,

>>A=[1 1 1; 2 2 2; 3 3 3];

>>B=A.'

Операция «'» (апостроф) выполняет транспонирование для вещественных матриц и транспонирование с одновременным комплексным сопряжением для комплексных матриц.

Основные функции для работы с массивами

Для работы с массивами предназначены следующие функции [1–4]: cross(X,Y) – нахождение векторного произведения векторов;

sum(Х) – суммирование элементов массива (в случае одномерного массива возвращает сумму элементов массива, в случае двумерного массива – это век- тор-строка, содержащая суммы элементов каждого столбца);

prod(X) – произведение элементов массива (в случае одномерного массива возвращает произведение элементов массива, в случае двумерного массива – это вектор-строка, содержащая произведения элементов каждого столбца);

min(X) – в случае одномерного массива возвращает наименьший элемент, в случае двумерного массива – вектор-строку, содержащую минимальные элементы каждого столбца;

max(X) – в случае одномерного массива возвращает наибольший элемент, в случае двумерного массива – вектор-строку, содержащую максимальные элементы каждого столбца;

mean(X) – в случае одномерного массива возвращает арифметическое среднее элементов массива, в случае двумерного массива – вектор-строку, содержащую арифметическое среднее элементов каждого столбца;

length(x) – определение длины векторов-столбцов или векторов-строк; sort(X) – в случае одномерного массива упорядочивает элементы массива по возрастанию, в случае двумерного массива происходит упорядочение элемен-

тов каждого столбца;

det(A) – вычисляет определитель квадратной матрицы.

12

Для того чтобы вычислить скалярное произведение векторов x и y, нельзя записать команду x*y, так как система выдаст сообщение об ошибке. По правилу умножения матриц элементы строки первой матрицы умножаются на элементы первого столбца второй матрицы, и их сумма присваивается первому элементу результирующей матрицы и т. д. Для выполнения этого правила нужно транспонировать вторую матрицу:

>> x*y'

Длина вектора вычисляется с помощью скалярного произведения и функции извлечения квадратного корня, например:

>> sqrt(x*y')

Matlab производит групповые вычисления над массивами, используя обычные математические функции, которые в традиционных языках программирования работают только со скалярными аргументами. Например, всего два коротких выражения

>> x=0:0.01:pi/2; y=sin(x);

вычисляют значения функции sin сразу в 158 точках, формируя два вектора x и у со 158 элементами каждый.

Ход работы

1. Вычислить значение выражения

 

 

 

2

100 0.2π

 

ln 1+ 5 lg

.

 

 

 

1+ e3

 

Для этого набрать в командной строке следующие функции:

>>log(1+5*((log10(100))^20.2*pi)/sqrt(1+2.71828^3))

Изменить формат выводимого числа:

>>format long

>>ans

2.Вычислить значение переменной y = exp(–x2) + sin(2πx) при х = 2,5. Для этого набрать в командной строке:

>>x=2.5; y=exp(x^2)+sin(2*pi*x)

13

3.Создать два одномерных массива a = [1 2 3] и b = [2 2 3]. Вычислить результат поэлементного умножения, деления, сложения и вычитания массивов a и b:

>>c=a.*b

>>d=a./b

>>e=ab

>>f=a+b

4.Вычислить скалярное и векторное произведения векторов a и b:

>>a=[1 3 1]; b= [3 0 7];

>>a*b'

Векторное произведение:

>>cross(a,b)

5.Задать одномерный массив t = [–1 0 2 3 –5 –7 –4]. Определить минимальный и максимальный элементы, найти среднее значение элементов массива t:

>>t =[1 0 2 3 5 7 4];

>>min(t)

>>max(t)

>>mean(t)

Проверить полученное значение среднего арифметического элементов мас-

сива, воспользовавшись определением отношения суммы элементов матрицы к их числу:

>>sum(t)/length(t)

6.Создать одномерный массив из случайных чисел, для чего набрать команду:

>>t=10*rand(1,5)

Отсортировать массив t по возрастанию и убыванию:

>>sort(t)

>>sort(t)

7.Задать вектор значений аргумента x = [0:pi/50:pi]. Вычислить значение

cos(x).

8.Найти корни системы линейных алгебраических уравнений:

2x1 + 3x2 + 4x3 =14,2x1 x2 x3 = –15,x1 – 2x2 – 3x3 = –4.

14

Для этого задать следующие векторы:

>>a=[2 3 4; 2 1 5; 1 2 3]; b=[14; 15; 4];

Набрать команду

>>x=a\b

При вычислении корней применяется операция обратного деления. 9. Задать матрицу А с помощью операции конкатенации:

 

3

1.5

2.8

 

 

2

1.1

5

 

 

 

 

4

7

11

 

 

 

>>A=[3 1.5 2.8; 2 1.1 5; 4 7 11]

10.Сгенерировать массив В размером 3 × 3 со случайными элементами, равномерно распределенными на интервале от 0 до 1.

>>B=rand(3)

11.Выполнить преобразование матриц:

>>A*B

Поэлементно умножить матрицу А на В:

>>A.*B

Транспонировать матрицу B:

>>B'

Расположить элементы матрицы А по возрастанию (по столбцам):

>>sort(A)

Вычислить определитель матрицы В:

>>det(B)

Выполнить операцию сложения элементов столбцов матрицы А:

>>sum(A)

15

Контрольные вопросы

1.Перечислите и опишите форматы вывода чисел на экран. Какой формат вывода чисел установлен по умолчанию? Как изменить формат вывода числа на экран?

2.Какие виды констант в среде Matlab вам известны?

3.Как можно просмотреть список всех элементарных математических функций в среде Matlab?

4.Перечислите и кратко опишите виды функций в среде Matlab.

5.Опишите способы создания одномерных и двумерных массивов в сре-

де Matlab.

6.Перечислите операторы, используемые для вычислений с массивами. Объясните их действие.

7.Какое назначение имеют функции prod, sum, min, max и sort?

8.Как выполняется скалярное произведение векторов?

9.Как выполняется векторное произведение векторов?

10.Для каких целей используется функция rand?

11.Как вычисляется функция cos от элементов матриц?

Библиографический список

1.Бозиев, С. Н. Matlab 2006a в примерах / С. Н. Бозиев. – М. : Изд-во РГУ нефти и газа им. И. М. Губкина, 2006. – 150 с.

2.Дьяконов, В. П. Matlab 6.5 SP1/7 + Simulink 5/6. Основы применения /

В. П. Дьяконов. – М. : СОЛОН-Пресс, 2005. – 800 с.

3.Курбатова, Е. А. MATLAB 7. Самоучитель / Е. А. Курбатова. – М. : Диа-

лектика, 2005. – 256 с.

4.Поршнев, С. В. Matlab 7. Основы работы и программирования : учебник / С. В. Поршнев. – М. : Бином-Пресс, 2011. – 320 с.

16

ЛАБОРАТОРНАЯ РАБОТА 2

ГРАФИКА В MATLAB

Цель работы – получение навыков построения графиков и диаграмм в сре-

де Matlab.

Задание к работе

1.Построить график функции в декартовой системе координат.

2.Построить график функции в полярной системе координат.

3.Построить график функции в виде столбчатой диаграммы.

4.Построить гистограмму и контурный график.

5.Изучить возможности управления графикой в Matlab.

6.Сделать выводы по результатам работы.

Пояснения к работе

Одно из достоинств системы Matlab – это обилие средств графики. Среда предоставляет большие возможности начиная от построения простых графиков функций одной переменной в декартовой системе координат и заканчивая комбинированными и презентационными графиками с элементами анимации. В среде также имеются средства проектирования графического пользовательского интерфейса (GUI). Ниже рассмотрены некоторые возможности отображения графической информации в Matlab [1, 2, 4].

Построение графика функции одной переменной

Построение графиков функций в декартовой системе координат осуществляется с помощью команды plot, которая может иметь следующие варианты записи [1]:

plot(X,Y) – строит график зависимости значений вектора Y от соответствующих значений вектора X (значение вектора X – это абсцисса, значение вектора Y – ордината). Размеры векторов должны быть одинаковыми. Если X или Y – матрица, то строится семейство графиков по данным, содержащимся в столбцах матрицы;

plot(X,Y,S) – аналогична команде plot(X,Y), но тип линии графика можно задавать с помощью строковой константы S. Символы константы S заключаются в апострофы, например: plot(x,y,'Mx-.');

17

рlot(X1,Y1,S1,Х2,Y2,S2,ХЗ,Y3,S3,…) – эта команда строит на одном графике ряд линий. Здесь X1, Х2, X3… и Y1, Y2, Y3... – векторы или матрицы, а S1, S2, S3… – строковые константы. С помощью такой конструкции возможно построение, например, графика функции линией, цвет которой отличается от цвета узловых точек. Так, если надо построить график функции линией синего цвета с красными точками, то вначале надо задать построение графика с точками красного цвета (без линии), а затем графика только линии синего цвета (без точек).

Строковая константа S должна состоять из символов, приведенных в табл. 2.1.

 

 

 

 

 

Таблица 2.1

 

 

 

 

 

 

Цвет линии

 

Тип точки

Тип линии

 

 

 

 

 

 

Символ

Пояснение

Символ

Пояснение

Символ

Пояснение

 

 

 

 

 

 

Y

Желтый

.

Точка

:

Двойной

пунктир

 

 

 

 

 

M

Фиолетовый

o

Окружность

-.

Штрих-

пунктир

 

 

 

 

 

C

Голубой

x

Крест

--

Штриховая

 

 

 

 

 

 

R

Красный

+

Плюс

-

Непрерывная

 

 

 

 

 

 

G

Зеленый

*

Звездочка

 

 

 

 

 

 

 

 

B

Синий

s

Квадрат

 

 

 

 

 

 

 

 

W

Белый

D

Ромб

 

 

 

 

 

 

 

 

K

Черный

V

Треугольник (вниз)

 

 

 

 

 

 

 

 

 

 

^

Треугольник (вверх)

 

 

 

 

 

 

 

 

 

 

<

Треугольник (влево)

 

 

 

 

 

 

 

 

 

 

>

Треугольник (вправо)

 

 

 

 

 

 

 

 

 

 

P

Пятиугольник

 

 

 

 

 

 

 

 

 

 

H

Шестиугольник

 

 

 

 

 

 

 

 

Столбчатые диаграммы

Столбчатые диаграммы широко используются в литературе, посвященной финансам и экономике, а также в математической литературе. Ниже представлены команды для построения таких диаграмм [1]:

bar(X,Y) – строит столбчатую диаграмму элементов вектора Y (или группы столбцов для матрицы Y). Спецификация положения столбцов задается значениями элементов вектора X, которые должны идти в монотонно возрастающем порядке;

18

bar(Y) – строит график значений элементов матрицы Y так же, как указано выше, но фактически для построения графика используется вектор X = 1:M, где M – количество строк матрицы;

bar(X,Y,WIDTH) – команда аналогична ранее рассмотренным, но со спецификацией ширины столбцов. По умолчанию значение WIDTH задано равным 0,8.

Возможно применение рассмотренных команд в следующем виде: bаr(…. 'Спецификация') для задания спецификации графиков, например

типа линий, цвета и т. д.

Пример построения столбчатой диаграммы матрицы размером 12 × 3 приводится ниже:

>>% Столбчатая диаграмма с вертикальными столбцами

>>subplot(2,1,1), bar(rand(12,3),'stacked'), colormap(cool)

Помимо команды bar(...), существует аналогичная ей по синтаксису команда barh(...), которая строит столбчатые диаграммы с горизонтальным расположением столбцов:

>> subplot(2,1,1), barh(rand(5,3),'stacked'), colormap(cool)

Построение гистограмм

Классическая гистограмма отображает частость попадания элементов вектора Y в М интервалов в виде столбчатой диаграммы. Для построения гистограммы служит функция hist, записываемая в следующем виде [2]:

N=hist(Y) – возвращает вектор значений частости для 10 интервалов, выбираемых автоматически. Если Y – матрица, то выдается массив значений частости для каждого из ее столбцов;

N=hist(Y,M) – аналогична рассмотренной выше, но используется М интервалов (М – скаляр);

N=hist(Y,X) – возвращает числа попаданий элементов вектора Y в интервалы, центры которых заданы элементами вектора X;

[N,X]=hist(...) – возвращает числа попаданий в интервалы и данные о центрах интервалов.

Графики в полярной системе координат

В полярной системе координат любая точка представляется как конец ра- диуса-вектора, исходящего из начала системы координат, имеющего длину R и угол θ. Угол θ обычно меняется от 0 до 2π. Для построения графиков функций в полярной системе координат используется команда polar:

polar(t,f) – строит график в полярной системе координат, представляющий собой положение конца радиуса-вектора с длиной f и углом t;

19

polar(t,f,S) – аналогична предыдущей команде, но позволяет задавать стиль построения с помощью строковой константы S по аналогии с коман-

дой plot.

Пример применения команды polar:

>>t=0:pi/50:2*pi;

>>polar(t,sin(5*t))

Результат выполнения команды показан на рис. 2.1.

Рис. 2.1

Контурные графики

Контурные графики служат для представления на плоскости функции двух переменных вида z(x, у) с помощью линий уровня. Линии уровня образуются при пересечении трехмерной поверхности рядом плоскостей, расположенных параллельно друг другу. При этом контурный график представляет собой совокупность линий уровня, спроецированных на плоскость(х, у).

Для построения контурных графиков используется команда contour [1]: contour(Z) – строит контурный график по данным матрицы Z с автома-

тическим заданием диапазонов изменения х и у;

contour(X,Y,Z) – строит контурный график по данным матрицы Z с указанием спецификаций для X и Y;

contour(Z,N) и contour(X,Y,Z,N) – выполняют построения, анало-

гичные ранее описанным командам, с заданием N линий уровня (по умолчанию

N = 10);

contour(Z,V) и contour(X,Y,Z,V) – строят линии уровня с указани-

ем уровней в виде вектора V.

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]