ОӘК
042-18-12.1.55/3-2013
№1 басылым 18.09.2013ж
50 беттің 40-сі
қарастырылған оңды бүтін санды факториалды есептеу мысалында толыққанды
кезінде қарастырамыз. Соңында рекурсивті анықтауға бірлікте аз мӛлшерде берілген
санның туындысы факториал санына анықтау болады. М-функция рекурсивті
түрінде М-тілінде рекурентті түрде факториалды анықтаудың реализациясы:
Function res=MyRecursFact(n)
If n==1
res=1;
return
else
res=n* MyRecursFact(n-1);
end
Рекурсивті шақырудың тізбекті аяқталу кепілдігіне шартты оператор болып
табылады. Бұнда шақырылу аргументтердің аз мәнімен беріледі. Олар 1 мәніне
жетсе, оң санға тізбекті түрде кӛбеюінде мәнді қайтарылымының тізбектеп
кӛбейтуімен осы функциялар экземплярынан керісінше тізбектік қайтарылымы
басталады. Соңында, факториалды есептеуге әкеледі. Ӛңделген рекурсивті функция
түрлі бүтін сандық факториалдарды жақсы есептейді:
MyRecursFact(57)
ans=
4.0527e+076
MyRecursFact(163)
ans=
2.0044e+291
Ұсынылатын әдебиет:
1.Статистический анализ данных в пакете Mathcad Радченко Т.А., Дылевский А.В,
Воронеж, 2004
2.Дьяконов В.П. Справочник по MathCAD PLUS 6.0 PRO. - М.: СК-Пресс, 1997.
6-Лабораториялық сабағы.
Тақырыбы: MatLab-тағы үшӛлшемді беттер, анимациялық графика
М-функцияны анықтауда қарастырылған кіру параметрлері және шығу
мәндерінің соңғы сандарын әр кезде қатал түрде белгіленетін. Алайда,
жағдайлардың болуында бұлардың айнымалы санды штатты түрде ӛңдеудегі бір
функцияны иемдену пайдалы. Мысалы, векторлар санының ұзындығының
қосындысын беретін функцияны иемденуге жаман болмайды. Бұндай функция ӛзі
шақырылғандар бойынша параметрлерді нақты санын аңғара алуы керек. Matlab
жүйесінің М-тілінде ондай мүмкіндік ұяшықтардың массивіне пайдалануға жүреді.
М-функцияны анықтауда параметрді кіретін аргументінде белгісіз саны алдын ала
берілуде varagin кілтті сӛзі ретінде белгілеу керек. Бұндай кілт сӛзін белгілейтін
ОӘК
042-18-12.1.55/3-2013
№1 басылым 18.09.2013ж
50 беттің 41-сі
ұяшықтар массиві, яғни онда сол параметрлер жабдықталған. Varargin параметрінде
жабдықталған аргументтердің нағыз саны функция әр кезде біле алады. Ол үшін
length функциясы қолданылады.
Тӛменде функция коды таныстырылды. Ол ӛзінде вектор-жол кӛлденең
санының ұзындығын квадраттар қосындысын есептейді:
function SumLen=NumLenght(varargin)
n=length(varargin0); SumLen=0;
for k=1:n
Sumlen=Sumlen+ varargin{k}(1)^2+ varargin{k}(2)^2;
end
Параметрлер тізімінде varargin аргументі жалғыз болмаса, онда ол соңында
тұру керек.
Қарастырлған мысалда фигуралық жақша кӛмегімен бӛлек ұяшықтағы
қамтылуды шығарамыз, яғни вектор, ал дӛңгелек жақша инденсациясының келесі
кӛмегімен вектордың бірінші және екінші координаттарын шығарамыз.
NumLength функциясын шақыруда ұяшықтар массивінде вектор-жолдар кіретін
санын жабдықтамаса да болады. Оны Matlab ӛзі жасайды. Оларды ақиқатталған
параметрлері ретінде үтір арқылы жеткілікті түрде санауға болады:
Numlenth([1 2], [3 4])
ans=
30
NumLength функциясын басқа параметрлер санымен шақырайық:
Numlenth([1 2], [3 4], [5 6])
ans=
91
Функция екі жағдайда да оңай ӛңделеді. М-функцияны анықтауда қайтарылымды
мәндегі айнымалы сан ұяшықтар массивінде жабдықталады. Оның қолданылатын
сӛзі Varargout :
Function varargout=MyFunc3(X)
Мұнда varargout атымен ұяшықтар массивінде шығарылатын мәнді, кӛлденең
санды функция денесіне жабдықтау. Айталық, MyFunc3 кіретін функциясына
кірудің жалғыз жол түрлі ӛлшемдегі массив және ӛлшемдер параметрін береді.
Оның ӛлшемінің біреуінен жағалай кіретін массив ӛлшемі болып табылатын әрбіреу
бірнеше скалярларды қайтаруымыз керек. ӛлшеу саны алдын ала белгісіз болады,
онда динамикалық функция денесінде анықтауға болады және барлық скалярларды
жалғыз varargout шығу айнымалысында жабдықтау. Бұның шешімі мынау:
Function varargout=MyFunc3(X)
n=ndims(X);
ОӘК
042-18-12.1.55/3-2013
№1 басылым 18.09.2013ж
50 беттің 42-сі
for i=1:n
varargout(i)={size(X,i)};
end
Мұнда size(x,i) функциясы i-ші бағытта х массивінің ӛлшемін есептейді:
A=[1 2 3; 4 5 6];
[m, n] =MyFunc3(a);
Мұндағы m және n скалярлары 2 және 3 мәндеріне сәйкес. С үш ӛлшемді
массивті құрайық және оған MyFunc3 функциясын шақырайық:
B=[4 5 6; 9 8 7];
C(:, :, 1)=A; C(:, :, 2)=B;
[m,n,k]=MyFunc3(C);
m, n және k скалярлары сәйкесінше 2,3,2 мәндерді қабылдайды. Олардың ішіне
С үш ӛлшемді массивтің барлық ӛлшемдерінде ӛлшем енгізіледі. Егер екі ӛлшемдегі
массивтің ӛлшемі бізді қызықтырса, онда MyFunc3 функцияны келесі форматта
шақыруға болады:
[m,n]=MyFunc3(C)
М-тілдегі синтаксистік тұрғыда корректілі болып келеді, бірақ үшінші
шығарылатын MyFunc3 функциясымен шығарылатын мән жоғалады.
М-функцияның кіру параметрі және шығу мәнін бақылау
Түрлердің сәйкес келмеуі және нақты сандар жалған параметрлері М-
функцияның дұрыс жұмыс істемеуіне әкеледі. Бірақ пайдаланушы оны шақыру
кезінде қателесуі мүмкін. Жоғары кӛрсетілген MatrProg1 функция мысалының
мәселесін қарастырайық. Бұл функция бірдей ӛлшемді бірінші және екінші аргумент
массивін пайдалануды жорамалдады. Егер пайдаланушы әр түрлі ӛлшемдегі массив
түріндегі нақты параметрлерді қателесіп беретін болса, онда функцияны орындау
кезінде қате болады. Осыны болдыртпау үшін MatrProg1 функция денесінде бірінші
және екінші ӛлшемді параметрлерді тексеру керек:
Function [A, B]= MatrProg1(X1, X2, x)
N1=ndims(X1); n2=ndims(X2);
%---parameters control--------------------
if n1~=n2
error(‘Different dimensions’)
else
for i=1:n1
if size(X1, i) ~=size(X2, i)
error(‘Different sizes of lst and 2
nd
parameters’)
end
Достарыңызбен бөлісу: |