"Вычисления, визуализация и программирование в среде MATLAB 5.x" - читать интересную книгу автора (Мартынов Н. Н., Иванов А. П.)

┬ ╠- ч√ъх ёшёЄхь√ MATLAB Єрър  тючьюцэюёЄ№ срчшЁєхЄё  эр шёяюы№чютрэшш ьрёёштр  ўххъ. ┬ юяЁхфхыхэшш ╠-ЇєэъЎшш ярЁрьхЄЁ, ўхЁхч ъюЄюЁ√щ яхЁхфрхЄё  чрЁрэхх эхшчтхёЄэюх ўшёыю тїюфэ√ї рЁуєьхэЄют, эєцэю юсючэрўшЄ№ ъы■ўхт√ь ёыютюь varargin. ╥ръшь ъы■ўхт√ь ёыютюь юсючэрўрхЄё  ьрёёшт  ўххъ, т ъюЄюЁ√щ єяръютрэ√ ¤Єш ярЁрьхЄЁ√. ╘єэъЎш  тёхуфр ьюцхЄ єчэрЄ№ шёЄшээюх ўшёыю рЁуєьхэЄют, єяръютрээ√ї т ярЁрьхЄЁх varargin, яЁшьхэшт фы  ¤Єюую ЇєэъЎш■ length.
═шцх яЁхфёЄртыхэ ъюф ЇєэъЎшш, т√ўшёы ■∙хщ ёєььє ътрфЁрЄют фышэ яЁюшчтюы№эюую ъюышўхёЄтр тхъЄюЁ-ёЄЁюъ:
function SumLen = NuraLength( varargin ) n = length( varargin ); SumLen = 0; for k = 1 : n
SumLen = SumLen+varargin{k}(1)A2+varargin{k}(2)A2; end
┼ёыш рЁуєьхэЄ varargin эх хфшэёЄтхээ√щ т ёяшёъх ярЁрьхЄЁют, Єю юэ фюыцхэ ёЄю Є№ яюёыхфэшь. ┬ ЁрёёьюЄЁхээюь яЁшьхЁх ё яюью∙№■ ЇшуєЁэ√ї ёъюсюъ ь√ шчтыхърхь ёюфхЁцшьюх юЄфхы№эющ  ўхщъш, Єю хёЄ№ тхъЄюЁ, р ё яюью∙№■ фры№эхщ°хщ шэфхъёрЎшш ъЁєуы√ьш ёъюсърьш шчтыхърхь яхЁтє■ ш тЄюЁє■ ъююЁфшэрЄ√ тхъЄюЁр.
╧Ёш т√чютх ЇєэъЎшш NumLength эх эєцэю (ш эхы№ч ) єяръют√трЄ№ тїюфэ√х ўшёыют√х тхъЄюЁ-ёЄЁюъш т ьрёёшт  ўххъ, Єръ ъръ MATLAB фхырхЄ ¤Єю ёрь. ─юёЄрЄюўэю яхЁхўшёышЄ№ шї т ърўхёЄтх ЇръЄшўхёъшї ярЁрьхЄЁют ўхЁхч чря Єє■:
NumLength( [12], [34] )
ans =
30
╥хяхЁ№ т√чютхь ЇєэъЎш■ NumLength ё фЁєушь ўшёыюь ярЁрьхЄЁют:
NumLength( [12], [34], [56] )
ans =
91
MATLAB 5.x. ┬√ўшёыхэш , тшчєрышчрЎш , яЁюуЁрььшЁютрэшх 199
╘єэъЎш  ыхуъю юсЁрсрЄ√трхЄ юср ¤Єшї ёыєўр , яЁртшы№эю т√ўшёы   ёєььрЁэє■ фышэє тїюфэ√ї тхъЄюЁют.
┬ юяЁхфхыхэшш ╠-ЇєэъЎшш яхЁхьхээюх ўшёыю тючтЁр∙рхь√ї чэрўхэшщ єяръют√трхЄё  т ьрёёшт  ўххъ, юсючэрўрхь√щ ъы■ўхт√ь ёыютюь 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) т√ўшёы хЄ ЁрчьхЁ ьрёёштр X тфюы№ i-ую эряЁртыхэш  (шчьхЁхэш ). ═шцх яюърчрэ√ фтр яЁшьхЁр шёяюы№чютрэш  ¤Єющ ЇєэъЎшш:
└=[12 3;4 5 6];
[ m, n ] = MyFunc3 ( р );
╟фхё№ ёъры Ё√ Єшя яЁшьєЄ ёююЄтхЄёЄтхээю чэрўхэш  2 ш 3. └ ЄхяхЁ№ ёЇюЁьшЁєхь ЄЁхїьхЁэ√щ ьрёёшт ╤ ш т√чютхь фы  эхую ЇєэъЎш■ MyFunc3:
┬ = [ 4 5 6; 9 8 7]; ╤(:,:,1) = └; ╤(:,:,2) = ┬; [m,n,k]= MyFunc3( ╤ );
╤ъры Ё√ Є, яшъ яЁшьєЄ чэрўхэш  2, 3, 2. ┬ эшї яюьх∙хэ√ ЁрчьхЁ√ ЄЁхїьхЁэюую ьрёёштр ╤ тфюы№ тёхї хую шчьхЁхэшщ. ┼ёыш с√ эрё шэЄхЁхёютрыш ЁрчьхЁ√ ¤Єюую ьрёёштр тфюы№ Єюы№ъю яхЁт√ї фтєї шчьхЁхэшщ, Єю ь√ ьюуыш с√ т√чтрЄ№ ЇєэъЎш■ MyFunc3 т ёыхфє■∙хь ЇюЁьрЄх:
[m,n]= MyFunc3( ╤ );
ъюЄюЁ√щ  ты хЄё  рсёюы■Єэю ъюЁЁхъЄэ√ь ё Єюўъш чЁхэш  ёшэЄръёшёр ╠- ч√ър, эю яЁш ъюЄюЁюь ЄЁхЄ№х т√ЁрсрЄ√трхьюх ЇєэъЎшхщ MyFunc3 т√їюфэюх чэрўхэшх ЄхЁ хЄё .
200
├ыртр 6. ╧ЁюуЁрььшЁютрэшх ЇєэъЎшщ эр ╠- ч√ъх
I I
╩юэЄЁюы№ тїюфэ√ї ярЁрьхЄЁют ш т√їюфэ√ї чэрўхэшщ ╠-Їєэъшшш
═хёютярфхэшх Єшяют ш ўшёыр ЇръЄшўхёъшї (ё ъюЄюЁ√ьш Ёхры№эю т√ч√трхЄё  ЇєэъЎш ) ш ЇюЁьры№э√ї ярЁрьхЄЁют яЁштюфшЄ ъ эхяЁртшы№эющ ЁрсюЄх ╠-ЇєэъЎшщ. ═ю ляюы№чютрЄхы№╗ ╠-ЇєэъЎшш (¤Єю ьюцхЄ с√Є№ ъръ фЁєур  ЇєэъЎш , Єръ ш ўхыютхъ) тёхуфр ьюцхЄ ю°шсшЄ№ё  яЁш хх т√чютх. ╧ю¤Єюьє цхырЄхы№эю тёЄЁрштрЄ№ тэєЄЁ№ ъюфр ╠-ЇєэъЎшщ яЁютхЁъє Єшяр ш ъюышўхёЄтр тїюфэ√ї ярЁрьхЄЁют, р Єръцх ъюышўхёЄтр т√їюфэ√ї чэрўхэшщ, т ъюЄюЁ√х лт√ч√тр■∙р  ёЄюЁюэр╗ я√ЄрхЄё  яюьхёЄшЄ№ Ёхчєы№ЄрЄ√ ЁрсюЄ√ ЇєэъЎшш.
╨рёёьюЄЁшь яЁюсыхьє эр яЁшьхЁх єърчрээющ т√°х ЇєэъЎшш MatrProcl. ▌Єр ЇєэъЎш  яЁхфяюырурыр шёяюы№чютрЄ№ т ърўхёЄтх яхЁтюую ш тЄюЁюую рЁуєьхэЄют ьрёёшт√ юфшэръют√ї ЁрчьхЁют. ┼ёыш яюы№чютрЄхы№ яю ю°шсъх чрфрёЄ ЇръЄшўхёъшх ярЁрьхЄЁ√ т тшфх ьрёёштют Ёрчэ√ї ЁрчьхЁют, Єю т яЁюЎхёёх т√яюыэхэш  ЇєэъЎшш тючэшъэхЄ ю°шсър. ╫Єюс√ шчсхцрЄ№ ¤Єюую, ьюцэю т Єхых ЇєэъЎшш MatrProcl юЁурэшчютрЄ№ яЁютхЁъє ЁрчьхЁют яхЁтюую ш тЄюЁюую ярЁрьхЄЁют:
function [ └, ┬ ] = MatrProcl( XI, ╒2, ї ) nl = ndims(Xl); n2 = ndims(X2);
%Ч parameters control -------------------------------------------
if nl ~= n2
error('Different dimensions') else
for i=l:nl
if size(Xl,i)~=size(X2,i)
error('Different sizes of 1st and 2nd parameters') end
end end
%Ч calculations --------------------------------
A = XI .* X2 * x; ┬ = XI .* X2 + x;
╥хяхЁ№ яЁш т√чютх ЇєэъЎшш MatrProcl ё эхяЁртшы№э√ьш ЁрчьхЁрьш яхЁтюую ш тЄюЁюую рЁуєьхэЄют ёЄрэфрЁЄэр  ЇєэъЎш  ёшёЄхь√ MATLAB error сєфхЄ ъюЁЁхъЄэю юёЄрэртыштрЄ№ тё■ ЁрсюЄє ш т√тюфшЄ№ т ъюьрэфэюх юъэю ёшёЄхь√ MATLAB эр°ш фшруэюёЄшўхёъшх ёююс∙хэш  (рЁуєьхэЄ√ ЇєэъЎшш error), яюёых ўхую яюы№чютрЄхы■ юёЄрэхЄё  ыш°№ яютЄюЁэю т√чтрЄ№ ЇєэъЎш■ MatrProcl, эю єцх ё яЁртшы№э√ьш ярЁрьхЄЁрьш.
─ы  сюы№°хщ эрфхцэюёЄш эєцэю х∙х фюсртшЄ№ яЁютхЁъє ЄЁхЄ№хую ярЁрьхЄЁр эр ёъры ЁэюёЄ№ (т ёшёЄхьх MATLAB ёъры Ё√  ты ■Єё  ьрЄЁшЎрьш 1x1), ўЄю ьюцэю т√яюыэшЄ№ ёыхфє■∙шь ЇЁруьхэЄюь ъюфр:
MATLAB 5.x. ┬√ўшёыхэш , тшчєрышчрЎш , яЁюуЁрььшЁютрэшх 201
[ m ,n ] = size ( x );
if ( m ~= 1 | n ~= 1 )
error('3-d parameter must be scalar') end