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



бет9/9
Дата16.10.2023
өлшемі132,17 Kb.
#115900
түріУчебно-методическое пособие
1   2   3   4   5   6   7   8   9
Байланысты:
Учебно-методическое пособие к практикуму по курсу «Пакеты компью-

Количество 
Эксперимент 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
% выделение слов, составляющих выражение, разделенных
%нестандартными разделителями:
s='a+b*c'
[t1, r1] = strtok(s, '+*')
[t2, r2] = strtok(s, '+*')
[t3, r3] = strtok(s, '+*')
% второй аргумент –строка, должна содержать весь набор
%разделителей
Пример 6. Поиск элементов строки (подстрок в строке)
% результат – номер элемента в строке поиска, с которо-
го, начинаются совпадения

s1='00', s2='2003'; s3='100002'





59
findstr(s1,s2)


findstr(s2,s1)
strfind(s1,s2)
strfind(s2,s1)
findstr(s3,s1)
Пример 7. Поиск элементов (подстрок) в многомерных строках
sm=strvcat('com', 'compare', 'computer')
strmatch('com', sm)
strmatch('com', sm, 'exact')
s='123com'
strmatch('com',s)
sc={'com';'compare';'computer'}
strmatch('com', sc)
Пример 8. Поиск и замена элементов строки
s='12341234'
s1=strrep(s, '123', 'ABCD')
s2=strrep(s, '124', 'ABCD')
s3=strrep(s, '123', '')
Пример 9. Вывод элементов таблицы ASCII
%
вся таблица
char(1:255)
% xyz
char(120:122)
Пример 10. Заполнение многомерной строки элементами
%
второй и третий аргументы – размерности %массива
repmat('=', 1,4)
repmat('*-', 3,4)
Пример 11. Выравнивание строки
s=' 123456 '
sl=strjust(s, 'left')
sc=strjust(s, 'center')
sr=strjust(s, 'right')



60
Пример 12. Выполнение фрагментов строки


s='С Новым Годом!';
s(1:2)
s(3:8)
s(9:end)
Пример 13. Выявление позиций элемента в строке
s='С Новым Годом!';
r=eq(s, 'о')
% или равносильно:
q=r=='о';
if any(r), disp('есть совпадение'),end %
sum(r)
% количество совпадений
index=find(r)
% порядковые номера позиций совпадений



61
Объекты класса Cell. Функции и свойства


Cell – конструктор класса, массива разнородных объектов – ячеек. Од-
нако с его помощью только задается размер массива. Фигурные скобки ис-
пользуются для перечисления его элементов, а также для указания индексов
при оперировании его объектами.
Способы создания: делятся на декларативные, описательные, конвер-
тационные и создаваемые системой. К числу создаваемых системой относят-
ся массивы ячеек, получаемые при формировании выходных параметров
переменной длины, массивы ячеек, которые используются системой и поль-
зователем при обработке событий пользовательского интерфейса и т.д.
В отличие от ранее рассмотренных объектов, содержание массива
ячеек даже при отсутствии подавления вывода точкой с запятой (;) будет не-
видимым.
Функция celldisp(c) – визуализации элементов, решит эту про-
блему, также как и команда c{:}
Пример 1. Создание массивов ячеек
A=ones(6)
% резервирование
C=cell(size(A))
b = {
'
sin(x.^2)/(3 * pi* x.^2)
'
,[1:2:pi],rand(5)}
celldisp(b)
% каждый элемент полученной матрицы –
% ячейка, состоит из одного элемента, обращение к (i,j)
% элементу %g{i,j};
g=num2cell(randn(3))
% r –массив ячеек, состоящий из одного элемента, и
% этот элемент есть матрица класса double 4-го порядка
% – и обращение к (i,j) элементу r{1}(i,j)
r=mat2cell(rand(4))
%понять адресацию к элементам d
d = {[1] [2 3 4]; [5; 9] [6 7 8; 10 11 12]}
iscell(d)
% контроль типов



62
Пример 2. Поиск совпадающих лексем с использованием массивов ячеек


