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

  • Количество Эксперимент 1 Эксперимент 2 Эксперимент 3

  • Учебнометодическое пособие к практикуму по курсу Пакеты компьютерной алгебры


    Скачать 1.85 Mb.
    НазваниеУчебнометодическое пособие к практикуму по курсу Пакеты компьютерной алгебры
    Дата11.04.2022
    Размер1.85 Mb.
    Формат файлаpdf
    Имя файлаbookMATLAB_Kurbatova_Pustovalova_ed.pdf
    ТипУчебно-методическое пособие
    #463060
    страница3 из 4
    1   2   3   4
    semilogx, semilogy
    и loglog.

    40
    Пример 9. Использование логарифмической шкалы для оси x clear, clc x=[1e+0,1e+1,1e+2,1e+3,1e+4,1e+5,1e+6] y=[1,2,4,8,16,32,64]; p=semilogx(x,y), set(p,
    'LineWidth'
    ,2); title(
    'Логарифмическая шкала по оси x'
    )
    Пример 10. Использование логарифмической шкалы для обеих осей clear, clc x=[1e+0,1e+1,1e+2,1e+3,1e+4,1e+5,1e+6] y=[1e+1,1e+4,1e+1,1e+3,1e+1,1e+4,1e+1]; p=loglog(x,y) set(p,
    'LineWidth'
    ,2); title(
    'Логарифмическая шкала для обеих осей'
    ) grid on
    % задание сетки

    41
    Задания для самостоятельного решения
    1. Постройте график функции y = exp(-x)*sin(10*x). Задайте тип и цвет линии.
    Добавьте заголовок.
    2. Постройте графики функций в одних осях. y1 = exp(-x).*sin(10*x) y2 = sin(10*x)
    Добавьте легенду. Попробуйте перенести легенду с помощью мыши в другое место окна figure. Задайте параметр расположения легенды вне графика - в правом верхнем углу графического окна.
    3. Постройте графики функций: y1 = sin(x) y2 = cos(x)
    Подпишите оси. Добавьте сетку.
    4. Постройте графики функций в одном графическом окне, один под другим. y1 = sin(x) y2 = cos(x)
    5. Постройте четыре графика функций, каждый в своем окне, в одном figure y1=cos(x) y2=sin(x) y3=x^(1/2) y4=x^2 6. Постройте график функции y = sin(x). Добавьте подписи координатных осей, сетку, команду задания границ для осей. Добавьте подпись '← sin(x)' в точке (3.05,0.16).

    42 7. Для функции n! постройте график функции в логарифмическом масштабе по оси y.
    8. Постройте графики функций f = log(0.5*x) g = sin(log(x)) в логарифмическом масштабе по оси х. Добавьте легенду на графики.
    9. Постройте графики функции y=exp(x) в обычном и логарифмическом мас- штабе в одном figure, но в разных осях (используйте subplot). Добавьте ле- генду на графики.
    10. Постройте график функции в полярных координатах: x=[0:0.01:2*pi] f =8*sin(x) r = cos(2*x)
    11. Постройте в полярных координатах следующие кривые: окружность, спи- раль Архимеда, сердце, бабочка, полярная роза.
    12. Постройте графики функций, заданных параметрически. Диапазон изме- нения параметра подберите таким образом, чтобы построенные графики были похожи на графики, приведенные на рисунках ниже. Установите тол- щину линии графиков в 2 пикселя. Добавьте заголовок и легенду. Сохраните построенные графики в различных графических форматах - png, jpg, eps.
    Сравните качество и размер получившихся графических файлов. Сделайте вывод о том, какой графический формат предпочтительнее для графиков и почему.

    43
    Эвольвента окружности
    Улитка Паскаля

    44
    Гипоциклоида
    Циклоида
    13. Постройте кривую «локон Аньези» для нескольких значений параметра.
    14. Постройте график функции x*sin(1/x).
    15. Задайте три вектора. Первый вектор содержит номера дней месяца. Вто- рой и третий список содержат значения курса акций в эти дни, для двух раз- ных месяцев. Построить графики зависимости курса акций от номера дня.
    Добавить заголовок, подписи осей, сетку и легенду, цвета для линий графи- ков.
    16. Дана таблица. Отобразите данные в графическом виде.
    Количество
    Эксперимент 1
    Эксперимент 2
    Эксперимент 3
    10 3
    0.02755529361166 0.04623873215974 0.06307710110520 10 4
    0.28666151628344 0.67483306464728 0.85628458136542 10 5
    2.84742674641796 4.92785226951551 6.29249360982561 10 6
    28.5048610591205 48.4353558734875 60.7404539333518

    45 17. Постройте график зависимости времени возведения матрицы в квадрат от ее порядка. Матрицу наполнять случайными целыми числами в диапазоне от 1 до 10. Построить такие же графики для верхней и нижней треугольных матриц. Все графики строить в одних осях. Добавить сетку и легенду. Сделать вывод.
    18. Постройте график функции sin(x). С помощью панели инструментов окна figure измените толщину линии графика, добавьте текстовую надпись. Вы- полните экспорт графика в файл png.
    19. Постройте график функции sin(x)/x. С помощью функции gtext добавьте текстовую надпись.
    Контрольные вопросы
    1. Перечислите способы построения графиков функций.
    2. Как построить график функции, заданной параметрически?
    3. С помощью какой команды можно отобразить сетку в координатных осях?
    4. Как построить несколько графиков в одних осях с помощью одной коман- ды (с помощью нескольких команд)?
    5. С помощью какой команды можно вывести текстовую надпись в графиче- ское окно?
    6. Для чего используют логарифмический масштаб для графиков. Приведите примеры.
    7. Что такое легенда и когда ее используют?
    8. Перечислите параметры функции subplot. Для чего используют эту функ- цию?
    9. Чем отличаются команды plot и fplot?
    10. Для чего строят графики?

    46
    Основные типы данных
    Любой объект в ML, в том числе скаляр, является массивом. Класс
    ARRAY – законодатель класса массивов, в котором разработаны методы функционирования всех дочерних объектов.
    Хранение массивов в ML осуществляется в векторной форме последо- вательно по столбцам, поэтому поддерживается как двойная (матричная) нумерация, так одинарная (векторная). Основой операций с массивами яв- ляется согласование размерностей. Заметим, что класс ARRAY является роди- тельским для всех потомков и определяет все объекты более низкого уровня как массивы (матрицы) так и правила (методы).
    На рисунке представлена схема иерархии классов (типов данных) в ML.
    Методы класса Array ndims
    – возвращает количество размерностей многомерного массива (лю- бой природы),
    n = ndims(a); size
    – определяет вектор v = size(a) размерностей массива; так, для n = 2,
    [m, p] = size(a);

    47 length(a)
    – определяет длину вдоль большей размерности;
    length(a(:)) определяет длину массива, записанного вектором; numel(a)
    – количество элементов массива; disp(display)
    – визуализация объектов, не подавляется знаком (;)
    Типы данных Numeric и Double
    Все объекты в ML делятся на числовые, если isnumeric(a) = 1
    равно логической единице, и нечисловые, если isnumeric = 0.
    В момент создания числового объекта идентифицируется класс потом- ка Numeric, которому он принадлежит. ML ориентирован на матричные вы- числения двойной точности с элементами класса Double.
    Пример 1. Логическая единица не является числовым объектом
    % Справка по элементарным функциям clear a=rand(2,3
    );
    % генерирование матрицы из двух строк, трех столбцов, элементы которой равномерно распределены на отрезке
    [0,1] b=isnumeric(a)
    % результат: 1 , т.е. a – числовой объект islogical(b)
    % результат: 1, т.е. b – логический объект isnumeric(ans)
    % результат: 0, т.е. логический объект - нечисловой
    В силу свойств наследования имеем:
    • скаляр – тоже массив, минимальный элемент размера (1,1);
    • в памяти матрица хранится как вектор, записанный последовательно по столбцам и поддерживается одинарная и двойная нумерация;

    48
    Заметим, что диапазон вещественных чисел
    [realmin, realmax], здесь realmin, realmax системные переменные минимальное и мак- симальное вещественные значения.
    Способы создания объектов Double
    Пример 2. Задание объектов перечислением:
    % вектор–столбец a = [1; 2; 3]
    ;
    % задание вектор-строки a = [1 2 3]
    % задание вектор-строки, иной синтаксис a = [1,2,3]
    % задание вектора с элементами арифметической прогрес- сии (первый член, шаг, последний) a = [a1 : aStep:aEnd]
    Пример 3. Задание объектов с помощью специальных матриц: a = rand(size(b))
    % – матрица с элементами, полученными генера- тором случайных чисел, равномерно распределенных на отрезке
    [0,1], такого же размера, как некоторая матрица b a = randn(m, n)
    % – размер генерируемой матрицы m на n; исполь- зуется генератор нормального распределения с нулевым средним и единичной дисперсией. a = ones(n)
    % – создается квадратная матрица из единиц размера n b = eye(n)
    % – единичная матрица a = zeros(n)
    % – нулевая матрица
    Задание объектов импортированием можно производить с помощью непо- средственного импортирования и чтением из внешних файлов:

    команды File →ImportData,

    чтение экселевского файла: namemtrix=xlsread(pathname.filename)
    ,
    здесь path- name.filename
    – строка (путь и имя файла);

    49
    Заметим, что имена листов следует писать на английском языке, файлы не должны нарушать структуру матриц; создается файл по имени выходной пе- ременной namematrix.
    Ниже, на рисунке, приведен пример чтения данных из файла Excel и резуль- тат чтения в ML:
    Файл inex.xls
    Имя листа Sheet1

    импортирование текстового файла load filename
    (текстовый файл, см. пример, пусть filename это inp.dat
    )

    форматированный ввод сначала открывается файл pathname.filename, записанный строкой в ка- честве первого аргумента: fid = fopen('pathname.filename', 'permission') второй аргумент,'permission' – указывает на форму доступа ('r' – чтение из файла; 'w' – запись в новый файл, 'a' – добавление в сущест- вующий файл, подробнее см. help); fid – файловый идентификатор, кото- рый система связывает с файлом (здесь подразумевается, что файл располо- жен в рабочей папке) или указывает на ошибку (например, отрицательное значение fid).

    50
    Затем происходит считывание данных из файла: a = fscanf(fid, format, size), здесь format = [' %g %f %e %s %c %d \n'], указывает, что в каждой строке файла записано шесть чисел , указанного формата:
    %g – с плавающей точкой машинного представления
    %f – с фиксированной точкой
    %e – с плавающей точкой
    %s – строка, пробелы в которой не учитываются
    %c – строка, учитываются пробелы
    %d – целые десятичные символ \n – переход считывания на следующую строку (перевод каретки); size - размер массива (матрицы), обусловлен машинным представлением, т.е. колонки матрицы, последовательно записаны в вектор-строку size = [m, n] m - количество элементов в строке; n – количество элементов в столбце, n = inf, если неизвестно количество строк в файле
    (длина столбца), из которого производится чтение, т.е. size = [m, inf]
    (см. далее рисунок с примерами, случай size= [2,inf]).
    Обратите внимание, что после считывания получаем матрицу, транспониро- ванную по отношению к заданной в файле, но операция транспонирования
    A.' поставит все на свои места.

    51
    Операцию транспонирования A.' необходимо применить после считывания в обоих примерах, это обусловлено машинным представлением – хранением матриц вектором, записанным по столбцам.

    форматированный вывод fprintf(fid, format, namevar)
    Запись в файл namevar (записанный строкой с необходимым расширени- ем); fid – файловый идентификатор файла, который уже открыт и пустой или ранее создан; format – строка по аналогии с форматированным вводом, здесь далее при- веден пример формата, который еще имеет поясняющие надписи
    ['points number= %d x= %g y=%e surf=%f \n' ] fclose(fid) - команда, закрывающая созданный файл.
    Пример 4. Создание шахматной структуры, без использования циклов
    %% шахматный порядок figure
    %m - нечетное; n-любое m=9 n=6
    A=rand(m,n)
    A(1:2:end)=0 mytitle=['m=',num2str(m),' - число строк, нечетное'] subplot(2,2,1),spy(A),title(mytitle) m=8
    %m - четное;
    n=6
    A=rand(m,n)
    A(1:2:end)=0 mytitle=['m=',num2str(m),' - четное'] subplot(2,2,2),spy(A), title(mytitle)
    A=rand(m,n)
    AA=A
    A=[rand(1,n);A]

    52
    A(2:2:end)=0
    A(1,:)=[] mytitle=['добавляем 1-ю строку; тот же алгоритм, и уда- ляем 1-ю строку'] subplot(2,2,3),spy(A), title(mytitle)

    53
    Задания для самостоятельного решения
    Задание 1

    Построить блочно-диагональную матрицу, которая состоит из n блоков (n – целое, генерируется случайным образом на отрезке [4,8] с помощью randi или randint – зависит от версии MatLab).

    Блоки строятся генератором равномерно распределенных чисел на отрез- ке [0,1], размер каждого из n блоков определяется арифметической прогрессией n:1:2n-1.

    Вывести на экран структуру матрицы командой spy.
    Задание 2

    Построить матрицу A пятого порядка с помощью генератора rand.

    Вычислить A' A и A'+A и доказать, что полученные матрицы симмет- ричны. При выполнении задания циклы использовать нельзя.
    Задание 3

    Второй и предпоследний блоки блочно-диагональной матрицы (см. задание 1) определяют подматрицу блочной матрицы, начинающейся с n+1 –й строки и столбца и до end-(2n-1) строки и столбца.

    Требуется передвинуть выбранные блоки так, чтобы они разместились в вершинах побочной диагонали подматрицы.

    Структуру матрицы отобразить на экране с помощью команды spy.
    Задание 4

    Постройте заполненную матрицу размера (m,n).

    Расставьте нули в матрице в шахматном порядке, не используя опера- торов цикла.

    Рассмотрите случаи для четного и нечетного значений m.

    Отобразите на экране структуру исходной матрицы и результата в смежных осях. Для этого используйте команды spy и subplot.

    54
    Задание 5

    Предложите два способа суммирования элементов вектора длины
    10000000 (сгенерируйте случайным образом с помощью rand), без использования цикла.

    Оцените скорость выполнения операций в обоих случаях. Команды оценивания времени работы процессора: tic, toc; -секундомер; и затраты на процесс как разница времени начала и конца:

    t1=clock
    , инструкции алгоритма, t2=etime(clock,t1)
    Задание 6

    Задайте n - размер матриц A=ones(n), B=zeros(n); n=size(C), C
    – произвольная матрица, состоящая из нулей и единиц, сгенерирован- ная randi (randint).

    Объясните смысл и результат следующих операций:
    B&C
    A|C
    Замечание. Любую матрицу, элементы которой нули, или единицы, можно конвертировать в логическую. Например, матрица A=logical(ones(n))
    – логическая; здесь logical – конвертер.
    Контрольные задания и вопросы
    Выполните и объясните следующие команды. Полагайте переменные зада- ний 1-4 глобальными.
    Задание 1. help elmat ones(2,5)
    A=[1:3;4:6]
    B=ones(size(A)) eye(5) rand(5)
    C=zeros(3)

    55
    Задание 2. help >
    D=[1-i 2; 0.5i -1+2*i] real(D) imag(D)
    D1=D’
    D2=D.’
    % объясните отличие D1 D2
    A’
    % матрица A из задания 1
    Задание 3. Выполнить, объяснить особенности
    10/3 format rational
    1/3 format short
    1/3
    % обратите внимание на системные переменные,
    % которые являются результатом выполнения последних двух команд
    1/0 0/0 realmin realmax
    Задание 4. Выполнить, определить размер результирующих массивов. Объ- яснить.
    A=[A; sin(0.5*pi*(1:3))] diag(A) diag(diag(A))
    S=sum(A)
    S=sum(sum(A)) abs(A) norm(A)
    %определите по справке, какую норму вы определили

    56
    Объекты класса Char. Функции и свойства
    Объекты типа Char являются потомком ARRAY, поэтому для них спра- ведливы все принципы, которые поддерживаются для массивов.
    Объекты типа Char – строки; строки состоят из цифр, букв и символов таблицы ASCII, каждый элемент строки занимает два байта, это является нетипичным для других языков программирования, в которых одному элементу отводится один байт памяти, но MatLab ориентирован на матричные вычисления, в основе которых лежит комплексная арифметика
    (переход от операций комплексной арифметики к вещественной достигается автоматически с нулевой мнимой частью, обратный переход автоматически невозможен), это и обусловливает резервирование еще одного байта на комплексную часть.
    Справка о создании, контроле типа и редактировании строковых перемен- ных
    % Задание строки:
    % один или серия символов заключается в апостроф
    A='ученье'
    % кавычка задается четырьмя апострофами
    A=''''ученье''''
    % выводится “ученье”
    % контроль типа:
    % является ли аргумент функции ischar строкой, ischar(A)
    % если да, то результат - логическая единица length(A)
    % количество элементов строки равно 10
    % Конкатенация строк (по правилом матричной алгебры):
    % строки записываются матрицей размера 2

    3
    ['tip'; 'top']
    % аналогично функцией strvcat (важно: согласование раз- мерностей по столбцам не требуется!)
    % две строки последовательно записываются строкой %из шести букв,аналогично функцией strcat
    ['tip', 'top']

    57
    % Поиск букв или лексем:
    S= ’sin(x)*cos(y)’, s=’x’
    % ищем в большей строке меньшую k = findstr(s, S)
    % ищем в строке первого аргумента строку второго r = strfind(S, s)
    isempty(k), isempty(r)
    % проверка хотя бы
    % одного совпадения лексем (успех - логическая единица)
    %% Сравнение строковых переменных v1 и v2
    % v1 сравнилось c v2, если все буквы совпали с учетом
    % регистра strcmp(v1,v2)
    % v1 сравнилось c v2, если все буквы совпали без учета
    % регистра strcmpi(v1,v2)
    % сравнилось n букв, с учетом регистра strncmp(v1,v2,n)
    % сравниваются n букв без учета регистра strncmpi(v1,v2,n)
    Пример 1. Конкатенация (соединение) строк
    % Конкатенация строк с пробелами и без в конце,
    % первый способ: strcat('C ', 'Новым ', 'Годом!')
    % пробел – элемент строки!
    strcat('C', 'Новым', 'Годом!')
    % второй способ:
    ['C ', 'Новым ', 'Годом!']
    Пример 2. Сравнение строк
    % c учетом регистра и без: s1='ABCDEFGH' s2='ABCDefgh' s3='ABCabc' strcmp(s1,s2) strcmpi(s1,s2) strncmp(s1,s2,3)

    58
    Пример 3. Сравнение матриц, элементы которых - строки
    % c учетом регистра и без: sm1=['1234567'; 'ABCDEFG'], sm2=['1234567'; 'ABCDefg'] strcmp(sm1, sm2) strncmp(sm1, sm2, 4) strcmpi(sm1, sm2) sm3=['1234567'; 'ABCDEFG'] sm4=['1234567'; 'ABCdefg'] strcmpi(sm3, sm4)
    Пример 4. Преобразование регистра строки
    % строчные буквы:
    lower('Happy Birthday - С Днем Рождения!')
    % прописные буквы: upper('Happy New Year - С Новым Годом!')
    Пример 5. Выделение лексем
    % выделение слов, составляющих выражение,
    % разделенных пробелами s='С Новым Годом!'
    [t1, r1] = strtok(s)
    [t2, r2] = strtok(r1)
    [t3, r3] = strtok(r2)
    % выбраны три лексемы в переменных: t1, t2, t3
    1   2   3   4


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