Часть_02_sc.ppt
- Количество слайдов: 23
Работа с матрицами Отличительная черта системы: ориентация на операции с матрицами! Каждое число – матрица единичного размера. 1. Примеры: векторные и базовые матричные операции 2. Вычисления в одной строке: B=A^3– 2*A^(1/3) 3. Решение системы линейных уравнений A*X=B: X=inv(A)*B 4. Встроенные функции работают с векторами: x=1: 10, y=sin(x)
Примеры создания матриц Создание вектора-строки: R=[1 3 5 7]; R=[1, 3, 5, 7]; R=1: 2: 7 Создание вектора-столбца: C=[1; 3; 5; 7]; C=[1, 3, 5, 7]'; C=[1: 2: 7]' Создание матрицы 3 x 4: M 2 D=[1 2 3 4; 5 6 7 8; 9 10 11 12]; Создание матрицы 3 x 4 x 3: M 3 D(: , 1)=[0. 1 0. 3 -0. 4 1; -0. 8 0 0 3; 0 0. 1 -0. 3 2]; M 3 D(: , 2)=M 2 D; M 3 D(: , 3)=[0. 1 0. 3 -0. 4 1; -0. 8 0 0 3; 0 0. 1 -0. 3 2]+2*M 2 D;
Примеры работы с участками матриц Чтение / изменение отдельного элемента: el=M 2 D(2, 3); M 2 D(3, 4)=7; Изменение строки в матрице: M 2 D(2, : )=R; M 2 D(2, : )=C'; M 2 D(3, : )=[0 -1 -2 -3]; Изменение столбца в матрице: M 2 D(: , 2)=C(1: 3); Изменение участка в матрице: M 2 D(1: 2, 2: 3)=[0. 1, 0. 2; 0. 3 0. 4]; M 2 D(1: 2, 2: 3)=3*M 2 D(1: 2, 2: 3); M 2 D(1: 2, 2: 3)=M 2 D(2: 3, 1: 2)+M 2 D(1: 2, 3: 4);
Пример решения системы линейных уравнений методом Крамера Дано: A – матрица 2 x 2, B – столбец 2 x 1 Необходимо вычислить X: A*X=B Решение: A 1=[ B, A(: , 2) ]; % замена первого столбца на B A 2=[ A(: , 1), B ]; % замена второго столбца на B X(1)=det(A 1)/det(A); X(2)=det(A 2)/det(A); X=X(: )
Комплексные числа Составляются из двух независимых частей численного типа при помощи символов i, j (мнимые единицы): z=5+3 i: z=5+3*i=5+3 i z=5+3*j=5+3 i Векторизация: Z=complex([5; 3], [4; – 1]) Re=real(Z) Im=imag(Z) Модуль, аргумент: A=abs(Z) Fi=angle(Z) Сумма: Zsum=Z(1)+Z(2) Произведение: Zprod=Z(1)*Z(2) (модуль, аргумент произведения)
Основные системные переменные Задаются после загрузки системы и могут использоваться в арифметических выражениях. Mогут быть переопределены пользователем! ans – результат вычисления последнего не сохраненного выражения i, j – мнимая единица для задания мнимой части комплексных чисел Inf – обозначение машинной бесконечности (infinity) – в массивах! Na. N – Not-a-Number – неопределенный результат (0/0, Inf/Inf) – в массивах! pi …. – число ( pi=3, 141592653589793)
Основы программирования в MATLAB
Содержание 1. Типы файлов в MATLAB. 2. Файлы функций. Подфункции. 3. Встроенный редактор файлов. 4. Анализатор кода. 5. Подключение программ пользователя к системе MATLAB. 6. Основы программирования в MATLAB: часто используемые функции. 7. Матричные вычисления, векторизация кода, предварительное задание переменных. 8. Задание имен функций и переменных, венгерская нотация. 9. Интерпретатор языка MATLAB. Создание псевдокода.
Типы файлов MATLAB 1. Cценарий (скрипт) 2. Функция prog 1. m prog 2. m function c=prog 2(a, b) a=3; b=4; c=1/sqrt(a*a+b*b); нет ; печать в Ком. окно Вызов из Командного окна: >> prog 1 >> c=prog 2(3, 4) c = 0. 2 MATLAB Workspace
Отличия функций от сценариев Функция отличается от сценария наличием ключевого слова function в заголовке. Все переменные, создаваемые и/или используемые в сценарии, содержатся в общей Рабочей области MATLAB Workspace. Для переменных функции существует свой собственный Workspace, в общий Workspace MATLAB ничего не попадает! Таким образом, скрипты более подходят для быстрых и разовых вычислений, более серьезные приложения в среде MATLAB рекомендуется разрабатывать в виде функций. См. примеры скриптов 1, 2 Синтаксис команд в Командном окне MATLAB, в файлах скриптов и функций одинаков.
Вызов функций в MATLAB Обращение к функции из Командного окна или в программах: [b 1, b 2, b 3, b 4 …] = my_function(a 1, a 2, a 3, a 4 …) выходные (возвращаемые) имя значения: переменные, функции возможно разных типов аргументы (входные значения): переменные, возможно разных типов Пример: y= sin( [1: 10] ) - здесь ОДИН аргумент (массив) и одно выходное значение! Если вызывать функцию, не указывая явно выходных переменных, первое выходное значение запишется в ans. Возможны функции без входных и/или выходных значений. Пример: bench Подобные можно вызывать при помощи контекстного меню в MATLAB.
Варианты вызова функций Пример 1: функция clear для удаления переменных из Рабочей области MATLAB или какой-либо функции Стандартная запись для вызова: clear('a', 'b', 'c') – удалить 3 переменные из Workspace по их именам Упрощенная запись для вызова (только если все переменные – типа char): clear a b c Пример 2: функция sin >> sin(1) ans= 0. 841470984807897 >> sin 1 ? ? ? Undefined function or method 'sin' for input arguments of type 'char'.
Файлы функций. Подфункции myfun. m function c=myfun(a, b) % заголовок: help c=subfun(a)/subfun(b); % вызов подфункции % подфункция function d=subfun(a) d=sum(a)^3; Название головной функции в файле и имя файла должны совпадать!
Встроенный редактор файлов Editor Проверка и оптимизация кода (анализатор кода) 1. Поддержка файлов: MATLAB, С, HTML… 2. Работа с подфункциями и частями кода (%%) 3. Встроенный отладчик
Анализатор кода Проверяет код пользователя на наличие проблем и рекомендует необходимые изменения для оптимизации и увеличения быстродействия.
Подключение программ к системе MATLAB 1. Работа в текущей папке (Current Directory) – отладка, разовые вычисления … 2. Включение папок с программами в Путь (MATLAB Path) наряду с встроенными функциями системы и функциями Toolbox-ов Меню MATLAB File Set Path…
Примеры программирования в MATLAB 1. Конструкции if-else, switch-case, try-catch (см. примеры 1, 2) 2. Циклы for-end, while-break (3, 4) 3. Встроенные математические функции (min, max, sum, sin, sqrt…) (5) 4. Матричные вычисления, транспонирование (6), операции умножения, деления, различие команд * и. *, решение систем линейных уравнений через детерминанты и напрямую 5. Работа с текстовыми файлами (uigetfile, textread, dlmread) (7) 6. Работа с Workspace (who, whos, save, load, evalin, assignin), различие общей рабочей области и раб. области каждой функции (8) 7. Вызов функции из строки – команда eval (9) 8. Переменное количество входов и выходов функции (ключевые слова varargin, varargout, nargin, nargout) (10)
Матричные вычисления Отличительная черта MATLAB: язык ориентирован на операции с матрицами! Каждое число – матрица единичного размера. 1. Векторные и базовые матричные операции, встроенные функции: transpose, eig, det, inv Пример: s=eig(A); det(A-s(2)*eye(2)) 2. Вычисления в одной строке: B=A^3– 2*A^(1/3) 3. Решение системы линейных уравнений A*X=B: X=inv(A)*B
Векторизация кода 1. Встроенные функции работают с векторами и матрицами: x=1: 10, y=sin(x) 2. Добавление к матрице числа: A=[1 2; 3 5]; B=A+1 3. Поэлементные операции (нестандартные матричные операции!): • умножение: . * • деление: . / – прямое, . – обратный порядок • возведение в степень: . ^ for k=1: N, c(k)=a(k)/b(k); end c=a. /b запись короче, вычисления быстрее!
Предварительное задание переменных 1. Встроенные функции задания матриц: for k=1: 3 for m=1: 7 A(k, m)=0; B(k, m)=1; C(k, m)=rand; end A=zeros(3, 7); B= ones(3, 7); C= rand(3, 7); 2. Предварительное задание переменных ускоряет работу цикла: for k=1: N A(k)=k; end A=zeros(1, N); for k=1: N A(k)=k; end
Выбор имен для функций и переменных 1. Встроенные функции MATLAB, >1000, с “говорящими” названиями: примеры: min, max, sum, sqrt, num 2 str, numel, size, dot, cross (открытый код!) 2. Пример имен переменных в программах MATLAB с объемным кодом: stepsize=min([newstep, 1])+1. 5*stepsize; stepsize=max([1. 2*newstep, 1. 2*stepsize]); Общие принципы задания имен: 1. Понятное назначение, легкость запоминания и поиска! 2. Не должно быть совпадений со встроенными функциями MATLAB (типа min, max, … проверка: which –all …) и системными переменными (i, j, pi …)
Пример выбора идентификаторов Имя переменой может описывать какую-либо ее особенность. Примеры: mrow. X, mcol. Y – для работы со строками и столбцами матриц; Alpha_deg, Beta. Rad – для контроля ед. измерения в инженерных расчетах. Широко используемый пример: Венгерская нотация – соглашение об именовании переменных, констант и прочих идентификаторов в коде программ. Суть: имена идентификаторов предваряются заранее оговоренными префиксами, состоящими из одного или нескольких символов. При этом, как правило, ни само наличие префиксов, ни их написание не являются требованием языков программирования, и у каждого программиста (или коллектива программистов) могут быть своими.
Интерпретатор языка MATLAB Транслятор (translator) — это программа-переводчик. Преобразует программу, написанную на одном из языков высокого уровня, в программу, состоящую из машинных команд. Компилятор (compiler — составитель ) читает всю программу целиком, делает ее перевод и создает законченный вариант программы на машинном языке, который затем и выполняется. Интерпретатор (interpreter — истолкователь, устный переводчик) переводит и выполняет программу строка за строкой. После компиляции ни сама исходная программа, ни компилятор более не нужны (*. exe) Программа, обрабатываемая интерпретатором, должна заново переводиться на машинный язык при каждом очередном ее запуске. Откомпилированные программы работают быстрее (С), но интерпретируемые проще исправлять и изменять (MATLAB).
Часть_02_sc.ppt