sc1=[{'1234'}; 'ABCDEFGH']
sc2=[{'1235'}; 'ABCDefgh']
strcmp(sc1, sc2)
% поиск совпадений без учета регистра
strcmpi(sc1, sc2)
strncmp(sc1, sc2, 3)
% поиск первого совпадения трех
% подряд элементов строки
Пример 3. Эффективного построения блочно-диагональной матрицы -
blkdiag
% матрицы для блоков – массив % ячеек
Blocks={rand(3);randn(5);ones(4)}
% B - блочно-диагональная матрица
B=blkdiag(Blocks{:})
Пример 4. Конвертирования в char
str = { 'Goodbye', 'cruel', 'world' }
char(str{:})
Пример 5. Конкатенации
c = { [3 4], [5 6] };
cat(1, [1 2], c{:} )
% добавление строк
cat(2, [1 2], c{:} )
% добавление столбцов
e = {}; cat(2, [1 2], e{:} )
Пример 6. Создания массива ячеек
T = cell(1,9); % резервирование
T(1:2) = { [1], [1 0] };
for n=2:8, T{n+1}=[2*T{n} 0] - [0 0 T{n-1}]; end
T{4}



63
Создание функций в Matlab


В ML для эффективного программирования используются процедуры и
процедуры-функции. Каждая процедура записывается в отдельном файле с
расширением *.m и имя процедуры должно совпадать с именем этого фай-
ла.
Функции и процедуры
Для создания процедур и процедур-функций используется одинаковый
заголовок, но в процедуре может быть один или несколько выходных пара-
метров
function [out1,out2] = myproc(in1,in2,in3)
а в функции только один, который вычисляется в последнем исполняемом
операторе процедуры.
function resfunc = myfun(in1,in2,in3)
. . . . . . . . . . . . . . . . . . .
resfunc=sin(in1)*in2^in3
% некоторое выражение
Пример 1. Процедуры
function [x1,x2] = quadform(a,b,c)
d = sqrt(bˆ2 - 4*a*c);
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
Обратиться к процедуре можно [r1,r2]=quadform(1,1,1), исполь-
зуя конкретные значения входных параметров.
В MATLAB имеются встроенные функции, которые могут иметь меняю-
щееся число входных аргументов и меняющееся число выходных парамет-
ров. Например, функция S=svd(A) вычисления сингулярных чисел матрицы A.
Она может применяться в виде *U,S,V+=svd(A), когда требуется большее чис-



64
ло выходных параметров. Другим примером такой функции может служить


функция cat(A,B) горизонтального объединения массивов A и B . Она может
иметь произвольное число входных массивов, cat(A1,A2,A3,A4).
При написании собственных функций в ML существует возможность
указывать переменное количество входных и выходных аргументов.
Для это-
го предназначен массив ячеек переменной длины varargin для входных па-
раметров и varargout для выходных. В этом случае заголовок процедуры бу-
дет иметь вид:
function [out1,out2,varargout] = myproc(in1,in2,in3,
varargin)
Такие ситуации обусловлены тем, что пользователь сам решает в каждом
конкретном случае, что ему нужно на выходе, например, кроме постоянного
выходного параметра вектора-решения, точность и или номер итерации.
При обращении к такой процедуре будут заданы конкретные параметры va-
rin1, varin2,… и идентификаторы varout1, varout2,…
Неопределенность длин этих массивов ячеек накладывает дополни-
тельную ответственность на программиста при программировании проце-
дур. Так в момент обращения все переменные аргументы помещаются сис-
темой в varargin, их следует оттуда извлечь и присвоить соответствую-
щим сущностям-переменным.
Длину массива varargin определяем по формуле: количество всех
входных переменных (определяет функция nargin) минус количество по-
стоянных входных аргументов, так же как и длину varargout; количество
всех выходных переменных определяет функция nargout.
Пример 2. Тип файла – функция. Имя файла – varlist.m
function varlist(varargin)
fprintf('Number of arguments: %d\n',nargin);
% nargin – количество входных аргументов в функции
celldisp(varargin)



65
Вызов функции:


