2.Дьяконов В.П. Справочник по MathCAD PLUS 6.0 PRO. - М.: СК-Пресс, 1997.
5-Лабораториялық сабағы.
Тақырыбы: MatLab-та матрицалармен жұмыс, графиктер салу
Matlab жүйесінде функцияны орындау үшін екі арнайы функциялар бар: eval және feval.
Айталық пайдаланушы перне тақтадан strl жолдық айнымалыға келесі мазмұнды енгізсін:
‘A=[1 2 3; 4 5 6; 7 8 9];’
мұнда А атымен матрица құрылған және тоғыз сандық элементпен көрсетілген. Осы жұмысты eval функциясы орындайды:
eval(str1);
осыдан А атымен көрсетілген сандық айнымалы пайда болады. Егер пайдаланушы келесі жолды енгізсе:
‘x1=sin(1.25);’
онда eval функциясы осы жолдың синтаксистік талдауын орындап sin(1.25) функциясының мәнін есептейді.
Егер eval функциясымен жұмыс процессінде қате жағдай туатын болса, онда Matlab жүйесінің командалық терезесінде қате хабар көрсетіледі. Мысалы, егер біз S жолын келесі бейнеде көрсетсек:
S=’sin(1.25’;
және eval(S) функциясын командалық терезеде шақырсақ, онда келесідей хабарламаны көреміз:
Improper function reference. a ‘,’ or ‘)’ is expected.
үтір немесе жақша кем екенін білдіреді.
Егер дәл осындай жағдай М-функция денесінде орындалса, онда Matlab жүйесінің командалық терезесінде М-функцияның қай жолында қате бар екенін көрсетеді.
М-функцияға сәйкес мысал, мұнда қатені өңдеуге арналған MyErrorCatch арнайы функциясы көрсетілген:
function y=ErrorTest
s=input(‘Enter string:’,’S’);
y=eval(S,’MyErrorCatch’);
Eval функциясы күрделі өрнектерді шешуге, ал feval функциясы қосымша параметр беретін дара функцияны есептеуге арналған.
feval(str, x1, x2,…xN)
мұнда x1, x2,…xN аргумент мәнін есептейтін str жолы функция атын береді. Feval функциясын қолданғандағы жай мысал:
FunName={‘cos’,’sin’,’tan’};
m=input(‘Enter function index:’);
x=feval(FunName{m}, 0.5);
Егер пернетақтадан екі бүтін сан берілсе, онда feval функциясының көмегімен 0,4794 тең болатын sin(0.5) мәні есептеледі.
Рекурсивті функциялар. М-функциялардың шығуы.
Бірдей есептердің шешімінің түрлі алгоритмдерді шығатын функциялар арасында салыстырмалығын бастамас бұрын, тағы бір бүтін оң санды факториалды есептеу туралы вариантының есебін шешу керек. Ол вариант рекурсивті функцияларды қолдануға негізделген.
Функция рекурсивті деп аталады, егер оның денесінде өзін шақыратын болса. Бұл жағдайдың абсолютті ресми мысалы былай:
Function y=SimpleRecursF(x)
…
z=SimpleRecursF(t)+x.*x;
…
SimpleResursF функция денесінде осы функция шақырылатын болса, онда функцияны анықтау бойынша рекурсивті болады. Циклдық рекурсияның шақырылуымен байланысты қателер өте жиі болады, сондықтан бұл функциядан шығудың соңы әлі емес және компьютер «тұрып» қалады. Егер жағдай болмаса Matlab жүйесіндегі ақырлы санды шектеулердің рекурсивті шақырылуы сол жүйенің өзінде барлық М-функциялар толық басқарылады. Бір жағынан дұрыс, ал бір жағынан олардың рөлін шектейтін рекурсивті функцияладың орындалу процесінде кедергіні білдіреді.
Matlab пакеті көлеміндегі рекурсивті функциялар мүмкін болады және оны біз қарастырылған оңды бүтін санды факториалды есептеу мысалында толыққанды кезінде қарастырамыз. Соңында рекурсивті анықтауға бірлікте аз мөлшерде берілген санның туындысы факториал санына анықтау болады. М-функция рекурсивті түрінде М-тілінде рекурентті түрде факториалды анықтаудың реализациясы:
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 кілтті сөзі ретінде белгілеу керек. Бұндай кілт сөзін белгілейтін ұяшықтар массиві, яғни онда сол параметрлер жабдықталған. 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);
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 2nd parameters’)
end
end
end
%---calculations------------------------------
A=X1.*X2*x;
B=X1.*X2+x;
Енді MatrProg1 функциясын шақыру кезінде қате бірінші және екінші өлшемді аргументтері Matlab жүйесіндегі error стандартты функциясы барлық жұмысты тоқтатып және Matlab жүйесіндегі командалық терезеге біздің диагностикалық хабарламаны шақырады.
Үшінші параметрді скалярлыққа тексеріп келесі фрагмент кодын орындау керек:
[m, n]=size(x);
if (m ~=1 | n ~=1)
error(‘3-d parameter must be scalar’)
end
Ұсынылатын әдебиет:
1.Статистический анализ данных в пакете Mathcad Радченко Т.А., Дылевский А.В, Воронеж, 2004
Достарыңызбен бөлісу: |