
- •Компьютерная и микропроцессорная техника в электротехнологии Среда Excell, MathCad, matlab, Simulink Лабораторные работы № 1 – 5
- •Введение
- •Лабораторная работа № 1. Использование специальных возможностей excel
- •Лабораторная работа № 2. Средства автоматизации научно-исследовательских работ. Среда mathcad. Часть I.
- •Литература
- •Лабораторная работа № 3. Средства автоматизации научно-исследовательских работ. Среда mathcad. Часть II.
- •Литература
- •Лабораторная работа №4. Matlab в задачах вычислительной математики
- •Лабораторная работа №5. Введение в Simulink
- •Графопостроитель ху Graph
- •Блок алгебраического контура Algebraic Constraint
- •Требования к оформлению отчетов по лабораторным работам
- •Содержание
Литература
1. Информатика: базовый курс. / Под ред. С.В. Симоновича. – М.: Питер, 2002. – 640 с.
Лабораторная работа №4. Matlab в задачах вычислительной математики
Цель работы:
Изучение приемов работы с командным окном (‘Command window’) системы MatLab. Использование файлов сценариев и файлов – функций для решения простейших задач вычислительной математики и визуализации результатов вычислений.
Общие сведения:
Программы, реализующие какой-либо численный метод, необходимо записывать в М-файл. Если не дать имени М-файлу, то он запишется при выполнении программы в рабочую папку под именем Untitled (Безымянный). Такой ситуации следует избегать для исключения появления множества файлов с неопределенным именем. Рассмотрим решение различных проблем вычислительной математики, имеющих важное значение при изучении различных наук.
Табулирование функций
Данная задача широко используется в электротехнике, электротехнологии, экологии, теплофизике и других дисциплинах. Обычно функции, описывающие какой-либо процесс, весьма громоздки и создание таблиц их значений требует большого объема вычислений.
Рассмотрим два случая табулирования функции:
1. С постоянным шагом изменения аргументов.
2. С произвольным набором значений аргумента.
Алгоритм реализуется путем организации какого-либо цикла.
Пример 1. Вычислить
,
при R = 4.28 10-2; = 2.87; хi изменяется с шагом х = 2; хп = 2; хк = 10.
Введем обозначение la = 2.87.
Протокол программы:
R = 4.28е-02; la = 2.87;
Задается начальное значение х, шаг dx и конечное значение х
х = 2.0 : 2.0 : 10.0;
y=R*(abs(log((1-la.^x).^2)-x.^3)).^(1/3); x; y
% Для вывода значения у в конце строки символ ; не ставится!
В окне команд появляются после нажатия кнопки выполнить значения функции у, которые затем можно скопировать в какой-либо файл.
Результаты вычислений:
ans =
2.0000 4.0000 6.0000 8.0000 10.0000
0.0682 0.1634 0.2517 0.3386 0.4250
Пример 2. Вычислить и вывести на экран значения функции
;
при х1 = 12.8; х2 = 23.4; х3 = 27.2; х4 = 17.8; х5 = 16.3; х6 = 14.9; а = 1.35; b = 0.98.
Данную задачу можно программировать, не изменяя обозначения переменных. Цикл организуется для одномерного массива.
Протокол программы:
а = 1.35; b = 0.98; х(1) = 12.8; х(2) = 23.4; х(3) = 27.2; х(4) = 17.8; х(5) = 16.3; х(6) = 14.9;
for m=1:6 y=(1+(sin(b^2+x(m).^2)).^2)/(a^2+x(m).^2).^(1/3), end;
% В конце строки вычисления функции у символ ; не ставится.
у = 0.3609
у = 0.2327
у = 0.1473
у = 0.1800
у = 0.1771
у = 0.1658
Данные вычислений можно вывести в виде таблицы, если использовать запись [x; y] без точки с запятой или [x y].
Решение систем линейных алгебраических уравнений методом исключения Гаусса
К решению систем линейных уравнений сводятся многочисленные практические задачи, например различные краевые задачи для обыкновенных и в частных производных дифференциальных уравнений. Можно с полным основанием утверждать, что данная проблема является одной из самых распространенных и важных задач вычислительной математики.
Пусть задана система п линейных алгебраических уравнений с п неизвестными:
-
(4.1)
Система уравнений (4.1) в матричной форме представляется следующим образом:
АХ = В, (4.2)
где А – квадратная матрица коэффициентов, размером п п строк и
столбцов;
Х – вектор-столбец неизвестных;
В – вектор-столбец правых частей.
Систему уравнений (4.2) можно решить различными методами. Один из наиболее простых и эффективных методов является метод исключения Гаусса и его модификации. Алгоритм метода основан на приведении матрицы А к треугольному виду (прямой ход) и последовательном вычислении неизвестных (обратный ход). Эти процедуры можно выполнять над невыраженными матрицами, в противном случае метод Гаусса неприменим.
Недостатком метода является накапливание погрешностей в процессе округления, поэтому метод Гаусса без выбора главных элементов используется обычно для решения сравнительно небольших (п 100) систем уравнений с плотно заполненной матрицей и не близким к нулю определителем. Если матрица А сильно разрежена, а ее определитель не близок к нулю, то метод Гаусса пригоден для решения больших систем уравнений. В MATLAB имеется обширный арсенал методов решения систем уравнений (4.2) методом исключения Гаусса.
Для этого применяются следующие операторы: / -правое деление; \ -левое деление; - 1 -возведение в степень –1; inv(A) -обращение матрицы А.
Выражения
Х = В/A
Х = В* А^ -1
Х = В* inv(A)
Х = A\В
дают решения ряда систем линейных уравнений АХ = В, где А – матрица размером m n, В – матрица размером п 1.
Пример 3. Решить систему 4-х линейных уравнений:
Протокол программы (в М-файле)
а = [1.1161 0.1397 0.1254 0.1490 ;
0.1582 0.1768 1.1675 0.1871 ;
0.1968 1.2168 0.2071 0.2271 ;
0.2368 0.2568 0.2471 1.2671] ;
b = [1.5471 ; 1.6471 ; 1.7471 ; 1.8471] ;
Х4 = а \ b
Эта программа выдает решение заданной системы с помощью четвертого оператора в виде матрицы – столбца
Х4 =
1.0406
0.9351
0.9870
0.8813
Внимание. В М-файле матрица а набирается по строкам, а элементы матрицы правых частей b отделяются символом ; , т. е. тоже набираются по строкам. Решение другими операторами системы уравнений (2.2) требует набора матрицы а по столбцам, а элементы правых частей b отделяются только пробелом!
а = [1.1161 0.1582 0.1968 0.2368 ;
0.1397 0.1768 1.2168 0.2568 ;
0.1254 1.1675 0.2071 0.2471 ;
0.1490 0.1871 0.2271 1.2671] ;
b = [1.5471 1.6471 1.7471 1.8471] ;
Х1 = b/а
Х2 = b* a ^ 1
Х3 = b* inv(a)
Результаты решения
Х1 = 1.0406 0.9351 0.9870 0.8813
Х2 = 1.0406 0.9351 0.9870 0.8813
Х3 = 1.0406 0.9351 0.9870 0.8813
Аппроксимация функций
Одним из распространенных и практически важных случаев связи между аргументом и функцией является задание этой связи в виде некоторой таблицы {xi ; yi}, например, экспериментальные данные. На практике часто приходится использовать табличные данные для приближенного вычисления у при любом значении аргумента х (из некоторой области). Этой цели служит задача о приближении (аппроксимации) функций: данную функцию f(x) требуется приближенно заменить некоторой функцией g(х) так, чтобы отклонение g(х) от f(x) в заданной области было наименьшим. Функция g(х) при этом называется аппроксимирующей. Если приближение строится на заданном дискретном множестве точек {xi}, то аппроксимация называется точечной. К ней относятся интерполирование, среднеквадратичное приближение и др. При построении приближения на непрерывном множестве точек (например, на отрезке [a, b]) аппроксимация называется непрерывной или интегральной. MATLAB имеет мощные средства точечной и непрерывной аппроксимации с визуализацией результата. Рассмотрим наиболее важную точечную аппроксимацию (обработка экспериментальных данных).
Пример 4. Используя линейную и полиномиальную аппроксимации, получить эмпирические формулы для функции у=f(x), заданной в табличном виде:
xi 0.75 1.50 2.25 3.00 3.75
yi 2.50 1.20 1.12 2.25 4.28
Оценить погрешность эмпирических формул.
Протокол программы. В окне команд набираются значения xi и yi.
Далее выполняется команда построения графика только узловых точек.
>> x = [0.75, 1.50, 2.25, 3.00, 3.75] ;
>> y = [2.50, 1.20, 1.12, 2.25, 4.28] ;
>> рlot (x, y, 0 ) ;
Появляется окно с символами 0 на месте узловых точек (рис.
4.1).
Внимание. Следует помнить, что при полиномиальной аппроксимации максимальная степень полинома на 1 меньше числа экспериментальных точек!
На панели инструментов окна графика узловых точек в меню Tools исполняем команду Basic Fitting. Появляется окно Основной Монтаж. В этом окне птичкой отмечаются необходимые данные аппроксимации. В частности, можно задать следующие операции:
- показать уравнение аппроксимирующей функции у = g(х);
- выбрать метод подбора: сплайн интерполяции, эрмитовская интерполяция, линейный, квадратные, кубический.
Рис. 4.1. Окно с узловыми точками в MATLAB
В нашей задаче выбираем линейную и полиномиальную аппроксимации. В окне графика появляются соответствующие графики разных цветов и формулы аппроксимирующих функций (рис. 4.2).
Рис. 4.2. Окно с графиками функций в MATLAB
Чтобы узнать погрешность аппроксимации, надо отметить птичкой параметр График остатка в окне Основной Монтаж, и Показать норму остатков. График погрешностей с нормами можно вынести в отдельное окно, или вместе с графиком и аппроксимирующих функций – суб-график. Норма погрешностей указывает на статистическую оценку среднеквадратической погрешности. Чем она меньше, тем точнее полученная аппроксимирующая функция у = g(х). В нашем примере:
Linear : norm of residuals (норма погрешности) = 2.1061
Quadratic : norm of residuals = 0.10736
Cubic : norm of residuals = 0.035857
4 th degree : norm of residuals = 9.6305e-015.
График погрешностей можно выводить в виде диаграмм (зоны), линий (линии) или отдельных точек (фрагменты). Сам график погрешностей представляет собой зависимость разности g(х) -f(x) в условных точках, соединенных прямыми линиями.
Кроме линейной и полиномиальной аппроксимации можно выбрать сплайн- аппроксимацию – когда на каждом интервале приближения используется кубический полином с новыми коэффициентами. В этом случае нельзя получить выражение для аппроксимирующей функции, т.е. такая аппроксимация является неполной. Аналогичными свойствами обладает и Эрмитовая аппроксимация. Она имеет только графическую интерпретацию.
Построение графиков функции одной переменной в MatLab
Пример
6. Построить
в Matlab
график функции
на отрезке [0, 1].
MatLab обладает хорошо развитыми графическими возможностями для визуализации данных. Рассмотрим в начале построение простейшего графика функции одной переменной на примере функции, определенной на отрезке [0, 1]. Вывод функции в виде графика состоит из следующих этапов:
1. Задание вектора значений аргумента х.
2. Вычисление вектора у значений функции y(х).
3. Вызов команды plot для построения графика.
Команды для задания вектора х и вычисления функции лучше завершать точкой с запятой для подавления вывода в командное окно их значений (после команды plot точку с запятой ставить необязательно, т. к. она ничего не выводит в командное окно).
» х = [0:0.05:1];
» у = ехр(-х).*sin(10*x);
» plot(x, у)
После выполнения команд на экране появляется окно Figure No. 1 с графиком функции. Окно содержит меню, панель инструментов и область графика. Для построения графика функции в рабочей среде MatLab должны быть определены два вектора одинаковой размерности, например х и у. Соответствующий массив х содержит значения аргументов, а у — значения функции от этих аргументов. Команда plot соединяет точки с координатами (x(i), y(i)) прямыми линиями, автоматически масштабируя оси для оптимального расположения графика в окне. При построении графиков удобно расположить на экране основное окно MatLab и окно с графиком рядом так, чтобы они не перекрывались. Построенный график функции имеет изломы. Для более точного построения графика функцию необходимо вычислить y(х) в большем числе точек на отрезке [0, 1], т.е. задать меньший шаг при вводе вектора х:
» х = [0:0.01:1];
» у = ехр(-х).*sin(10*x);
» plot(x, у)
В результате получается график функции в виде более плавной кривой.
Построение графиков функций двух переменных в Matlab
Пример 7. Построить в Matlab график функции z(x, у)= х2 + у2 на области определения в виде квадрата х є [0, 1], y є [0, 1].
Построение графика функции двух переменных в MatLab на прямоугольной области определения переменных включает два предварительных этапа:
1. Разбиение области определения прямоугольной сеткой.
2. Вычисление значений функции в точках пересечения линий сетки и запись их в матрицу.
Построим график функции z(x, у)= х2 + у2 на области определения в виде квадрата х є [0, 1], y є [0, 1]. Необходимо разбить квадрат равномерной сеткой (например, с шагом 0.2) и вычислить значения функций в узлах, обозначенных точками. Удобно использовать два двумерных массива х и у, размерностью шесть на шесть для хранения информации о координатах узлов. Массив х состоит из одинаковых строк, в которых записаны координаты x1, х2, ..., х6, а массив у содержит одинаковые столбцы с y1, у2, ..., у6. Значения функции в узлах сетки запишем в массив z такой же размерности (6 х 6), причем для вычисления матрицы Z используем выражение для функции, но с поэлементными матричными операциями. Тогда, например z(3,4) как раз будет равно значению функции z(x,y)в точке (х3, у4). Для генерации массивов сетки х и у по координатам узлов в MatLab предусмотрена функция meshgrid, для построения графика в виде каркасной поверхности - функция mesh. Следующие операторы приводят к появлению на экране окна с графиком функции (точка с запятой в конце операторов не ставится для того, чтобы проконтролировать генерацию массивов):
» [X, У] = meshgrid(0:0.2:1,0:0.2:1)
» Z = X.^2+Y.^2
» mesh(X,Y,Z)
MatLab позволяет наносить на график дополнительную информацию, в частности, соответствие цветов значениям функции. Сетка генерируется при помощи команды meshgrid, вызываемой с двумя аргументами. Аргументами являются векторы, элементы которых соответствуют сетке на прямоугольной области построения функции. Можно использовать один аргумент, если область построения функции - квадрат. Для вычисления функции следует использовать поэлементные операции.
Основы программирования в среде Matlab
Пример 8. Использование условного оператора if.
Условный
оператор if позволяет создать разветвляющийся
алгоритм выполнения команд, в котором
при выполнении определенных условий
работает соответствующий блок операторов
или команд MatLab. Оператор if может
применяться в простом виде для выполнения
блока команд при удовлетворении
некоторого условия или в конструкции
if-elseif-else для написания разветвляющихся
алгоритмов. Пусть требуется вычислить
выражение
.
Предположим, что вычисления выполняются
в области действительных чисел и
требуется вывести предупреждение о
том, что результат является комплексным
числом. Перед вычислением функции
следует произвести проверку значения
аргумента x, и вывести в командное окно
предупреждение, если модуль x не
превосходит единицы. Здесь необходимо
применение условного оператора if,
применение которого в самом простом
случае выглядит так:
if условие
команды MatLab
end
Если условие выполняется, то реализуются команды MatLab, размещенные между if и end, а если условие не выполняется, то происходит переход к командам, расположенным после end. Файл-функция, проверяющая значение аргумента, приведена в следующем листинге. Команда warning служит для вывода предупреждения в командное окно. Листинг файл-функции Rfun, проверяющей значение аргумента
function f = Rfun(x)
% вычисляет sqrt(x^2-1)
% выводит предупреждение, если результат комплексный
% использование y = Rfun(x)
% проверка аргумента
if abs(x)<1
warning('результат комплексный')
end
% вычисление функции
f = sqrt(x^2-1);
Теперь вызов Rfun от аргумента, меньшего единицы, приведет к выводу в командное окно предупреждения:
>> y = Rfun(0.2)
результат комплексный
y =
0 + 0.97979589711327i
Файл-функция Rfun только предупреждает о том, что ее значение комплексное, а все вычисления с ней продолжаются. Если же комплексный результат означает ошибку вычислений, то следует прекратить выполнение функции, используя команду error вместо warning.
Пример 9. Использование оператора ветвления if-elseif-else.
В общем случае применение оператора ветвления if-elseif-else выглядит следующим образом:
if условие 1
команды MatLab
elseif условие 2
команды MatLab
elseif условие 3
команды MatLab
. . . . . . . . . . .
elseif условие N
команды MatLab
else
команды MatLab
end
В зависимости от выполнения того или иного из N условий работает соответствующая ветвь программы, если не выполняется ни одно из N условий, то реализуются команды MatLab, размещенные после else. После выполнения любой из ветвей происходит выход из оператора. Ветвей может быть сколько угодно или только две. В случае двух ветвей используется завершающее else, а elseif пропускается. Оператор должен всегда заканчиваться end. Пример использования оператора if-elseif-else приведен в следующем листинге.
function ifdem(a) % пример использования оператора if-elseif-else
if (a == 0) warning('а равно нулю')
elseif a == 1 warning('а равно единице')
elseif a == 2 warning('а равно двум')
elseif a >= 3 warning('а, больше или равно трем')
else warning('а меньше трех, и не равно нулю, единице, двум')
end
Пример 10. Использование циклов for, while в Matlab.
Оператор for предназначен для выполнения заданного числа повторяющихся действий. Самое простое использование оператора for осуществляется следующим образом:
for count = start:step:final
команды MatLab
end
Здесь count - переменная цикла, start - ее начальное значение, final - конечное значение, а step - шаг, на который увеличивается count при каждом следующем заходе в цикл. Цикл заканчивается, как только значение count становится больше final. Переменная цикла может принимать не только целые, но и вещественные значения любого знака. Разберем применение оператора цикла for на некоторых характерных примерах.
Пример: Накопление суммы в цикле
for k = 1:1:10
S = S + 1/factorial(k);
End
Циклы for могут быть вложены друг в друга, при этом переменные вложенных циклов должны быть разными. Цикл for оказывается полезным при выполнении повторяющихся похожих действий в том случае, когда их число заранее определено. Обойти это ограничение позволяет более гибкий цикл while.
while условие цикла
команды MatLab
end
М-файлы в Matlab
Работа из командной строки MatLab затруднена, если требуется вводить много команд и часто их изменять. Ведение дневника при помощи команды diary и сохранение рабочей среды лишь незначительно облегчает работу. Самым удобным способом выполнения команд MatLab является использование М-файлов, в которых можно набирать команды, выполнять их все сразу или частями, сохранять в файле и использовать в дальнейшем. Для работы с М-файлами предназначен редактор М-файлов. При помощи этого редактора можно создавать собственные функции и вызывать их, в том числе и из командной строки.
М-файлы в MatLab бывают двух типов: файл-программы (Script M-Files), содержащие последовательность команд, и файл-функции (Function M-Files), в которых описываются функции, определяемые пользователем.
Пример 11. Создание М-файла и работа с ним
Раскройте меню File основного окна MatLab и в пункте New выберите подпункт M-file. Новый файл открывается в окне редактора М-файлов. Наберите в редакторе команды, приводящие к построению двух графиков в одном графическом окне:
x = [0:0.1:7];
f = exp(-x);
subplot(1, 2, 1)
plot(x, f)
g = sin(x);
subplot(1, 2, 2)
plot(x, g)
Сохраните теперь файл с именем mydemo.m в подкаталоге work основного каталога MatLab, выбрав пункт Save as меню File редактора. Для запуска на выполнение всех команд, содержащихся в файле, следует выбрать пункт Run в меню Debug. На экране появится графическое окно Figure No.1, содержащее графики функций. Если Вы решили построить график косинуса вместо синуса, то просто измените строку g = sin(x) в М-файле на g = cos(x) и запустите все команды снова.
Если при наборе сделана ошибка и MatLab не может распознать команду, то происходит выполнение команд до неправильно введенной, после чего выводится сообщение об ошибке в командное окно. Очень удобной возможностью, предоставляемой редактором М-файлов, является выполнение части команд. Закройте графическое окно Figure No.1. Выделите первые четыре команды программы и выполните их из пункта Evaluate Selection меню Text. Обратите внимание, что в графическое окно вывелся только один график, соответствующий выполненным командам. Выполните оставшиеся три команды программы и проследите за состоянием графического окна. Потренируйтесь самостоятельно, наберите какие-либо из предыдущих примеров в редакторе М-файлов и запустите их. Отдельные блоки М-файла можно снабжать комментариями, которые пропускаются при выполнении, но удобны при работе с М-файлом. Комментарии в MatLab начинаются со знака процента и автоматически выделяются зеленым цветом, например:
%построение графика sin(x) в отдельном окне
В редакторе М-файлов может быть одновременно открыто несколько файлов. Переход между файлами осуществляется при помощи закладок с именами файлов, расположенных внизу окна редактора. Открытие существующего М-файла производится при помощи пункта Open меню File рабочей среды, либо редактора М-файлов. Открыть файл в редакторе можно и командой MatLab edit из командной строки, указав в качестве аргумента имя файла, например:
» edit mydemo
Команда edit без аргумента приводит к созданию нового файла. Все примеры, которые встречаются в этой лабораторной работе, лучше всего набирать и сохранять в М-файлах, дополняя их комментариями, и выполнять из редактора М-файлов. Следует отметить, что применение численных методов и программирование в MatLab требует создания М-файлов.