varlist(ones(2),'some text',pi)
Результат:
Number of arguments: 3
varargin{1} =
1 1
1 1
varargin{2} = some text
varargin{3} = 3.1416
Пример 3. Тип файла – функция. Имя файла – sizeout.m
function [s,varargout] = sizeout(x)
nout = max(nargout,1) - 1;
% nargout – количество выходных аргументов функции
s = size(x);
for k=1:nout
varargout{k} = s(k);
end
Вызов функции:
[s,rows,cols] = sizeout(rand(4,5,2))

Результат:


s = 4 5 2
rows = 4
cols = 5
Пример 4. Количество входных параметров.
Тип файла – функция. Имя файла – testarg1.m
function c = testarg1(a,b)
if (nargin == 1)
c = a.^2;
elseif (nargin == 2)


66
c = a + b;


end
Вызовы функции:
estarg1([1 2])
testarg1([1 2],[3 4])

Результат выполнения:


ans = 1 4
ans = 4 6
Пример 5. Суммирование объектов double в массиве ячеек varargin
function s = add(s,varargin)
for n = 1:nargin-1
s = s + varargin{n};
end
Пример 6.
О массиве ячеек varargin входных параметров переменной длины
function b = blue(varargin)
if nargin < 1
varargin = {’rgb’};
end
switch(varargin{1})
case ’rgb’
b = [0 0 1];
case ’hsv’
b = [2/3 1 1];
otherwise
error('Цветовая модель не определена')
end
Аноним и функция-строка
Помимо описанных конструкций в ML используются анонимы. Это не-
поименованные процедуры-функции одного или нескольких аргументов.



67
Синтаксис анонимов сводится к выражению, левая часть которого является


именем процедуры, правая состоит из определяющего символа @, после ко-
торого в круглых скобках перечисляются один или несколько аргументов
функции, а затем приводится её аналитическое представление, зависящее от
этих аргументов, например,
sincos = @(x) sin(x) + cos(x);
w = @(x,t,c) cos(x-c*t);
Заметим, что анонимы могут быть аргументами функций, например, fzero
fzero( @(x) sin(x)+cos(x), 0 ).
Анонимную функцию можно определять прямо в командной строке ML или в
пределах функции или скрипта. То есть, можно создать простые функции без
необходимости создания файла специально для них.
Конструкция inline также обеспечивает быстрое создание функции одной
или нескольких переменных в соответствие с предлагаемым синтаксисом:
Namefunction=inline(expression_string)
Пример 5. Процедура inline
g=inline('2*cos(x)-sin(y)')
g(pi/8,pi/12)
symvar(g)
% массив ячеек, содержит аргументы функции
g{1},g{2}
% аргументы
Подпроцедуры
Помимо функций и процедур иногда целесообразно определить
функцию, которая нужна только для выполнения конкретной процедуры, то-
гда она должна быть записана в том же файле, что и головная процедура, и
является подпроцедурой (подфункцией). Подпроцедура «невидима» для ос-
тальных программ или процедур.



68
Пример 6. Процедуры и подфункции


function [x1,x2] = quadform(a,b,c)
d = discrim(a,b,c);
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end
% quadform()
function D = discrim(A,B,C)
D = sqrt(Bˆ2 - 4*A*C);
end
% discrim()



69
Литература


1. Говорухин, В. Компьютер в математическом исследовании: Учеб.курс -
СПб. *и др.+: Питер, 2001. - 624 с.
2. А. М. Половко, П. Н. Бутусов. MATLAB для студента Санкт-Петербург
БХВ-Петербург 2005 320 с. (19 экз)
3. Таранчук В.Б. Основные функции систем компьютерной алгебры. ,
2013. — 59 p.
4. Дьяконов В.П. MatLab:Учебный курс. СПб..: 2001
5. Джон Г. Мэтьюз,КуртисД.Финк.Численные методы. Использование
MatLab.И. «Вильямс »Москва, Санкт-Петербург, Киев.2001, 713 с.
6. Дьяконов В. П. Энциклопедия компьютерной алгебры. ДМК-Пресс,
2009. — С. 1264. — ISBN 978-5-94074-490-0.

http://emirsaba.org




Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет