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



Pdf көрінісі
бет14/15
Дата26.11.2023
өлшемі1,85 Mb.
#128313
түріУчебно-методическое пособие
1   ...   7   8   9   10   11   12   13   14   15
 
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))


Достарыңызбен бөлісу:
1   ...   7   8   9   10   11   12   13   14   15




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

    Басты бет