Кафедра алгебры и математической логики КФУ Работа в MATLAB Материалы к практике по компьютерным наукам – 1 семестр (механики) М.Ф. Насрутдинов 20.10.2010 Оглавление Запуск программы............................................................................................................................. 3 Работа в режиме калькулятора. .................................................................................................... 3 Работа в программном режиме. ................................................................................................... 3 Простейшие арифметические операции и элементарные функции............................................ 3 Построение графиков и диаграмм.................................................................................................... 4 Функция plot(). ............................................................................................................................... 4 Функция polar(phi, r) ...................................................................................................................... 4 Параметры линии. ......................................................................................................................... 5 Трехмерная графика. ..................................................................................................................... 5 Движение точки:............................................................................................................................ 6 Графики функций, заданных неявно fplot, ezplot, ezsurf. ........................................................... 6 Символьные вычисления .................................................................................................................. 7 Вычисление пределов. .................................................................................................................. 7 Вычисление неопределенного интеграла .................................................................................... 7 Вычисление суммы........................................................................................................................ 7 Символьное дифференцирование................................................................................................ 8 Разложение в ряд Тейлора............................................................................................................ 8 Решение уравнений....................................................................................................................... 8 Работа с матрицами .......................................................................................................................... 9 Численные методы ........................................................................................................................... 9 Численное интегрирование .......................................................................................................... 9 Нахождение корней уравнений .................................................................................................... 9 Корни полинома ............................................................................................................................ 9 Элементы программирования ........................................................................................................ 11 Цикл for ........................................................................................................................................ 11 Создание структур ....................................................................................................................... 13 Создание и работы с файлами .................................................................................................... 13 2 Запуск программы Работа в режиме калькулятора. Пользователь вводит выражение, которое надо вычислить (исполнить) в командное окно, нажимает клавишу <ENTER> и сразу получает результат. Чтобы повторно выполнить (или отредактировать) ранее введенные команды можно воспользоваться клавишами <↑> и <↓> или окном истории команд (Command History). Работа в программном режиме. Пользователь создает текстовый файл с расширением .m, содержащий набор инструкций на языке системы MATLAB. После этого пользователь вводит имя файла в командном окне и просматривает результат работы программы. Простейшие арифметические операции и элементарные функции. возведение в степень ^ сложение и вычитание +и- умножение и деление *и / натуральный логарифм log() десятичный log10() тригонометрические функции (аргументы в радианах) sin(), cos(), tan(), cot(), asin(), acos() e в степени x exp(x) мнимая единица I или j число π pi 3 Построение графиков и диаграмм Система MATLAB обладает мощными графическими возможностями, позволяющими строить графики на плоскости и графики поверхностей. Функция plot(). Основной функцией для построения графиков вида y=f(x), a≤x≤b является функция plot(). Параметрами функции являются векторы одинаковой размерности. График строится по таблице функции, аргументами которой являются элементы первого вектора, а значениями – элементы второго. Если x=[x1, x2, …, xn], y=[y1, y2, …, yn ], то plot(x,y) строит график функции y=f(x), у которой yi=f(xi), на отрезке [x1,xn]. Первый вектор можно опустить. Тогда по умолчанию считается, что xi=i. Для построения графика функции от одной переменной необходимо задать вектор значений аргумента, вычислить вектор соответствующих значений функций, задать оба вектора в качестве значений функции plot(). Пример 1. Построить график функции y=sin(x) на отрезке [0,2π]. Решение. Задаем вектор значений. Для этого воспользуемся оператором двоеточия (:), служащим для формирования диапазонов числовых значений. Здесь 0.1 – шаг разбиения отрезка. >> x=0:0.1:2*pi Вычисляем вектор значений функции (функция sin применяется поэлементно ко всем элементам вектора x): >>y=sin(x) Рисуем график >>plot(x,y) Функция polar(phi, r) Служит для построения графиков вида r=r(ψ), a≤ψ≤b в полярной системе координат. 4 Пример 2. Построить график функции r= t2 на отрезке [0,20] (в полярной системе). Решение. >>t=0:0.1:20; r=t.^2; polar(t,r) Обратите внимание на операцию поэлементного возведения в степень (.^). Аналогично применяются операции поэлементного сложения (.+), деления (./), вычитания (.-). Это связано с тем, что существуют обычные операции сложения, вычитания (и т.п.) векторов. Параметры линии. Можно задать параметры линии, которой рисуется график. Параметры задаются в виде текстовой строки вида ‘go-’. >>t=0:0.1:20; r=t.^2; polar(t,r, ‘go-’) Первая буква означает цвет (зеленый), вторая тип маркера (на линии будут кружки), третья тип линии (- означает сплошная). Возможные значения: Цвет: красный (r), желтый (y), зеленый (g), синий (b), черный (k), белый (w). Тип маркера: точка(.), кружок(o), квадрат(s), треугольник(^), звездочка(*). Тип линий: сплошная(-), штриховая(--), пунктирная(:), штрих-пунктирная(-.). Трехмерная графика. Для построения линий используются plot3(x,y,z), meshc(), surf(), contour();contour3();contourf(). Для построения поверхностей сначала надо воспользоваться функцией meshgrdid() для построения матрицы значений, а затем plot3d() или mesh(). Пример 3. Построить z=2x ex-y на отрезке -2<x,y<2. >>x=-2:0.1:2; [X,Y]=meshgrid(x); Z=2*X.*exp(x-y); mesh(X,Y,Z) 5 Пример 4. Сфера. t=0:0.1:7; s=0:0.1:2; [A,B]=meshgrid(t,s); X=sin(A).*(sin(B)); Y=cos(A).*(sin(B)); Z=cos(B); surf(X,Y,Z) Движение точки: comet(), comet3(). Графики функций, заданных неявно fplot, ezplot, ezsurf. ezsurf('sin(a).*sin(b)','cos(a).*sin(b)','cos(b)') fplot(‘cos’,[0,4]) 6 Символьные вычисления При решении используются функции MATLAB для работы с символьными вычислениями. Вычисление пределов. Для вычисления следует использовать функции limit и syms из Symbolic Toolbox. Функция syms создает переменную. Пример 1. Вычислить предел Способ 1. (через командную строку) >>syms x %вычисляем предел при x->∞ >>limit((1+1/x)^x,x,0) Способ 2. (через создание m-файла) function y = limits( ) syms x; y = limit(Func(x),x,Inf); function z= Func( x ) z = (1+1/x)^x; Примечание: Можно limit(f(x),x,x0,'right') вычислять предел слева и справа limit(f(x),x,x0,'left') и Вычисление неопределенного интеграла Для получения символьного результата можно использовать функции Optimization Toolbox, а именно syms и int. Например, вычислим Решение. syms k; int(sin(x),x) Вычисление суммы Для получения символьного результата можно использовать функции Optimization Toolbox, а именно sym и symsum. Например, вычислим Решение syms k; symsum(1/k^2,1,Inf) 7 Символьное дифференцирование При наличии специализированного пакета Symbolic Math Toolbox возможно реализовать точное дифференцирование в символьном виде, используя следующие функции пакета: diff(S) дифференцирует символьное выражение S по свободной переменной; diff(S, ‘v’) дифференцирует символьное выражение S по v; diff(S, n) и diff(S, ‘v’, n) дифференцирует n раз символьное выражение S; diff без аргументов дифференцирует предшествующее выражение. Пример Вычислить производную syms x; diff(sin(x),2) Решение Разложение в ряд Тейлора Разложение функции в ряд Тейлора можно выполнить при помощи функции taylor "Symbolic Toolbox". Пример Разложить в ряд Тейлора функцию Решение с 10 членами. syms x; taylor(sin(x)) Решение уравнений 1. s= solve('cos(2*x)+sin(x)=1') записывается символьное выражение 2. Система >> syms x y >> z=solve(2*x+y-1,2*y+y-1,x,y) >> z.x 8 Работа с матрицами Пример Что делает a=[1,2,3;0,1,2;0,0,1] c=[1,2,3] b=[1;2;3] det(a) rank(a) inv(a) a\b D=[1,2,3;0,0,1]; e=[1;2]; D\e [v,d]=eig(a) trace(a) %ввод матрицы 3x3 %строка %столбец %определитель %ранг %обратная матрица %решение СЛУ %случай не квадратной матрицы %собственные числа и векторы %след матрицы Численные методы Численное интегрирование Функция trapz(x,y) вычисляет интеграл по методу трапеций. Задача: Вычислить (приближенно) интеграла вида , где , a=0, b=1 Решение: Разбиваем отрезок на части. Вычисляем значение функции в точках разбиения и вычисляем приближенное значение по методу трапеций. x=0:0.1:1; y=sin(x); trapz(x,y) Функция quad(f,a,b) вычисляет интеграл по формулам Симпсона quad('sin(x)',0,1) Функция dblquad(f,a1,b1,a2,b2) вычисляет двойной интеграл Нахождение корней уравнений fzero(f,x0) приближенное решение уравнения вида в окрестности точки x0 Пример: найти корень Построим график функции на отрезке [0,10] fplot('sin(x)-cos(x)',[0,10]); grid on Найдем корень в окрестности 1. fzero('sin(x)-cos(x)',1) Корни полинома Коэффициенты полинома задаются в виде вектора (x2+2x+3) 9 p=[1,2,3]; roots(p) 10 Элементы программирования Цикл for for variable = expression statements end Пример function tab(x) s=0; for n=1:40 s=s+cos(n*x)/n; end tab=s Пример – создание таблицы двух функций на отрезке x=*π/5, 9π/5+, h= π/10, 1. Создаем функцию для вычисления function [f,y]=test(x) s=0; for n=1:40 s=s+cos(n*x)/n; end 11 f=s y=-log(2*abs(sin(x/2))); %y=gg(x) %function y=gg(x) %y=-log(2*abs(sin(x/2))); 2. Применяем x=pi/5:pi/10:9*pi/5; [m,s]=test(x); %выводим красиво (одно под другим) [x;m;s] Пример 2 Построить таблицу функций на отрезке 1. Создаем функцию для вычисления function [s]=func(x) s=1; for n=1:10 s=s+log(3).^n./factorial(n).*(x.^n) end 2. Применяем 12 x=0.1:0.1:1; y=func(x); z=3.^x; [x;y;z] Создание структур mystr(1,1).name = 'alice'; mystr(1,1).ID = 0; mystr(2,1).name = 'gertrude'; mystr(2,1).ID = 1 Создание и работы с файлами %элементы работы с файлами %открытие текстового файла для чтения f=fopen('E:\file1.txt','rt'); %если файл не открыт, то f=-1 if (f==(-1)) disp('file do not open'); else disp('hello!'); %для чтения данных из файла используется fscanf() %A=fscanf(f,'%d') % чтение целочисленной матрицы 2x2 из файла A=fscanf(f,'%d',[2,2]); disp(A); fclose(f); end; 13 % запись в файл файла f=fopen('E:\file2.txt','wt'); y=sin(0:0.1:1); fprintf(f,'%5.3f \n',y); fclose(f); 14