Главная страница
Навигация по странице:

  • Лабораторная работа №1 Знакомство с пакетом MATLAB 1 Структура пакета и принципы работы

  • Лабораторная работа №2 Проведение вычислений без М-файлов 1. Элементарные матричные вычисления

  • 2 Элементарные функциональные вычисления и построение графиков

  • Матлаб. Информация о владельце фио Локтионова Оксана Геннадьевна


    Скачать 1.64 Mb.
    НазваниеИнформация о владельце фио Локтионова Оксана Геннадьевна
    АнкорМатлаб
    Дата07.02.2022
    Размер1.64 Mb.
    Формат файлаpdf
    Имя файлаMU_Vvedenie_v_matlab_LZNo_1-4.pdf
    ТипЛабораторная работа
    #354464
    страница1 из 6
      1   2   3   4   5   6

    Документ подписан простой электронной подписью
    Информация о владельце:
    ФИО: Локтионова Оксана Геннадьевна
    Должность: проректор по учебной работе
    Дата подписания: 18.12.2020 15:20:13
    Уникальный программный ключ:
    0b817ca911e6668abb13a5d426d39e5f1c11eabbf73e943df4a4851fda56d089

    2

    3
    Лабораторная работа №1
    Знакомство с пакетом MATLAB
    1 Структура пакета и принципы работы
    MATLAB – система многоцелевого назначения, которая вышла на рынок программных продуктов почти двадцать лет назад и с тех пор непрерывно совершенствовалась фирмой MathWorks. Но первоначально ее основу составляли алгоритмы решения систем линейных уравнений и задач на собственные значения, откуда и произошло ее название «матричная лаборатория» (MATrix
    LABoratory). Затем система была расширена за счет специальных приложений, таких как Simulink (для моделирования ИС), Wavelet
    (для применения вэйвлетов), Symbolic Math Toolbox (для проведения символьных вычислений) и пр.
    Среда MATLAB включает интерпретатор команд на языке высокого уровня, графическую систему, пакеты расширений и реализована на языке C. Вся работа организуется через командное окно (Command Window), которое появляется при запуске программы matlab.exe. В процессе работы данные располагаются в памяти
    (Workspace), для изображения кривых, поверхностей и других графиков создаются графические окна. В командном окне в режиме диалога проводятся вычисления. Пользователь вводит команды или запускает на выполнение файлы с текстами на языке MATLAB.
    Интерпретатор обрабатывает введенное и выдает результаты: числовые и строковые данные, предупреждения и сообщения об ошибках. Строка ввода помечена знаком >>. В командном окне показываются вводимые с клавиатуры числа, переменные, а также результаты вычислений.
    Инструментальная панель командного окна позволяет выполнять требуемые действия простым нажатием на соответствующую кнопку. Большинство кнопок имеют стандартный вид и выполняют стандартные, подобные другим программам действия. Следует обратить внимание на кнопку Path Browser, которая позволяет прокладывать пути к разным директориям и делать необходимую директорию текущей, а также на кнопку Workspace
    Browser, позволяющую просматривать и редактировать переменные в рабочей области. Принято работать с включенными помимо консоли

    4 окнами Command History и Workspace; включить их можно, расставив галочки в раскрытом меню Desktop, а упорядочить – проведя докировку (кривая стрелка около стандартного крестика закрытия окна). Если вы нарушили порядок следования окон, то воспользуйтесь командой Desktop/Desktop Layout/Default.
    Все значения переменных, вычисленные в течение текущего сеанса работы, сохраняются в специально зарезервированной области памяти компьютера, называемой рабочим пространством системы
    MATLAB (Workspace). После окончания сеанса работы с системой
    MATLAB все ранее вычисленные переменные теряются. Чтобы сохранить в файле на диске компьютера содержимое рабочего пространства системы MATLAB, нужно выполнить команду меню
    File / Save Workspace As. По умолчанию расширение имени файла mat, поэтому такие файлы принято называть МАТ-файлами. Для загрузки в память компьютера ранее сохраненного на диске рабочего пространства нужно выполнить команду меню: File / Load Workspace.
    Обе операции можно реализовать в режиме командной строки в формате, например, save <имя_файла> (без расширения .mat).
    Команда help <имя_функции> позволяет получить на экране справку по конкретной функции. Например, команда help eig позволяет получить оперативную справку по функции eig - функции вычисления собственных значений матрицы. С некоторыми возможностями системы можно познакомиться с помощью команды demo. В окне MATLAB помимо собственно команд MATLAB можно использовать системные команды DOS. Удобным свойством системы является возможность использовать клавиши-стрелки ↑↓ для доступа к стеку с ранее введенными командами. Командой clc можно стереть содержимое командного окна, однако это не затронет содержимого рабочего пространства. Когда исчезает необходимость в хранении ряда переменных в текущем сеансе работы, их можно стереть из памяти компьютера командой clear или clear(имя1, имя2, …). Первая команда удаляет из 6 памяти все переменные, а вторая – переменные с именами имя1 и имя2. Командой who (или более сильной whos) можно вывести список всех переменных, входящих в данный момент в рабочее пространство системы. Для просмотра значения любой переменной из текущего рабочего пространства системы достаточно набрать ее имя и нажать клавишу Enter. Для целей программирования важно знать, что часть строки, следующая за знаком %, является комментарием.

    5
    Легче всего протокол сессии получить с помощью команды diary. Вызов команды diary <имя_файла> приведет к тому, что все появившееся далее на экране (кроме графики) будет записано в файл
    <имя_файла>. Несколько последовательно набранных команд могут быть сохранены в M-файле (т.е. *.m), который с точки зрения операционных систем представляет аналог BAT-файла, а сточки зрения программирования – зародыш будущей программы. Самый простой путь для этого – в окне Command History выделить нужные команды, исполнить команду Create M-file контекстного меню; при этом откроется редактор М-файлов.
    Пример:
    Для получения информации о магическом квадрате наберем в консоли lookfor magic, получим, подождав некоторое время (для прерывания поиска использовать DOS-овскую комбинацию Ctrl+C):
    >> lookfor magic
    MAGIC Magic square.
    TWEBMAGIC Example standalone test of webmagic function.
    WEBMAGIC Magic squares into HTML table.
    Затем получим справку о команде MAGIC:
    >> help magic
    MAGIC Magic square.
    MAGIC(N) is an N-by-N matrix constructed from the integers
    1 through N^2 with equal row, column, and diagonal sums.
    Produces valid magic squares for all N > 0 except N = 2.
    Reference page in Help browser doc magic
    Щелкнем по ссылке, открыв окно помощи. Построим уже реальный магический квадрат, набрав в консоли для N=10:

    6
    >> XMag=magic(10)
    XMag =
    92 99 1 8 15 67 74 51 58 40 98 80 7 14 16 73 55 57 64 41 4 81 88 20 22 54 56 63 70 47 85 87 19 21 3 60 62 69 71 28 86 93 25 2 9 61 68 75 52 34 17 24 76 83 90 42 49 26 33 65 23 5 82 89 91 48 30 32 39 66 79 6 13 95 97 29 31 38 45 72 10 12 94 96 78 35 37 44 46 53 11 18 100 77 84 36 43 50 27 59
    Подсчитаем, сколько занимает в памяти переменная XMag:
    >> whos XMag
    Name Size Bytes Class
    XMag 0x10 800 double array
    Grand total is 100 elements using 800 bytes

    7 1
    2 3
    4 5
    6 7
    8 9
    10 1
    2 3
    4 5
    6 7
    8 9
    10 10 20 30 40 50 60 70 80 90 100
    Рисунок 1 – Расшифровка цветов
    Выберем закладку Workspace («рабочее пространство»), в контекстном меню исполним команду countour. При этом появится специальное окно, где MATLAB позволяет редактировать графические объекты – в частности, добавим расшифровку цветов
    (пиктограмма Insert ColorBar) (рисунок 1). Обратим внимание, что наши манипуляции не остались незамеченными средой, и в консоли появилась команда:
    >> contour (XMag, 'DisplayName', 'XMag',
    'ZDataSource', 'XMag'); figure(gcf)
    Очистим рабочую область командой clear, затем консоль – clc.
    При этом история команд по-прежнему доступна; выделим шапку со списком сегодняшней даты и запишем в M-файл, вызвав контекстное
    (с выделенным) меню. lookfor
    MAGIC
    help magic
    XMag=magic(10) whos
    XMag contour (XMag,
    'DisplayName'
    ,
    'XMag'
    ,
    'ZDataSource'
    ,
    'XMag'
    ); figure(gcf) clear clc

    8
    Задание:
    1.
    Запустить MATLAB и установите текущий каталог.
    Получить справку по команде diary. Начать запись дневника в файл.
    2.
    В справочной системе, начав с консоли, получить информацию о гиперболическом котангенсе, а также переводу угла из радианной меры в градусную (и наоборот).
    3.
    Вычислить
    ))
    b a
    (
    cth b
    a
    3 3
    sin(



    sin для a=15 0
    , b=23 0
    (предварительно проведя расчет для нулевых a и b).
    4.
    В справочной системе найти информацию о том, какую функцию следует вызывать для вычисления ближайшего к Х целого.
    Предварительно следует показать преподавателю таблицу простейших функций вещественного переменного (перенеся ее в MS
    Word).
    Примечание: необходимо иметь навык работы с HELP- системами (уходя от консоли, вызов, как обычно, по клавише F1 или командой Help– MatLab Help главного меню). Существует две стратегии поиска: по ключевым словам (индексу) или по дереву содержания (закладка Content окна помощи). Вторая стратегия предпочтительнее, но ее использование требует некоторого эвристического опыта. Разумеется, знание английского языка более чем необходимо.
    5.
    Сформировать матрицу из случайных элементов размера
    10*10. Используя пользовательские средства Workspace, построить ее
    3D-график, сохранить картинку средствами MATLAB.
    6.
    Записать текущую сессию в mat-файл. Сохранить историю команд в m-файл.
    7.
    Очистить экран и переменные. Закрыть MATLAB.
    8.
    Показать преподавателю все сохраненные файлы. Открыть
    MATLAB и с консоли загрузить последний mat-файл.
    9.
    Завершить работу в MATLAB окончательно.

    9
    Лабораторная работа №2
    Проведение вычислений без М-файлов
    1. Элементарные матричные вычисления
    В MATLAB все данные рассматриваются как матрицы. Этот принцип векторизации имеет как положительные, так и отрицательные стороны. Тип результата определяется автоматически по виду выражения. Для имен обычных переменных принято выбирать строчные, а для имен матриц или даже векторов – прописные (большие). Вычислять можно в режиме калькулятора, но чаще используют присвоение (обычный знак «=», для проверки условий зарезервировано двойное равенство «==») какой-либо переменной. Любое уже определенное значение можно вызвать из рабочей области по имени переменной (либо в консоли, либо контекстным меню в окне Workspace). Помните, что можно провести несколько последовательных вычислений, подавив вывод в консоль промежуточных результатов – для этого после каждой команды нужно поставить «;».
    Для чтения/записи данных из файлов (прежде всего ASCII- формата) MATLAB обладает внушительным арсеналом средств (см. раздел помощи MATLAB Programming – Using Import Functions with
    Text Data). В случае, когда импортируемый файл является перечислением чисел в регулярных колонках и строках (без различных шапок и легенд), достаточно применить команду load.
    Среди дружественных MATLAB внешних программ прежде всего следует отметить Excel (см. раздел помощи Excel Link – What Is Excel
    Link?), который со своей стороны имеет средства общения с
    MATLAB.
    При ручном вводе, если компоненты вектора не умещаются на строке, используется троеточие в качестве разделителя. Иногда требуется организовать доступ к блоку внутри имеющейся матрицы, что реализуется через знак «:» – конструкция А(2:5,:) дает нам строки со 2-й по 5-ю матрицы А. Если нужно выполнить одинаковую операцию с каждым элементом матрицы, то нужно перед знаком поставить точку – V.*V, например, возвращает вектор квадратов, т.е
    (-1,5) → (2,25). Для создания многомерных матриц использовать функцию cat.

    10
    Пример:
    Введем скаляр, трехмерные вектор-строку и вектор-столбец, рассматриваемые как матрицы размера 1×n и n×1 (n=3). Сделаем это чуть различающимися способами (разделителем в массиве может либо пробел, либо запятая, либо оба знака вместе).
    >> x=–1.25e–1 x =
    –0.1250
    >> u=[1,2.0 4] u =
    1 2 4
    >> v=[–x; –2.0;7] v =
    0.1250
    –2.0000 7.0000
    Приготовим заранее в рабочем каталоге файл dm3.txt, состоящий из 3 строк по 3 числа, разделенных пробелом (ами) или знаком табуляции. Загрузим его данные в матрицу W.
    >> Wfrom='dm3.txt';W=load(Wfrom);W
    W =
    1.2000 4.3000 5.0000
    -34.0000 2.1000 4.0000 3.0000 3.0000 -6.0000

    11
    Заметим, мы ввели литерную переменную Wfrom, подавили вывод в консоль, и при этом исходный файл был таким:
    1.2 4.3 5.0
    -3.4e+1 2.1 4 3 3 -6
    Попробуем сгенерировать новую матрицу 10×3, где столбцы являются арифметическими прогрессиями. Вначале создадим матрицу 3×10, а затем ее транспонируем.
    >>
    W1=[-1.4:0.2:0.4; linspace(-2,5,10);
    -
    1.4:7.7]
    W1 =
    -1.4000 -1.2000 -1.0000 -0.8000 -
    0.6000 -0.4000 -0.2000 0 0.2000 0.4000
    -2.0000 -1.2222 -0.4444 0.3333 1.1111 1.8889 2.6667 3.4444 4.2222 5.0000
    -1.4000 -0.4000 0.6000 1.6000 2.6000 3.6000 4.6000 5.6000 6.6000 7.6000
    >> W1=W1'
    W1 =
    -1.4000 -2.0000 -1.4000
    -1.2000 -1.2222 -0.4000
    -1.0000 -0.4444 0.6000
    -0.8000 0.3333 1.6000
    -0.6000 1.1111 2.6000
    -0.4000 1.8889 3.6000
    -0.2000 2.6667 4.6000 0 3.4444 5.6000 0.2000 4.2222 6.6000 0.4000 5.0000 7.6000
    Заметим, что второй столбец W1 получился в результате применения вызова функции от трех аргументов linspace, а первый –

    12 иллюстрирует типичное применения знака «:». Третий столбец иллюстрирует особенности последней операции. Интерпретатор
    MATLAB выдал бы ошибку, если бы в первой команде мы заменили
    0.4 на 0.6 или в последней 7.7 на 9.9. Причина заключается в несоответствии размеров столбцов, ведь второй декларирован linspace как имеющий 10 элементов.
    Получим новую матрицу размера 3×3 таким способом: домножим транспонированного двойника W1 на W1 и переставим угловой элемент с центральными местами.
    >> W2=W1'*W1; Wtemp=W2(1,1); W2(1,1)=W2(end-
    1,end-1); W2(end-1,end-1)=Wtemp; clear Wtemp; W2
    W2 =
    72.4074 5.3333 1.0000 5.3333 5.8000 110.6667 1.0000 110.6667 178.6000
    Появившаяся выше переменная Wtemp была «мавром, сделавшим свое дело».
    Сформируем новую матрицу на основе всех предыдущих – как линейную комбинацию W, W2 и случайной матрицы. Ниже в указанных форматах вызова: функция eigs ищет наименьшее по величине собственное значение матрицы, diag(rand(…)) – формирует почти нулевую матрицу с ненулевой случайной наддиагональю, det и inv – вычисляют определитель матрицы и обратную ей. Очевидно также, что (u*v) – скаляр, (v*u) – матрица 3×3.
    >> W3=x*inv(W)+W2/eigs(W2,1,'sm')-
    ((u*v)+det(v*u))*diag(rand(1,2),1)
    Iteration 1: a few Ritz values of the 3-by-3 matrix:
    0
    W3 =
    -1.4996 -4.9030 -0.0201
    -0.1275 -0.1219 -2.6727
    -0.0304 -2.2877 -3.6801

    13
    Запишем полученный результат в файл EXCEL в определенный диапазон ячеек на первом листе. Флаг W3status равен 1, если все прошло успешно.
    >>
    W3status=xlswrite('dm3_res.xls',W3,'B3:H10')
    W3status =
    1
    Задание
    1.
    Ввести две скалярные величины x=-0.85, y=978.56*10
    -2 2.
    Заготовить XLS-файл с двумя матрицами А и В размера
    3×5 и 5×3.
    3.
    Считать их в одноименные структуры MATLAB.
    Примечание:
    Необходимо воспользоваться одним из подразделов помощи MATLAB Programming
    4.
    Изменить центральные элементы обеих матриц. Для А – домножить его на х и вычесть 1, для В – домножить его на sinу и прибавить 1.
    5.
    Осуществить поэлементное умножение матрицы А на транспонированную матрицу В.
    6.
    Вычислить произведение АВ и прибавить к нему матрицу
    С, где С – трехдиагональная: на главной диагонали единицы, наддиагональ – из х-ов, поддиагональ – из у-ков.
    7.
    Результат вывести в виде текстового файла.
    8.
    Вычислить след (trace) матрицы, обратной к последней вычисленной матрице.
    9.
    Сохранить последовательность команд в файле matrix1.m
    2 Элементарные функциональные вычисления и построение
    графиков
    Комплексные числа вводятся в виде Re+Imi или Re+Im*j
    (предпочтительнее вариант без умножения, поскольку может возникнуть путаница с перекрытием имен). Попробуйте набрать >> j=5; [1+j,1+1j] и почувствуйте разницу! Однако в случае, когда

    14 коэффициентом перед мнимой единицей является не число, а переменная, между ними следует обязательно использовать знак умножения. Полезно знать три константы MATLAB: pi – число π, inf
    – бесконечность, NaN – неопределенное значение. Они могут выступать аргументами функций: >>
    ]
    NaN
    *
    3
    inf),
    /
    1
    sin(
    [sin(inf),
    . В системной переменной ans хранится результат вычислений, а в eps – номинальная точность вычислений, что удобно с точки зрения численных методов, например, решения уравнений способом дихотомии. Значения этих переменных можно изменять: по умолчанию
    )
    52
    (
    ^
    2
    exp


    , но очень часто делают присвоение
    6
    e
    1
    exp


    ; удобно проводить цепи вычислений (пример: >> ans+1).
    В MATLAB широкий набор самых разнообразных встроенных математических функций. Вы можете задавать и собственные функции (доступные, однако, только в текущем сеансе). Они называются анонимные, их значение вычисляется только одним оператором, а формат задания и вызова таков:
    <имя>=@(,…) <выражение> … <имя> (,…)
    При этом инициализируется переменная-указатель на функцию, и как раз по указателю функция и вызывается (полезно посмотреть
    Workspace). При написании собственных функций весьма желательно предусмотреть матричные операнды, что сильно облегчает жизнь при построении графиков (так, для вычисления
    3
    x
    )
    x
    (
    f

    конструкция
    3
    ^
    x хуже правильного варианта
    3
    .^
    x с точкой поэлементной операции). Для реализации более сложных и серьезных функций необходимо обращаться к программированию М-файлов. Приведем лишь некоторые из часто используемых: log(x) – натуральный логарифм mod(x,y) – остаток от деления x на y (применима и для нецелых аргументов) angle(z) – угол поворота комплексного числа z polyval(p,t) – вычисление полинома от аргумента t с заданными вектором p коэффициентами. bessel(nu,z) – вычисляет функцию Бесселя, причем если аргумент z матричный, то и результат также матричный. Константа nu нецелая. Пользователь может не только использовать различный синтаксис вызова (например, количество аргументов), но и

    15 определять вариант получения результата – в этом состоит важная и удобная особенность функций в MATLAB. quad1(fun,a,b) – вычисление определенного интеграла Римана по адаптивному методу Гаусса-Лобатто на отрезке [a,b] от функции f(x), заданной указателем fun. Если функция анонимная, то вместо fun подставляется просто <имя>, но если функция задана в М-файле, то нужно провести разыменование и подставлять <@имя>.
    Теперь рассмотрим функции вспомогательные для расчета, но весьма полезные: str2num – переводит строку в число tic <операции> toc – сколько времени (в сек) потребовалось для совершения операций clock – возвращает текущую дату и время
    Рисунок 2 – Иерархия графических объектов
    Важное значение имеет графическое представление результатов, и MATLAB обладает обширным набором средств (см. раздел помощи в закладке Contents MATLAB – Mathematics - Plotting Mathematical
    Functions, более подробно изложено в MATLAB – Functions – By
    Category –Graphics–Specialized Plotting). Каждый раз при получении графика создается графический объект, который автоматически открывается в окне графического редактора (можно открыть несколько объектов – см. команда h=figure(∙) и смежные; об иерархии графических объектов (рисунок 2) см. MATLAB – Handle Graphics
    Object Properties). Там вы можете манипулировать подписями осей, легендами, цветами линий, сохранять изображение в разных форматах. Существует сложная иерархия графических объектов, и каждому действию в окне графического редактора соответствует

    16 команда, модифицирующая заданный посредством указателя объект.
    Поэтому не следует забывать, что управлять параметрами изображения можно из консоли (разумеется, большинство инструкций приходится брать из системы помощи, например, set) – этот способ вряд ли можно считать прогрессивным, но в некоторых случаях (поскольку доступные операции в меню окна графического редактора не исчерпывают всего многообразия) незаменим. Нужно помнить, что такие операции, как выбор цветовой гаммы, применяются к тому объекту, который объявлен текущим.
    Не меньшее значение имеют пользовательские данные, представленные, как правило, матрицами большого размера
    (например, 100×300). Часть данных, таких как значения функций, может вычисляться «на лету», но надежнее вычислить все необходимое до построения графика. Всякий график предполагает наличие сетки, прямоугольной или треугольной (если ранее применялись численные методы, то в роли такой сетки может выступать сетка для исчисления конечных разностей, которая изначально и определяет детальность представления результатов; в общем случае обе сетки не совпадают, и тогда дополнительно следует применять интерполяцию – см. griddata). Самый простой путь для получения сеток для 3D-поверхностей – использование функции meshgrid.
    Наиболее общеупотребительны
    (для целей физико- математических расчетов и/или проектирования РЭА) следующие виды графиков (рядом указано имя специальной функции):
    A.
    Простой график вида
    )
    x
    (
    f y 
    с маркерами и без–
    ...)
    ,
    y
    ,
    x
    (
    plot
    ,
    ...)
    (
    fplot
    . Последняя команда удобна тем, что кривая строится по указателю функции, или даже по текстовому описанию
    ])
    pi
    *
    5
    ,
    0
    [
    ,
    )'
    x
    2
    cos(
    *
    )
    x sin(
    ('
    fplot
    B.
    Графики, построенные в преобразованных координатах
    (например, двойных логарифмических, т.е. данные имеют вид
    ))
    x
    (
    f
    ,
    x
    (
    , а координаты –
    )))
    x
    (
    f ln
    ,
    x
    (ln
    . В том числе в полярных координатах –
    pol
    2
    cart
    ,
    )
    y
    ,
    x log(
    log
    ,
    )
    r
    ,
    fi
    (
    polar
    C.
    Параметрическое семейство кривых
    )
    p
    ,
    x
    (
    f y 
    , p – параметр, значение которого указывается в легенде для каждой кривой
    )
    x
    (
    f y
    p

    . Все кривые имеют разный цвет – hold on, plot, параметр LineSpec функции plot.
    D.
    Контурный график, изображающий линии уровня

    17
    (изолинии) const z 
    для поверхности
    )
    y
    ,
    x
    (
    f z 
    . Промежутки, отделяющие изолинии, могут заполняться цветом, а могут и нет.
    Географическая карта, где отображаются океаны и горы, - классический пример контурного графика – contourc, contourf.
    E.
    3D-график для поверхности
    )
    y
    ,
    x
    (
    f z 
    или траектории, заданной параметрически
    )
    t
    (
    r

    ))
    128
    hsv
    (
    colormap
    , mesh , surf, plot3
    F.
    Анимированные графики. Обычно для траекторий частиц, получили большое распространение в последнее время – comet, getframe…movie.
    Пример:
    1.
    Сформировать случайные векторы u и v размера 1×4.
    >> n=4;u=rand(1,n);v=rand(1,n);[u;v] ans =
    0.4740 0.9090 0.5962 0.3290 0.4782 0.5972 0.1614 0.8295 2.
    На основе этих векторов составить матрицу
    1
    j j
    i ij ij v
    u a
    ,
    a
    A



    >> % Выполним все без циклов. Начнем с формирования вектора из единиц
    >> w=[linspace(1,1,n)];w=w';
    >> % Сделаем первую заготовку
    >> A1=(w*u)'
    A1 =
    0.4740 0.4740 0.4740 0.4740 0.9090 0.9090 0.9090 0.9090 0.5962 0.5962 0.5962 0.5962 0.3290 0.3290 0.3290 0.3290
    >> % Составим вторую заготовку, содержащие

    18 степени
    >> q=[0:1:n-1]; A2=w*q
    A2 =
    0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
    >>
    %
    Осуществим поэлементную операцию возведения в степень
    >> A3=w*v;A3=[A3.^A2]
    A3 =
    1.0000 0.5972 0.0261 0.5707 1.0000 0.5972 0.0261 0.5707 1.0000 0.5972 0.0261 0.5707 1.0000 0.5972 0.0261 0.5707
    >> % Поэлементным умножением матриц приходим к искомому
    >> A=A1.*A3
    A =
    0.4740 0.2831 0.0124 0.2705 0.9090 0.5428 0.0237 0.5188 0.5962 0.3561 0.0155 0.3403 0.3290 0.1964 0.0086 0.1877
    >> % Стираем ненужное
    >>clear (‘A1’,’A2’,’A3’,’w’)
    3.
    Для каждого элемента матрицы А вычислить значение полинома с коэффициентами
    )
    iv u
    ( 
    . Результаты записать в матрицу

    19
    В. Превратить ее в вещественную, взяв от каждого элемента его угол поворота. Сколько чистого времени потребовалось на выполнение п.3?
    >> tic; B=polyval(u+i*v,A);B=angle(B);toc
    Elapsed time is 0.003572 seconds.
    4.
    Составить анонимную функцию для вычисления площади треугольника по формуле Герона (
    )
    c p
    )(
    b p
    )(
    a p
    (
    p
    S




    , p- полупериметр, a,b,c – стороны). Вычислить площадь для египетского треугольника.
    >> % Возможен только один оператор. Площадь полагаем нулю, если из заданных отрезков нельзя составить треугольник
    >> geron=@(a,b,c) real(0.25*sqrt((a+b+c)*(a+b- c)*(a+c-b)*(b+c-a)));
    >> geron(3,4,5) ans =
    6 5.
    Построить график зависимости S(a) на отрезке [0,
     e], приняв b=e, c=  . Оформить подписи, цвет кривой сделать фиолетовым.
    >> % Есть два пути решения. 1-й состоит в переписывании анонимной функции.
    >>% Команда figure избыточна. Hfig – указатель на текущий графический объект
    >> geron1=@(a,b,c) real(0.25*sqrt((a+b+c).*(a+b-c).*(a+c-b).*(b+c- a)));
    >> x=0:0.1:(pi*exp(1));Hfig=figure(1);plot(x,geron1(x
    ,exp(1),pi));

    20
    >>%
    Второй путь, более общий, заставляет обратиться к программированию.
    Некоторые конструкции типа for…end доступны и в консоли.
    >> % Ниже формируется вектор у, длина которого постоянно увеличивается. Затем непосредственно вывод графика (рисунок 3).
    >> x=0:0.1:(pi*exp(1));y=[
    ]; for k=x y=[y,geron(k,exp(1),pi)]; end;
    >> Hfig_=figure(2);plot(x,y);
    Рисунок 3 – График по результатам вычислений
    В окне Figure2 щелкнем мышью по иконке со стрелкой, перейдя к режим редактирования. Вызовем контекстное меню, связанное с кривой – пункт Color, и выберем цвет. Аналогичным способом выберем цвет фона. Сделаем и другие манипуляции с осями, подписями и пр. Полезен пункт главного меню Insert, пункт контекстного меню – Show Properties. Удобно также подключить редактор свойств (View – Property Editor). Исполнив File– Generate M- file, можно просмотреть совершенные нами действия в виде команд.
    6.
    Построить семейство кривых S(a) при пяти значениях b=0,1,2,3,4 и фиксированном с=5. Величина а лежит в пределах [0;8].
    Точки маркировать.

    21
    >> % Закрыли 2-й график, открыли новый с указанием рисовать все там
    >> close(Hfig_);figure(3);hold on;
    >> % Инициализируем переменные
    >> a=0:0.5:8;b=0:1:4;c=5;
    >>% Команды занимают две строки. Организуем цикл, формируем массив указателей на линии, цвет линии в формате RGB (смесь красного, зеленого и синего) случайный
    >>
    Hlines=[
    ];for j=1:5,
    Hline=plot(a,geron1(a,b(j),c));
    Hlines=[Hlines
    Hline]; ... set(Hline,'Marker','+','Color',[rand rand rand]); end; hold off
    >> %Изменим цвета линий на привычные (рисунок
    4) (см. ColorSpec) и добавим подписи к линиям. Вот где понадобились указатели! Названия получаем преобразованием чисел в литералы
    >> MyColor=['y' 'm' 'c' 'r' 'g' 'b' 'w' 'k'];
    >> for j=1:5, Lname=strcat(num2str(j),': b=
    ',num2str(b(j))); set(Hlines(j),'Color',MyColor(j),'DisplayName',
    Lname); end; legend('show');
    Рисунок 4 – Семейство кривых

    22 7.
    Построить контурный график на основе базиса (u,v) и матрицы значений В, которая содержит высоты «гор». Площадь построения – [-2;2]× [-2;2].
    >> % Вначале создадим функцию растягивания координат, поскольку 0<
    i i
    v
    &
    u
    <1
    >>stretch=@(x) 4/(max(max(x))-min(min(x)))*x-
    2*(max(max(x))+min(min(x)))/(max(max(x))- min(min(x)));
    >> % Построим первоначальную сетку (рисунок 5).
    >> [Xbig,Ybig]=meshgrid(u,v)
    Xbig =
    0.4740 0.9090 0.5962 0.3290 0.4740 0.9090 0.5962 0.3290 0.4740 0.9090 0.5962 0.3290 0.4740 0.9090 0.5962 0.3290
    -2
    -1.5
    -1
    -0.5 0
    0.5 1
    1.5 2
    -2
    -1.5
    -1
    -0.5 0
    0.5 1
    1.5 0.75 0.8 0.85 0.9 0.95 1
    1.05 1.1 1.15
    Рисунок 5 – первоначальная сетка
    Ybig =
    0.4782 0.4782 0.4782 0.4782 0.5972 0.5972 0.5972 0.5972 0.1614 0.1614 0.1614 0.1614 0.8295 0.8295 0.8295 0.8295

    23
    >> % Построим подробную сетку в области, заданной векторами u,v. Эта область обязана не превосходить существенно предыдущую область [Xbig
    Ybig]
    >>
    [X,Y]=meshgrid(linspace(min(u),max(u),100),linspac e(min(v),max(v),100));
    >> % Проведем интерполяцию с использование кубических полиномов
    Z=griddata(Xbig,Ybig,B,X,Y,'cubic');
    >> % Построим контурный график с заливкой для квадратной площадки contourf(stretch(X),stretch(Y),Z)
    Для того, чтобы скопировать рисунок в буфер обмена, исполнить пункт Edit – Copy Figure меню графического окна, а если хотим скопировать его вместе с фоном, то поставить галочку File –
    Preferences – File Copy Template – Copy Options – Use Figure Color.
    Чтобы добавить расшифровку цветов, исполнить Insert – Colorbar.
    Можно цветовую гамму выбрать монотонной; для этого имеется пункт Edit – Colormap…, а в появившемся окне можно выбрать осеннюю гамму цветов (Tools – Standart colormaps – autumn) – (см. рисунок 5) Сверху-справа. Для того, чтобы обрезать у рисунка неиспользуемые поля – поставить галочку File – Export Setup –
    (Properties=Size) – Expand Axes….
    -2
    -1.5
    -1
    -0.5 0
    0.5 1
    1.5 2
    -2
    -1.5
    -1
    -0.5 0
    0.5 1
    1.5 0.75 0.8 0.85 0.9 0.95 1
    1.05 1.1 1.15
    Рисунок 5 – Выбранная гамма цветов

    24 8.
    Построить поверхность площадей S(a,b,c), вычисленную для изопериметрических треугольников (т.е. a+b+c=1).
    >> % Подготовим сетки и значения, цвет выберем потом
    >> a=0:0.01:1;b=0:0.01:1; [X,Y]=meshgrid(a,b);
    Z=geron1(X,Y,1-X-Y);
    >> % Инициализируем графический объект и построим в первом приближении (рисунок 6). Функция surf позволяет указывать вектора вместо матриц, т.е. как бы функция meshgrid выполняется автоматически
    >> figure(5);Hsur=surf(a,b,Z)
    >> % Обычно цветом отмечается высота точки. Введем свои цвета (в палитре RGB) и немного изменим угол зрения (рисунок 7). Также уберем линии сетки поверхности.
    >>
    C=cat(3,X,Y,1-X-Y); set(Hsur,'CData',C,
    'LineStyle','none'); view([23.5 36]);
    >> xlabel('Сторона
    А','Color',[1 0
    0]); ylabel('Сторона
    В','Color',[1 0
    0]); zlabel
    ('Величина площади', 'Color',[1 0 0],'Rotation',
    90);
    >>title('Площадь','BackgroundColor',[0.9412 0.9412 0.9412],..
    'EdgeColor',[1 0 0], 'FontSize',14,
    'FontWeight','bold','LineWidth',1);
    >>axis([0 1 0 1 0 0.5]); box('on');

    25
    Рисунок 6 – Графический объект в первом приближении
    Рисунок 7 – Графический объект с изменённым углом зрения
      1   2   3   4   5   6


    написать администратору сайта