Некоторые из основных приемов работы В MatLAB
Первое знакомство с Математическим
Пакетом Matlab
ЦЕЛЬ РАБОТЫ
Ознакомление с программным пакетом для математических расчетов MatLab R2007bи получение первоначальных навыков его использования.
1.1. ПОЯСНЕНИЯ К РАБОТЕ
Введение
MatLab – это мощное и универсальное программное средство решения задач, возникающих в различных областях человеческой деятельности. Его можно использовать при: матричном анализе, обработке сигналов и изображений, решении задач математической физики и оптимизационных задач, обработке и визуализации данных, работе с картографическими изображениями и многом другим.
Пользовательский интерфейс
Запуск MatLab R2007bпроизводится стандартным для Windows способом. Типичный вид экрана монитора при работе с MatLab R2007b показан на рис. 1.1. Для установки вида окна, принятого по умолчанию, следует ЛКМ выбрать меню Desktop Desktop Layout Default.
![](https://konspekta.net/stydopediaru/baza1/3690766098455.files/image009.gif)
Рис. 1.1. Рабочее окно MatLab R2007b
Ограничимся рассмотрением только тех пунктов меню, которые не являются стандартными для Windows и представляют наибольший интерес при выполнении (в рамках настоящих методических указаний) математического моделирования радиотехнических цепей и процессов в них.
Меню File Preferences… предоставляет возможность пользователю устанавливать параметры рабочей среды. Меню File Save Workspace As… позволяет сохранить значения всех переменных и настройки текущей рабочей среды в файле с расширением mat.
Пункты Clear Command Window, Clear Command History и Clear Workspace в меню Edit позволяют очистить соответственно командное окно, окно истории команд и окно переменных.
Окно переменных позволяет быстро и просто получить информацию не только о доступных переменных, но и проконтролировать их значения (двойным щелчком ЛКМ).
Окно История команд удобно тем, что позволяет быстро найти, вызвать, скопировать или удалить ранее уже набранную команду.
В Окне команд содержится перечень последних поданных команд, результаты их выполнения и служебные сообщения.
???????
Некоторые из основных приемов работы В MatLAB
В MatLab используются все буквы латинского алфавита и арабские цифры от 0 до 9. Как и в С++, большие и малые буквы различаются. Кроме букв латинского алфавита используются все специальные символы клавиатуры компьютера. Все символы после символа ‘%’ до конца текущей строки в MatLab рассматриваются как комментарии.
Выполнение арифметических вычислений.Используются символы: `+`, `-`, `*`, `/` и `^` (возведение в степень). Для установления приоритета выполнения действий следует использовать круглые скобки `()`, а для подавления печати результата вычислений необходимо применять символ `;`. Пусть необходимо вычислить следующее выражение .
Щёлкнем ЛКМ в командной строке (там после этого должен появиться мигающий курсор) и наберем следующую последовательность символов 2^3.2/4.7-4*5.6 и нажмите на клавишу <<Enter>>. В рабочем окне появится запись
>> 2^3.2/4.7-4*5.6
ans =
-20.4448
>>
− к конце которой будет расположен мигающий курсор.
Если набрать следующую последовательность символов 2^3.2/4.7-4*5.6; и тоже нажать на клавишу <<Enter>>, то в рабочем окне появится другая запись
>> 2^3.2/4.7-4*5.6;
>>
− с мигающим курсором в конце. Печать результата вычислений здесь подавлена символом `;`. Он хранится в переменной с именем ans и для его получения следует в командной строке набрать ans<<Enter>>. Кроме того в дальнейших вычислениях имя этой переменной (ans) можно подставлять вместо результата вычислений.
Если имеется необходимость повторно вызвать ранее уже введённую запись, то это легче всего сделать, используя клавиши << >> и << >>.
Вообще говоря, имя переменной может состоять из букв латинского алфавита, знака подчёркивания и цифр, и обязательно должно начинаться с буквы. Для того чтобы проверить занято ли уже какое-либо имя следует набрать в командной строке exist(‘имя переменной’). Нулевой ответ при выполнении этой команды (вызова функции exist) говорит, что имя свободно. Пример.
>> exist('a6')
ans =
Для изменения формата выводимых числовых данных можно поступить двумя способами. Первый состоит в вызове в командной строке функции format с одним из её аргументов: short, short e, long, long e, bank, compact, loose. Пример
>> format short
Второй способ состоит в вызове (ЛКМ через меню File Preferences…) окна Preferences, которое представлено на рис. 1.2. Здесь в ниспадающем списке элемента Numeric format: и следует выбрать желаемый числовой формат для выводимых данных. Помимо этого там же ниже в элементе Numeric display: можно изменить и вид выводимой в командном окне информации (компактный − compact или свободный − loose). Завершить выбор следует щелчком ЛКМ по кнопке OK.
![](https://konspekta.net/stydopediaru/baza1/3690766098455.files/image027.jpg)
Рис. 1.2. Окно Preferences
Массивы и работа с ними.Все данные MatLab представляет в виде массивов. Простое число в MatLab представляется в виде двумерного массива размером один на один. Массив − это упорядоченная, пронумерованная совокупность однородных данных, имеющая имя. Массивы бывают одномерными (вектор-столбцы и вектор-строки), двумерные и многомерные. В MatLabнумерация элементов массивов начинается с единицы.
Ввод вектор-строки осуществляется в квадратных скобках. При этом элементы следует отделять друг от друга пробелом или запятой. Пример
>> a=[0.8 2.3 9.1]
a =
8.0000e-001 2.3000e+000 9.1000e+000
Ввод вектор-столбца также осуществляется в квадратных скобках, но при этом элементы отделяются друг от друга точкой с запятой. Пример
>> b=[-2.2;5.9;0.7]
b =
-2.2000e+000
5.9000e+000
7.0000e-001
Над векторами определены следующие операции: вычисления его длины, транспонирования, сложения, вычитания, умножения на число, скалярное и векторное (только для трёхэлементных векторов) произведения, как показано ниже
>> L=length(a) % вычисление длины вектора
L =
>> ar=a' % транспонирование вектора
ar =
0.8000
2.3000
9.1000
>> c=[0.2 0.7 0.9];
>> d=a+c % вычисление суммы векторов
d =
1 3 10
>> g=a-c % вычисление разности векторов
g =
0.6000 1.6000 8.2000
>> z=a*2 % умножение вектора на число
z =
1.6000 4.6000 18.2000
>> u=dot(a,c) % скалярное умножение векторов
u =
9.9600
>> y=cross(a,c) % векторное умножение векторов
y =
-4.3000 1.1000 0.1000
Векторы могут быть элементами при определении новых векторов, например
>> ac=[a,c]
ac =
0.8000 2.3000 9.1000 0.2000 0.7000 0.9000
>> act=[ar;c']
act =
0.8000
2.3000
9.1000
0.2000
0.7000
0.9000
Для доступа к элементу массива следует после имени массива в круглых скобках указать его индекс, например
>> act(3)+y(1)
ans =
4.8000
При работе с индексами удобна индексация при помощи символа ‘:’. Примеры
>> act(2:5)=0
act =
0.8000
0.9000
>> x=0:2*pi/9:2*pi % начальное значение 0, шаг − , конечное − ![](https://konspekta.net/stydopediaru/baza1/3690766098455.files/image031.gif)
x =
Columns 1 through 9
0 0.6981 1.3963 2.0944 2.7925 3.4907 4.1888 4.8869 5.5851
Column 10
6.2832
Над векторами возможны так называемые поэлементные операции (поэлементные умножение, деление и возведение в степень), как показано ниже
>> v=a.*c % поэлементное умножение
v =
0.1600 1.6100 8.1900
>> z=a./c % поэлементное деление
z =
4.0000 3.2857 10.1111
>> s=a.^c % поэлементное возведение в степень
s =
0.9564 1.7915 7.2969
В системе MatLab не определены поэлементное сложение и вычитание.
Ввод двумерных массивов (прямоугольных матриц) осуществляется по строкам. Пусть, например, необходимо ввести матрицу
.
Это можно сделать тремя способами:
>> A=[0.4 -4.5 8.3;6.8 0.9 1.1; -6.3 3.5 4.7] % отделяем строки символом ‘;’
A =
0.4000 -4.5000 8.3000
6.8000 0.9000 1.1000
-6.3000 3.5000 4.7000
B=[ 1.3 5.2 -8.1<<Enter>> % отделяем строки нажатием
-1.7 2.4 0.3<<Enter>> % на клавишу <<Enter>>
6.6 -7.1 1.0]<<Enter>>
B =
1.3000 5.2000 -8.1000
-1.7000 2.4000 0.3000
6.6000 -7.1000 1.0000
>> D=[[3;4] [-1;3] [6;0]] % элементами строки являются столбцы
D =
3 -1 6
4 3 0
Над матрицами определены следующие операции: вычисление размера матрицы, вычисление числа элементов матрицы, транспонирование, сложение и вычитание матриц (как для векторов), умножение на число (также как и для векторов), а также матричное произведение и возведение в степень (для квадратных матриц), как показано ниже
>> C=[4.4 0.7 -0.6; 2.8 -0.1 5.6] % ввод матрицы
C =
4.4000 0.7000 -0.6000
2.8000 -0.1000 5.6000
>> s=size(C) % вычисление размера матрицы
s =
2 3
>> C1=C.' % транспонирование матрицы
C1 =
4.4000 2.8000
0.7000 -0.1000
-0.6000 5.6000
>> n=numel(A) % вычисление числа элементов в матрице
n =
>> P=A*B % матричное произведение
P =
62.9500 -67.6500 3.7100
14.5700 29.7100 -53.7100
16.8800 -57.7300 56.7800
>> PP=A^2 % возведение в степень
PP =
-82.7300 23.2000 37.3800
1.9100 -25.9400 62.6000
-8.3300 47.9500 -26.3500
Обращение к элементам матрицы выполняется аналогично обращению к элементам вектора, но с использованием запятой, например
>> C(2,2)=-10 % элементу присваивается значение
C =
4.4000 0.7000 -0.6000
2.8000 -10.0000 5.6000
>> c121=C(1:2,1) % выделяются элементы С(1,1) и С(2,1)
c121 =
4.4000
2.8000
>> PP(:,2)=[] % удаляется второй столбец
PP =
-82.7300 37.3800
1.9100 62.6000
-8.3300 -26.3500
>> PP(:,3)=[1 2 3] % добавляется третий столбец
PP =
-82.7300 37.3800 1.0000
1.9100 62.6000 2.0000
-8.3300 -26.3500 3.0000
Для матриц, как и для векторов, определены следующие поэлементные операции:
A.*B − поэлементные умножения;
A./B − поэлементные деления;
A.^p − поэлементное возведение в степень (p − число);
A.^B − возведение элементов матрицы A в степени, равные соответствующим элементам матрицы B.
Элементарные функции системы MatLab. MatLab включает в себя огромный набор функций. Для знакомства с ними и выбора необходимой следует воспользоваться справочной службой системы через меню Help Product Help. Откроется окно и в нём в навигационном дереве, расположенном слева, следует выбрать пункт MATLAB, как показано на рис. 1.3. При использовании функций не следует забывать, что в MatLab все данные − суть матрицы.
![](https://konspekta.net/stydopediaru/baza1/3690766098455.files/image036.jpg)
Рис. 1.3. Окно справочной системы
Построение таблицы значений функции пользователя.Пусть необходимо построить таблицу значений функции для значений переменной х от 0.1 и до 2.5 с шагом 0.3. Требуемое выполняется в два этапа.
1. Создаётся вектор-строка х, которая содержит координаты требуемых точек.
2. Для каждого элемента вектора х вычисляется значение функции y(x) и полученное значение записывается в вектор-строку − как показано ниже (операции умножения, деления и возведения в степень в выражении для функции должны выполняться поэлементно!)
>> x=[0.1:0.3:2.5]
x =
0.1000 0.4000 0.7000 1.0000 1.3000 1.6000 1.9000 2.2000 2.5000
>> y=sin(x).^3./(1-0.5*cos(x))+exp(-x).*log10(x)
y =
-0.9029 -0.1573 0.3560 0.8164 1.0638 1.0256 0.7712 0.4463 0.1857
Построение графика функции.Если в следующей строке командного окна вызвать функцию plot(x,y), то откроется окно, показанное на рис. 1.4, с искомым графиком.
![](https://konspekta.net/stydopediaru/baza1/3690766098455.files/image040.jpg)
Рис. 1.4. Окно графика
Для того, чтобы на одной координатной плоскости построить графики двух функций (например, y(x) и sin(3x)) следует вызвать функцию plot со следующим списком аргументов
>> plot(x,y,x,sin(3*x))
После выполнения сказанного вид окна графика приобретёт вид, представленный на рис. 1.5. Если желательно, чтобы графики кривых не выглядели ломанными, то необходимо при определении вектора х выбрать меньший шаг.
![](https://konspekta.net/stydopediaru/baza1/3690766098455.files/image042.jpg)
Рис. 1.5. Окно графика
Функция plot позволяет пользователю достаточно гибко управлять процессом визуализации результатов вычислений. Один из возможных её синтаксисов
plot(X1,Y1,LineSpec1,X2,Y2,LineSpec2,...), где Х1, Х2, … − имена векторов оси абсцисс; Y1, Y2, … − имена векторов оси ординат; LineSpec1, LineSpec2, … − спецификации 1-ой, 2-ой и т. д. линий, записываемы в апострофах (см. таблицу 1.1). Пример
>> x1=[0:0.01:2:pi];
>> t3=[-pi:0.05:pi];
>> r1=exp(-x1).*sin(x1);
>> w4=t3.^2.*cos(t3);
>> plot(x1,r1,'r*',t3,w4,'k--')
Записанное выше приведёт к построению графика, показанного на рис. 1.6.
Таблица 1.1
Цвет линии
| Тип линии
| Тип маркера
| y
| желтый
| -
| Сплошная
| .
| точка
| m
| розовый
| :
| Пунктирная
| o
| кружок
| c
| голубой
| -.
| штрих-пунктирная
| x
| крестик
| r
| красный
| --
| Штриховая
| +
| знак плюс
| g
| зеленый
|
|
| *
| звездочка
| b
| синий
|
|
| s
| квадрат
| w
| белый
|
|
| d
| ромб
| k
| черный
|
|
| v
| треугольник вершиной вниз
|
|
|
|
| ^
| треугольник вершиной вверх
|
|
|
|
| <
| треугольник вершиной влево
|
|
|
|
| >
| треугольник вершиной вправо
|
|
|
|
| p
| пятиконечная звезда
|
|
|
|
| h
| Шестиконечная звезда
|
>> plotyy(x1,r1,t3,w4)
![](https://konspekta.net/stydopediaru/baza1/3690766098455.files/image044.jpg)
Рис. 1.6. Окно графика
Из рассмотрения этого рисунка видно, что значения двух функций сильно отличаются по величине и для них желательно иметь несколько отличающиеся оси ординат. Последнее достигается использованием функции (результат − на рис. 1.7)
![](https://konspekta.net/stydopediaru/baza1/3690766098455.files/image046.jpg)
Рис. 1.7. Окно графика
М-файл функции.Работа из командной строки MatLab вызывает затруднения, если требуется вводить много команд и часто их изменять. Пусть, например, необходимо так задать в MatLab функцию , чтобы в дальнейшем её значение для, например, х = 7, можно было бы получить простым вызовом f(7) в командной строке − также как и для элементарных функций. Для этого в MatLab имеется простой механизм, называемый М-файл функция. Это, в сущности, аналог функций языков программирования. Сначала М-файл функцию надо создать. Для этого необходимо выполним щелчёк ЛКМ по иконке (New M-File − новый М-файл), находящейся в панели ярлыков (то же самое можно сделать выбрав меню File New M-File). Откроется окно редактора М-файлов и в нём, как показано на рис. 1.8, набираем текст функции (операции используем поэлементные!). Здесь function − обязательное служебное слово, с − имя переменной выходного параметра (если их более одного, то они через запятую записываются в квадратных скобках), f − имя функции, х − имя входной переменной (если их более одной, то они записываются через запятую). Комментарии в MatLab начинаются со знака процента и автоматически выделяются зелёным цветом. В этом же окне файл надо сохранить (щелчком ЛКМ по иконке, изображающей дискетку). Файл должен иметь то же имя, что и функция, а также тип m. В редакторе М-файлов может быть одновременно открыто несколько файлов. Переход между файлами осуществляется при помощи закладок с именами файлов, находящихся внизу окна редактора.
![](https://konspekta.net/stydopediaru/baza1/3690766098455.files/image054.jpg)
Рис. 1.8. Окно редактора М-файлов с функцией
Теперь имеется возможность вызывать функцию f, указывая конкретное значение её параметра, например
>> f(7)
ans =
Если имеется необходимость повторно вызвать функцию f, то это целесообразно сделать, используя клавиши << >> и << >>. Для получения справки по любой встроенной функции MatLab достаточно установить курсор на имя функции и нажать на клавишу <<F1>>.
Построим график приведенной выше функции f(x) в декартовых координатах для промежутка изменения аргумента [-0.2, 2] с шагом 0.2. Будем исходить из того, что М-файл для f(x)уже сохранён на диске. Подадим в командной строке две простые команды
>> x=[-0.2:0.2:2];
>> plot(x,f(x))
Результатом этих действий будет график, представленный на рис. 1.9,а. Если же подать следующие две команды
>> x=[-0.2:0.02:2];
>> plot(x,f(x))
то результат окажется несколько иным (см. рис. 1.9,б).
![](https://konspekta.net/stydopediaru/baza1/3690766098455.files/image056.jpg)
а) б)
Рис. 1.9. Окна графика функции f(x)
Решение системы линейных алгебраических уравнений (СЛАУ). Постановка задачи. Общий вид у СЛАУ следующий:
.
В матричном виде эта СЛАУ может быть записана в виде: , где
![](https://konspekta.net/stydopediaru/baza1/3690766098455.files/image064.gif)
называется матрицей системы, − вектор-столбцом свободных членов или правых частей системы, а − искомым вектор-столбцом неизвестных системы. Решением СЛАУ является всякий вектор-столбец x, обращающий все уравнения системы в тождества.
Справедливо следующее утверждение. Если определитель основной матрицы СЛАУ отличен от нуля, то система имеет единственное решение.
Рассмотрим порядок решения СЛАУ в MatLab на конкретном примере. Найти решение СЛАУ вида
![](https://konspekta.net/stydopediaru/baza1/3690766098455.files/image073.gif)
Процесс решения будет выглядеть следующим образом
>> A=[7.9 5.6 5.7 -7.2;8.5 -4.8 0.8 3.5;4.3 4.2 -3.2 9.3;3.2 -1.4 -8.9 3.3]
A =
7.9000 5.6000 5.7000 -7.2000
8.5000 -4.8000 0.8000 3.5000
4.3000 4.2000 -3.2000 9.3000
3.2000 -1.4000 -8.9000 3.3000
>> det(A)
ans =
-1.0178e+004 % det А не равен нулю − решение единственное
>> b=[6.68;9.95;8.6;1]
b =
6.6800
9.9500
8.6000
1.0000
>> x=A\b
x =
0.9671
0.1248
0.4263
0.5679
>> A*x-b % вычисление невязки
ans =
1.0e-014 *
-0.0888
0.1776
0.1776
0.0444
Символ ‘\’ является оператором решения систем линейных уравнений.
Решение нелинейного уравнения.Нелинейным уравнением называется выражение вида , где - некоторая нелинейная функция. Корнем или решением уравнения называется всякое значение , обращающее уравнение в тождество, т. е. . В дальнейшем ограничимся рассмотрением лишь нелинейных уравнений с изолированными корнями, т. е. случая, когда для каждого корня уравнения существует окрестность, не содержащая других корней этого уравнения.
Функция , определённая и непрерывная на некотором конечном или бесконечном интервале , называется алгебраической, если она имеет вид , где - некоторые действительные или комплексные числа. К трансцендентным уравнениям относятся неалгебраические нелинейные уравнения.
К численным методам решения нелинейных уравнений приходиться обращаться в случае отсутствия у них аналитических выражений для решений или же если выполнение вычислений по ним является крайне трудоёмким делом.
Приближенное нахождение изолированных действительных корней обычно складывается из двух этапов:
1. отделение корней, т. е. нахождение возможно узких промежутков , в которых содержится один и только один корень уравнения , i=1, 2, …;
2. уточнение приближенных корней, т. е. нахождение их положения с заданной степени абсолютной точности . Под этим может пониматься выполнение одного из двух условий: или .
Для отделения корней полезна известная теорема существования корней нелинейного уравнения из математического анализа.
Теорема. Если непрерывная функция принимает значения разных знаков на концах отрезка , т. е. , то найдётся хотя бы одно число такое, что .
Корень заведомо будет единственным, если производная существует и сохраняет постоянный знак внутри интервала , т. е. если (или ) при .
Пример 1. Отделить корни уравнения на отрезке [-10, +10].
Решение.
>> x=[-10:0.01:10];
>> f=x.^3-6*x+2;
>> plot(x,f)
>> grid on % вызов функции grid с аргументом on приводит
% к появлению сетки на графике
Результат представлен на рис. 1.10,а. На нём видно, что у уравнения действительно имеется хотя бы один корень, но для более чёткого отделения корней желательно увеличить ту часть рисунка, что прилегает к оси абсцисс. Для этой цели следует использовать инструменты (Zoom In) и (Zoom Out), расположенные в графическом окне. В итоге получаем более удобное графическое представление (см. рис. 1.10,б), из которого следует, что корни уравнения находятся внутри отрезков [-3, -2], [0, 1] и [2, 3].
![](https://konspekta.net/stydopediaru/baza1/3690766098455.files/image122.jpg)
а) б)
Рис. 1.10. Отделение корней нелинейного уравнения
Для реализации второго этапа решения нелинейного уравнения вида в пакете MatLab имеется функция fzero, записываемая в различных видах:
− fzero(‘fun’,x) − возвращает уточнённое значение для х, при котором достигается нуль функции fun − имя М-файла, представленной строкой. х, стоящее вторым аргументом при вызове fzero, является начальным приближением к искомому корню. Примеры
>> fzero('cos',1)
ans =
1.5708
>> fzero('ff',-3)
ans =
-2.6017
В втором примере ff − это имя функции пользователя, которая должна быть оформлена в виде М-файла (см. рис. 1.11).
![](https://konspekta.net/stydopediaru/baza1/3690766098455.files/image124.jpg)
Рис. 1.11. Окно редактора М-файлов с функцией ff
− fzero(‘fun’,[x1 x2]) − возвращает уточнённое значение для х, находящееся внутри интервала (х1, х2). Должно выполняться условие fun(x1)×fun(x2) < 0. Примеры
>> fzero('ff',[-3 -2])
ans =
-2.6017
>> fzero('ff',[0,1])
ans =
0.3399
− fzero(‘fun’,x,tol), fzero(‘fun’,[x1 x2], tol) − выполняют те же действия, что и ранее, но с заданной относительной точностью tol. Примеры
>> format long
>> fzero('ff',-3,1e-15)
ans =
-2.601679131883155
>> fzero('ff',[0,1],1e-10)
ans =
0.339876886623182
В зависимости от используемой формы функции fzero, MatLab реализует следующие методы поиска корня уравнения: метод дихотомии, метод секущих или метод обратной квадратичной интерполяции.
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|