Одним из основных требований при построении оценок является получение оценок с минимальной дисперсией или минимальным рассеянием (если они существуют). В связи с этим в математической статистике введено понятие эффективных оценок ,

Применительно к смещенным оценкам параметра сигнала оценка называется эффективной, если среднее значение квадрата отклонения оценки от истинного значения оцениваемого параметра I не превышает среднее значение квадрата отклонения любой другой оценки у, т. е. выполняется неравенство

Для несмещенной оценки рассеяние оценки совпадает с ее дисперсией следовательно, эффективная несмещенная оценка определяется как оценка с минимальной дисперсией.

С. Рао и Крамер независимо друг от друга получили выражения для нижних границ условных дисперсий и рассеяний оценок, которые являются дисперсиями и рассеяниями эффективных оценок при условии, что таковые существуют для данных параметров.

Приведем вывод этого выражения, полагая, что необходимые допущения справедливы.

Оценку параметра у представим в сокращенной записи где X - многомерная выборка из реализации на интервале времени

Усредним выражение

по всевозможным значениям многомерной выборки X, которая описывается условной плотностью вероятности Учитывая известное соотношение для производной натурального логарифма после усреднения получаем

В силу свойства нормировки плотности вероятности последнее слагаемое в (1.3.3) равно нулю. Интеграл от первого слагаемого представляет среднее значение оценки

С учетом последнего усредненное значение можно записать в виде

Левая часть этого выражения представляет собой среднее значение произведения двух случайных величин с конечными значениями первых двух моментов. При этих условиях для случайных величин справедливо известное из математической статистики неравенство Буняковского - Шварца

которое переходит в равенство, если случайные величины связаны детерминированной зависимостью . С учетом (1.3.6) из выражения (1.3.5) можно получить

Для несмещенных оценок и оценок с постоянным смещением дисперсия оценки удовлетворяет неравенству Рао-Крамера

Необходимо отметить, что во всех соотношениях усреднение производится по многомерной выборке наблюдаемых данных X (при непрерывной обработке - по всевозможным реализациям а

произшодные берутся в точке истинного значения оцениваемого параметра.

Знак равенства в выражениях (1,3.7) и (1-3.8) достигается только для эффективных оценок.

Применительно к выражению (1.3.7) рассмотрим условия, при которых неравенство обращается в равенство, т. е. оценка параметра является эффективной смещенной оценкойю Согласно (1.3.6) для этого необходимо, чтобы коэффициент взаимной корреляции между был равен единице, т. е. чтобы эти случайные функции были связаны детерминированной линейной зависимостью.

Действительно, представим производную логарифма функции правдоподобия в виде

где функция, которая не зависит от оценки у и выборки наблюдаемых данных, но может зависеть от оцениваемого параметра При подстановке (1.3.5) и (1.3.9) в неравенство (1.3.7) оно переходит в равенство. Однако представление производной логарифма функции правдоподобия в виде (1.3.9) возможно, если для оценки у выполняется условие достаточности (1.2.9), из которого следует, что

и, следовательно, если производная логарифма отношения правдоподобия линейно зависит от достаточной оценки, то коэффициент пропорциональности не зависит от выборки

Таким образом, для существования смещенной эффективной оценки необходимо выполнение двух условий: оценка должна быть достаточной (1.2.9) и должно выполняться соотношение (1.3.9). Аналогичные ограничения налагаются на существование эффективных несмещенных оценок, при которых в выражении (1.3.8) знак неравенства переходит в равенство.

Полученное выше выражение для нижней границы дисперсии смещенной оценки справедливо и для нижней границы рассеяния смещенной оценки, так как т. е.

Последнее неравенство переходит в равенство, если кроме условия достаточности оценки справедливо соотношение

где имеет тот же смысл, что и в выражении (1.3.9).

Формула (1.3.10) выводится аналогично (1.3.7), если в исходном выражении (1.3.2) вместо рассматривать

Из характера условий (1.2.9) и (1.3.9) видно, что эффективные оценки существуют только в весьма специфических случаях. Также следует отметить, что эффективная оценка обязательно принадлежит к классу достаточных оценок, в то время как достаточная оценка не обязательно будет эффективной.

Анализ выражения для дисперсии эффективной смешенной оценки 1.3.7) показывает, что могут существовать смещенные оценки, которые обеспечивают меньшую дисперсию оценки, чем несмещенные. Для этого необходимо, чтобы производная от смещения имела отрицательное значение и по абсолютной величине в точке истинного значения параметра была близка к единице.

Поскольку в большинстве случаев интерес представляет средний квадрат результирующей ошибки оценки (рассеяние), имеет смысл говорить и о среднем квадрате ошибки оценки, который для любой оценки ограничен снизу:

При этом для эффективных оценок имеет место знак равенства.

Нетрудно показать, что соотношения (1.3.10) и (1.3.12) совпадают, если выполняются соответственно условия (1.3.11) и (1.3.9). Действительно, подставив в числитель и знаменатель (1.3.10) значения, выраженные через функции получим (1.3.12).

Используя рассмотренные выше свойства эффективных оценок уточним их определение. Будем называть оценку у эффективной, если для нее либо выполняются условия (1.2.9) и (1.3.11), либо при заданном смещении она обладает дисперсией

или рассеянием

либо при нулевом смещении эта оценка имеет дисперсию

Отметим, что характеристики эффективной оценки (1.3.13) - (1.3.15) могут быть вычислены и для тех параметров, для которых эффективной оценки не существует. В этом случае величины (1.3.13) -(1.3.15) определяют нижнюю границу (недостижимую) для соответствующих характеристик оценки.

Для сравнения реальных оценок с эффективными в математической статистике введено понятие относительной эффективности оценок, представляющее отношение среднего квадрата отклонения эффективной оценки относительно истинного значения параметра к среднему квадрату отклонения реальной оценки относительно истинного значения параметра:

Здесь у - реальная оценка, эффективность которой равна эффективная оценка.

Из определения дисперсии эффективной оценки (1.3.1) видно, что относительная эффективность оценки изменяется в пределах

Кроме понятия эффективных оценок существует понятие асимптотически эффективных оценок. При этом предполагается, что для достаточно большого времени наблюдения или неограниченного увеличения отношения сигнал/помеха предельное значение относительной эффективности реальной оценки равно единице. Это означает, что при асимптотически эффективной оценке дисперсия оценки для заданного смещения определяется выражением (1.3.13), а при отсутствии смещения - выражением (1.3.15).

Несмещенная статистическая оценка, дисперсия которой совпадает с нижней гранью в неравенстве Крамера-Рао .

Определение

Оценка \widehat{\theta_1} \in \Kappa параметра \theta называется эффективной оценкой в классе \Kappa , если для любой другой оценки \widehat{\theta_2} \in \Kappa выполняется неравенство M_{\theta}(\widehat{\theta_1}-\theta)^2\leqslant M_{\theta}(\widehat{\theta_2}-\theta)^2 для любого \theta.

Особую роль в математической статистике играют несмещенные оценки . Если несмещенная оценка \widehat{\theta_1} является эффективной оценкой в классе несмещенных, то такую статистику принято называть просто эффективной .

Единственность

Эффективная оценка \widehat{\theta} в классе \Kappa_b = \{ E(\widehat{\theta}) = c(\theta)\}, где c(\theta) - некоторая функция, существует и единственна с точностью до значений на множестве A, вероятность попасть в которое равна нулю (P(x \in A)=0).

Асимптотическая эффективность

Некоторые оценки могут быть не самыми эффективными на малых выборках, однако могут обладать преимуществами на больших выборках. Обычно рассматриваются состоятельные оценки, дисперсия которых с увеличением объема выборки стремится к нулю. Поэтому сравнить такие оценки можно по скорости сходимости, то есть фактически по дисперсии (ковариационной матрицы) случайной величины (вектора) \sqrt{n}\hat{\theta}. В частности, асимптотически нормальная оценка

\sqrt{n}(\hat{\theta}-\theta)\xrightarrow d N(0,V)

является асимптотически эффективной, если асимптотическая ковариационная матрица V минимальна в данном классе оценок.

См. также

Напишите отзыв о статье "Эффективная оценка"

Отрывок, характеризующий Эффективная оценка

– Очень рад встретить вас здесь, граф, – сказал он ему громко и не стесняясь присутствием посторонних, с особенной решительностью и торжественностью. – Накануне дня, в который бог знает кому из нас суждено остаться в живых, я рад случаю сказать вам, что я жалею о тех недоразумениях, которые были между нами, и желал бы, чтобы вы не имели против меня ничего. Прошу вас простить меня.
Пьер, улыбаясь, глядел на Долохова, не зная, что сказать ему. Долохов со слезами, выступившими ему на глаза, обнял и поцеловал Пьера.
Борис что то сказал своему генералу, и граф Бенигсен обратился к Пьеру и предложил ехать с собою вместе по линии.
– Вам это будет интересно, – сказал он.
– Да, очень интересно, – сказал Пьер.
Через полчаса Кутузов уехал в Татаринову, и Бенигсен со свитой, в числе которой был и Пьер, поехал по линии.

Бенигсен от Горок спустился по большой дороге к мосту, на который Пьеру указывал офицер с кургана как на центр позиции и у которого на берегу лежали ряды скошенной, пахнувшей сеном травы. Через мост они проехали в село Бородино, оттуда повернули влево и мимо огромного количества войск и пушек выехали к высокому кургану, на котором копали землю ополченцы. Это был редут, еще не имевший названия, потом получивший название редута Раевского, или курганной батареи.
Пьер не обратил особенного внимания на этот редут. Он не знал, что это место будет для него памятнее всех мест Бородинского поля. Потом они поехали через овраг к Семеновскому, в котором солдаты растаскивали последние бревна изб и овинов. Потом под гору и на гору они проехали вперед через поломанную, выбитую, как градом, рожь, по вновь проложенной артиллерией по колчам пашни дороге на флеши [род укрепления. (Примеч. Л.Н. Толстого.) ], тоже тогда еще копаемые.

Определение

Оценка параметра называется эффективной оценкой в классе , если для любой другой оценки выполняется неравенство для любого .


Wikimedia Foundation . 2010 .

  • Олаф I Трюггвасон
  • Кровь и шоколад

Смотреть что такое "Эффективная оценка" в других словарях:

    эффективная оценка - — [Л.Г.Суменко. Англо русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.] Тематики информационные технологии в целом EN efficient estimator … Справочник технического переводчика

    эффективная оценка - efektyvusis įvertis statusas T sritis automatika atitikmenys: angl. efficient estimate; efficient estimator vok. effiziente Schätzung, f rus. эффективная оценка, f pranc. estimation effective, f … Automatikos terminų žodynas

    Эффективная оценка - 2.22. Эффективная оценка Источник: ГОСТ 15895 77: Статистические методы управления качеством продукции. Термины и определения … Словарь-справочник терминов нормативно-технической документации

    ЭФФЕКТИВНАЯ ОЦЕНКА - несмещенная статистическая оценка, дисперсия к рой совпадает с нижней гранью в Рао Крамера неравенстве. Э. о. является достаточной статистикой для оцениваемого параметра. Если Э. о. существует, то ее можно получить с помощью метода максимального… … Математическая энциклопедия

    АСИМПТОТИЧЕСКИ ЭФФЕКТИВНАЯ ОЦЕНКА - понятие, расширяющее идею эффективной оценки на случай больших выборок. Однозначного определения А. э. о. не имеет. Напр., в классич. варианте речь идет об асимптотич. эффективности оценки в подходящим образом выделенном классе оценок. Именно,… … Математическая энциклопедия

    ОЦЕНКА ЭФФЕКТИВНАЯ - оценка с минимальной для данного объема выборки дисперсией. О., обладающая аналогичным свойством при неограниченно возрастающем объеме выборки, называется асимптотически эффективной. Свойство эффективности должно учитываться в геологии в… … Геологическая энциклопедия

    ЭФФЕКТИВНАЯ ТЕМПЕРАТУРА - з в е з д ы (T э) параметр, характеризующий светимость звезды, т. е. полное кол во энергии, излучаемое звездой в единицу времени. Э. т. связана со светимостью L и радиусом звезды R соотношением L =4pR2sT4 э, где 4pR2 площадь поверхности звезды. Т … Физическая энциклопедия

    ОЦЕНКА СТАТИСТИЧЕСКАЯ - функция от случайных величин, применяемая для оценки неизвестных параметров теоретич. распределения вероятностей. Методы теории О. с. служат основой современной теории ошибок; обычно в качестве неизвестных параметров выступают измеряемые физич.… … Математическая энциклопедия

    Эффективная площадь рассеяния - Пример диаграммы моностатической ЭПР (B 26 Инвэйдер) Эффективная площадь рассеяния (ЭПР; англ. Radar Cross Section, RCS; в некоторых источниках эффективная поверхность рассеяния, эффективный поперечник рассеяния, эффективная по … Википедия

    ОЦЕНКА ЭФФЕКТИВНАЯ - СТАТИСТИЧЕСКОЕ ОЦЕНИВАНИЕ … Социология: Энциклопедия

Книги

  • Оценка конкурентоспособности региональных инновационных продуктов на основе метода анализа иерархий , Р. Р. Харисова. Эффективная деятельность предприятия во многом зависит от того, насколько она адаптирована к внешней среде и в какой мере готова к нововведениям. В настоящее времябольшинством… Купить за 152 руб электронная книга
  • 3000 примеров по русскому языку. Все правила орфографии. 1 класс. Как научиться быстро писать. Самая эффективная оценка знаний. Автоматизированность навыка , Узорова О., Нефедова Е.. В этом учебном пособии 3000 упражнений и заданий на повторение и закрепление всех тем, которые предусмотрены действующей программой по русскому языку для 1-го класса. Задания помогут…

1. ЭЛЕМЕНТЫ М-ЯЗЫКА MATLAB

Элементами в М-языке, применяемом для управления вычислительным процессом в MATLAB, служат константы, переменные, функции, команды и управляющие конструкции. Эти элементы, возможно, в различных соединениях с помощью специальных соединительных элементов, используются как в командной строке, так и в программах.

1.1. КОНСТАНТЫ В MATLAB

Константа в MATLAB представляет собой информацию, не изменяющуюся в течение всего сеанса связи. Константы бывают пользовательскими (определяемыми пользователем) и системными (определяемыми системой). Пользовательские константы задаются пользователем и используются однократно – в момент их упоминания в исполняемой командной строке. Например, 16, -38.654, -1.е-23, 1+2i, "This is a symbol constant".

Системные константы постоянно определены в системе и имеют специальные обозначения, по которым на них ссылаются, например, pi (=3.1416), eps (=2.2204e-016), realmin (=2.2251e-308), realmax (=1.7977e+308), i, j (jºi).

1.2. ПЕРЕМЕННЫЕ В MATLAB

Переменная в MATLAB определяется идентификатором, типом, местом в памяти компьютера. Для определения переменной в MATLAB необходимо выбрать идентификатор (имя) переменной (начинается с латинской буквы, далее – лат.буквы, цифры, спец.знаки) и использовать эту переменную в операторе командной строки, задающем значение переменной (простое присваивание, ссылка на некот.функции и др.).

  1. Числовые переменные: обычные (вещественные) или комплексные числа, векторы, матрицы и многомерные массивы. Под вещественное число отводится 8 байт, под комплексное – 16. Целые и вещественные числа не различаются.

А) вещественные числа

A=2 A=2.0 B=-143.298 C=1.23e-2

B) комплексные числа

Q=1+3i r=-4.6-7.45i S=2+5j

real(Q) – веществ.часть компл.числа,

imag(Q) – мнимая часть компл.числа,

abs(Q) – абс.величина компл.числа,

conj(Q) – сопряженное компл.число,

angle(Q) – значение фазы (угла) компл.числа в радианах.

C) векторы

векторы-строки

a=1:3:10 b= c=linspace(13,53,5)

векторы-столбцы

aa=a’ bb= cc= linspace(13,53,5)’ dd=(15:45)’

для векторов с комплексными компонентами: если y – компл.вектор, то y.’ – это вектор-столбец с теми же компонентами, а y’ – это вектор-столбец с компонентами – сопряженными компл.числами.

D) матрицы: M(i,j) – элемент i – й строки и j – го столбца; M(k) – k-й элемент матрицы, вытянутой в столбец.

A= ---à 1 2

A(2,2) (=4) A(3) (=2) -à A = (1 3 2 4)

A(3,4)=10 ---à 1 2 0 0

size(A) (=) =size(A) (m=3, n=4)

A=A(:) -à вытянуть в столбец – матрица становится вектором!

reshape(A,3,4) -à превращает вектор снова в матрицу 3х4

A(,:)= -à убирает из матрицы 1-ю и последнюю строки

A(:,)= à убирает все столбцы кроме последнего

Некоторые специальные матрицы:

eye(m,n) - единицы на главной диагонали, остальные – нули (eye(m) – квадратная единичная матрица mxm)

ones(m,n) – матрица из единиц

zeros(m,n) – матрица из нулей

rand(m,n) – матрица mxn заполненная случайными числами от 0 до1

C=round(1+100*rand(10,10)) – матрица 10х10, заполненная целыми случайными числами от 1 до 100.

Простые операции с матрицами:

diag(A) – вектор из элементов, стоящих на главной диагонали матрицы А,

diag(diag(А)) – квадратная диагональная матрица с диаг.элементами, как у А, и нулями.

triu(A) tril(A) – матрица с верхней (upper) или нижней (lower) частями из А, дополненные нулями.

  1. Символьные переменные

cvb=’Moscow is the Capital of Russia’

Строка символов ограничивается одинарными апострофами (на клавише с русской буквой «э») и выделяется цветом.

Каждый символ занимает 2 байта и рассматривается как отдельный элемент символьного вектора-строки. Так что, если задать операцию транспонирования cvb’ , то получим вектор-столбец с 31 элементом.

Можно переводить символьные переменные в числа и наоборот.

Обычно они используются при выводе результатов, графиков, надписей, сообщений.

Контроль за переменными.

1 способ – в окне Workspace

2 способ – команда who – дает перечень определенных к данному моменту времени переменных.

3 способ - команда whos – дает более полную информацию о переменных (Name Size Bytes Class)

Чистка памяти.

clear – полная очистка от всех переменных (или clear variables)

clear var1,var2,… - очистка отдельных переменных var1,var2,….

1.3. ФУНКЦИИ В MATLAB

Функции в MATLAB – это программы, выполняющие некоторые типовые операции с данными. Для выполнения этих операций и получения требуемых результатов достаточно указать имя функции и, возможно, задать некоторые исходные данные. Таким образом, с понятием функции здесь (как и в любом другом языке) связаны 3 понятия: имя функции, набор входных данных (varargin) и набор выходных данных (varargout). Кроме того, определены понятия числа входных параметров (nargin) и числа выходных параметров (nargout).

Функции в MATLAB подразделяются на пользовательские (определенные, разработанные пользователем) и системные (определенные, заданные в системе, не требующие программирования). О том, как создавать пользовательские функции, будет рассказано при рассмотрении вопросов программирования. После создания и отладки пользовательская функция ничем не отличается от системной.

Системные функции подразделяются на встроенные (built-in) и библиотечные. Библиотечные функции хранятся в системе в виде программ на М-языке, записанных в файлы с именем, совпадающим с именем функции, и с расширением *.m. Тексты этих программ доступны для просмотра пользователями (каталог \toolbox\matlab\ в месте установки MATLAB). Например, можно открыть для просмотра m-файл с функцией расчета значения десятичного логарифма (\toolbox\matlab\elfun\log10.m). При выполнении операторы этих программ сначала переводятся в инструкции исполнительной системы компьютера (интерпретируются), а затем – выполняются. Встроенные функции хранятся в системе в откомпилированном виде, не требуют перевода и, благодаря этому, выполняются быстрее библиотечных. В системном каталоге для таких функций хранятся файлы, названные аналогично библиотечным, но содержащие только комментарии по применению функций. Например, можно открыть файл, относящийся к функции расчета экспоненты (\toolbox\matlab\elfun\exp.m).

1.4. ВЫРАЖЕНИЯ В MATLAB

Выражение – это языковая конструкция, включающая элементы языка (константы, переменные, функции), связанные друг с другом с помощью соединительных знаков, задающих операции, выполняемые при вычислении значения выражения. Различают численные (Nexpression), символьные (Cexpression) и логические (Lexpression) выражения в зависимости от результата, получающегося после выполнения операций, входящих в выражение.

3.3. Выполнение М-функций. Списки аргументов. Типы аргументов. Типы данных

M-функцию можно вызвать из командной строки системы MATLAB или из других M-файлов, обязательно указав все необходимые атрибуты - входные аргументы в круглых скобках, выходные аргументы в квадратных скобках.

Назначение имени. Когда появляется новое имя, система MATLAB проверяет:

  1. Не является ли новое имя именем переменной.
  2. Не является ли это имя именем подфункции, то есть функции, которая размещена в этом же M-файле и является вызываемой.
  3. Не является ли оно именем частной функции, размещаемой в каталоге private. Этот каталог доступен только M-файлам, размещенным на один уровень выше.
  4. Не является ли оно именем функции в пути доступа системы MATLAB. В этом случае система использует тот М-файл, который встречается первым в пути доступа.

В случае дублирования имен система MATLAB использует первое имя в соответствии с вышеприведенной 4-уровневой иерархией. Следует отметить, что в системе MATLAB 5 допускается переопределять функцию по правилам объектно-ориентированного программирования.

Вызов функции . При вызове М-функции, система MATLAB транслирует функцию в псевдокод и загружает в память. Это позволяет избежать повторного синтаксического анализа. Псевдокод остаётся в памяти до тех пор пока не будет использована команда clear или завершен сеанс работы.

Допустимы следующие модификации команды clear:

Эта команда выполняет синтаксический анализ М-файла average.m и сохраняет результирующий псевдокод в файле с именем average.p. Это позволяет избежать повторного разбора во время нового сеанса работы. Поскольку синтаксический анализ выполняется очень быстро, применение команды pcode почти не влияет на скорость ее исполнения.
Применение P-кода целесообразно в двух случаях:

  • когда требуется выполнять синтаксический анализ большого числа M-файлов, необходимых для визуализации графических объектов в приложениях, связанных с разработкой графического интерфейса пользователя; в этом случае применение P-кода обеспечивает существенное ускорение;
  • когда пользователь хочет скрыть алгоритмы, реализованные в М-файле.

Правила передачи аргументов . С точки зрения программиста, система MATLAB передает аргумент его значением. На самом деле значением передаются только те аргументы, которые изменяются при работе этой функции. Если функция не изменяет значения аргумента, a только использует его для вычислений, то аргумент передается ссылкой, что позволяет оптимизировать использование памяти.

Рабочие области функции. Каждой M-функции выделяется доплнительная область памяти, не пересекающаяся с рабочей областью системы MATLAB. Такая область называется рабочей областью функции. Каждая функция имеет свою собственную рабочую область.

При работе с системой MATLAB можно получить доступ только к переменным, размещенным в рабочей области системы или в рабочей области функции. Если переменная объявлена глобальной, то ее можно рассматривать как бы принадлежащей нескольким рабочим областям.

Проверка количества аргументов. Функции nargin и nargout позволяют определить количество входных и выходных аргументов вызываемой функции. Эту информацию в дальнейшем можно использовать в операторах условия для изменения хода вычислений.

Пример:

function c = testarg1(a,b)
if(nargin == 1)
c = a.^2;
elseif (nargin == 2)
c = + b;
end

При задании единственного входного аргумента функция вычисляет квадрат входной переменной; при задании двух аргументов выполняется операция сложения.

Рассмотрим более сложный пример - выделение части символьной строки до разделителя, в качестве которого можно использовать пробел или любой другой символ. При задании одного входного аргумента функция должна выделить часть строки до разделителя, в качестве которого по умолчанию используется пробел; причем все пробелы в начале строки удаляются. При задании двух аргументов в качестве второго аргумента должен быть указан символ разделителя.

Эта функция оформлена в виде М-функции strtok, которая находится в каталоге strfun.

Функция должна иметь хотя бы один входной аргумент

Если входной аргумент один, то в качестве разделителя используется пробел.

Определить начало выделяемой подстроки

Определить конец выделяемой подстроки

Выделение остатка строки

Заметим, что порядок следования аргументов в выходном списке имеет важное значение. Если при обращении к М-функции выходной аргумент не указан, по умолчанию выводится первый аргумент. Для формирования и вывода последующих аргументов требуется организовать соответствующее обращение к М-функции.

Списки аргументов.

Функции varargin и varargout позволяют передавать произвольное количество входных и выходных аргументов. Система MATLAB упаковывает все заданные входные и выходные аргументы в массив ячеек. Каждая ячейка может содержать любой тип и любое количество данных.

Пример
Функция testvar допускает в качестве входных аргументов любое количество векторов из двух элементов и выводит на экран линии, их соединяющие.

function testvar(varargin)

for i = 1:length(varargin)
x(i) = varargin{i}(1);
y(i) = varargin{i}(2);
end

xmin = min(0, min(x));
ymin = min(0, min(y));
axis()
plot(x,y)

Таким образом, функция testvar может работать с входными списками разной длины.

Пример:

testvar(, , , , , )
testvar([-1 0], , , )

Формирование входного массива varargin. Поскольку список varargin хранит входные аргументы в массиве ячеек, то необходимо использовать индексы ячеек для извлечения данных. Индекс ячейки состоит из двух компонентов:
- индекс в фигурных скобках;
- индекс в круглых скобках.

Пример:

y(i)= varargin{i}(2);
Здесь индекс в фигурных скобках {i} указывает адрес i-ой ячейки массива varargin, а индекс в круглых скобках (2) указывает на второй элемент в ячейке.

Формирование выходного массива varargout . При произвольном количестве выходных аргументов их необходимо упаковать в массив ячеек varargout. Чтобы определить количество выходных аргументов функции, надо использовать функцию nargout.

Пример
Следующая функция использует в качестве входа массив из двух столбцов, где первый столбец - множество значений координаты x, а второй - множество значений координаты y. Функция разбивает массив на отдельные векторы, которые могут быть переданы в функцию testvar в качестве входов.

function = testvar2(arrayin)
for i = 1:nargout
varargout{i} = arrayin(i, :);
end

Оператор присваивания в цикле for использует синтаксис присваивания массивов ячеек. Левая часть оператора присваивания использует фигурные скобки, чтобы указать, что данные в виде строки массива присваиваются ячейке.

Для вызова функции testvar2 можно использовать следующие операторы:

a = ";
= testvar2(a)

p1 = 16
p2 = 2 7
p3 = 3 8
p4 = 4 9
p5 = 5 0

Использование массивов ячеек в списках аргументов . Аргументы varargin и varargout должны быть последними в соответствующих списках аргументов. При вызове функции аргументы, предшествующие varargout, должны быть вычислены внутри функции.

Пример
Приведенные ниже заголовки функций показывают правильное использование списков varargin и varargout:

function = example1(a,b,varargin)
function = example2(x1,y1,x2,y2,flag)

Типы переменных.

Локальные и глобальные переменные . Использование переменных в M-файле ничем не отличаетсч от использования переменных в командной строке, а именно:

  • переменные не требуют объявления; прежде чем переменной присвоить значение, необходимо убедиться, что всем переменным в правой части значения присвоены;
  • любая операция присваивания создает переменную, если это необходимо, или изменяет значение существующей переменной;
  • имена переменных начинаются с буквы, за которой следует любое количество букв, цифр и подчеркиваний; система MATLAB различает символы верхнего и нижнего регистров;
  • имя переменной не должно превышать 31 символа. Более точно, имя может быть и длиннее, но система MATLAB принимает во внимание только первые 31 символ.

Обычно каждая М-функция, задаваемая в виде M-файла, имеет собственные локальные переменные, которые отличны от переменных других функций и переменных рабочей области. Однако, если несколько функций и рабочая область объявляют некоторую переменную глобальной, то все они используют единственную копию этой переменной. Любое присваивание этой переменной распространяется на все функции, где она объявлена глобальной.

Пример .
Допустим, требуется исследовать влияние коэффициентов a и b для модели хищник-жертва, описываемой уравнениями Лотке-Вольтерра:

Создадим M-файл lotka.m:

function yp = lotka(t, y)
%LOTKA уравнения Лотке-Вольтерра для модели хищник-жертва

global ALPHA BETA
yp = ;

Затем через командную строку введем операторы:

global ALPHA BETA
ALPHA = 0.01;
BETA = 0.02;
= ode23("lotka2",,);
plot(t,y)

Команда global объявляет переменные ALPHA и BETA глобальными и следовательно, доступными в функции lotka.m. Таким образом, они могут быть изменены из командной строки, а новые решения будут получены без редактирования М-файла lotka.m.

Для работы с глобальными переменными необходимо:

  • объявить переменную как глобальную в каждой М-функции, которая необходима эта переменная. Для того чтобы переменная рабочей области была глобальной, необходимо объявить ее как глобальную из командной строки;
  • в каждой функции использовать команду global перед первым появлением переменной; рекомендуется указывать команду global в начале M-файла.

Имена глобальных переменных обычно более длинные и более содержательные, чем имена локальных переменных, и часто используют заглавные буквы. Это необязательно, но рекомендуется, чтобы обеспечить удобочитаемость кода языка MATLAB и уменьшить вероятность случайного переопределения глобальной переменной.

Специальные переменные. Некоторые М-функции возвращают специальные переменные, которые играют важную роль при работе в среде системы MATLAB:

ans Последний результат; если выходная переменная не указана, то MATLAB использует переменную ans.
eps Точность вычислений с плавающей точкой; определяется длиной мантиссы и для PC eps = 2.220446049250313e-016
realmax Максимальное число с плавающей точкой, представимое в компьютере; для PC realmax = 1.797693134862316e+308.
realmin Минимальное число с плавающей точкой, представимое в компьютере; для PC realmin = 2.225073858507202e-308.
pi Специальная переменная для числа p: pi=3.141592653589793e+000.
i, j Специальные переменные для обозначения мнимой единицы
inf Специальная переменная для обозначения символа бесконечности?
NaN Специальная переменная для обозначения неопределенного значения - результата операций типа: 0/0, inf/inf.
computer Специальная переменная для обозначения типа используемого компьютера; для PC - PCWIN.
flops Специальная переменная для обозначения количества операций с плавающей точкой.
version Специальная переменная для хранения номера используемой версии системы MATLAB.

Соответсвущие М-функции, генерирующие эти специальные переменные, находятся в каталоге elmat и поддержаны online-подсказкой.

Типы данных.

В системе MATLAB определено шесть базовых типов данных, каждый из которых является многомерным массивом. Шесть классов - это double, char, sparse, uint8, cell, и struct. Двумерные версии этих массивов называются матрицами, откуда MATLAB и получил свое имя МАТричная ЛАБоратория.

Диаграмма принадлежности того или иного объекта системы MATLAB к одному из классов имеет следующий вид (рис. 3.1):

Вероятно, что чаще всего вам придется иметь дело только с двумя из этих типов данных: массив чисел удвоенной точности (double) и массив символов (char), или просто строка. Это связано с тем, что все вычисления в системе MATLAB выполняются с удвоенной точностью и большинство функций работают с массивами чисел удвоенной точности или строками.

Другие типы данных предназначены для таких специальных приложений, как работа с разреженными матрицами (sparse), обработка изображений (uint8), работа с массивами большой размерности (cell и struct).

Нельзя задать тип переменной numeric или array. Эти типы называются виртуальными и служат только для того, чтобы сгруппировать переменные, которые имеют общие атрибуты.

Тип uint8 предназначен для эффективного хранения данных в памяти. К данным этого типа можно применять только базовые операции индексации и изменения размеров, но нельзя выполнить никакой математической операции. Для этого такие массивы необходимо преобразовать в тип double.

Создание собственных типов и добавление методов для встроенных типов. Нижеприведенная таблица содержит седьмой тип данных - UserObject. Язык MATLAB позволяет создавать собственные типы данных и работать с ними по аналогии со встроенными типами.

Для встроенных типов данных можно переопределять метод точно также, как это делается для объекта. Например, чтобы задать операцию сортировки для массива типа uint8, необходимо создать метод (sort.m или sort.mex) и поместить его в специальный каталог @uint8.

Следующая таблица описывает типы данных более подробно.

Класс Пример Описание
Double [ 1 2; 3 4]
5 + 6i
Числовой массив удвоенной точности (это наиболее распространенный тип переменной в системе MATLAB
Char "Привет" Массив символов (каждый символ - длиной 16 битов), часто именуется строкой.
Sparse Speye(5) Разреженная матрица удвоенной точности (только двумерная). Разреженная структура применяется для хранения матриц с небольшим количеством ненулевых элементов, что позволяет использовать лишь небольшую часть памяти, требуемой для хранения полной матрицы. Разреженные матрицы требуют применения специальных методов для решения задач.
Cell { 17 "привет" eye (2)} Массив ячеек . Элементы этого массива содержат другие массивы. Массивы ячеек позволяют объединить связанные данные, возможно различных размеров, в единую структуру.
Struct A.day = 12; A.color = "Red"; A.mat = magic(3); Массив записей . Он включает имена полей. Поля сами могут содержать массивы. Подобно массивам ячеек, массивы записей объединяют cвязанные данные и информацию о них.
Uint8 Uint8 (magic (3)) Массив 8-разрядных целых чисел без знаков . Он позволяет хранить целые числа в диапазоне от 0 до 255 в 1/8 части памяти, требуемой для массива удвоенной точности. Никакие математические операции для этих массивов не определены.
UserObject inline("sin(x)") Тип данных, определяемый пользователем.

Описание диаграммы . Соединительные линии на диаграмме (рис. 3.1) определяют принадлежность того или иного типа данных к одному или нескольким классам.

Пример
Матрица типа sparse имеет также типы double и numeric. Операторы
isa(S",sparse")
isa(S",double")
isa(S",numeric")

возвращают значения 1(истина), то есть S - числовая разреженная матрица удвоенной точности.

Обратите внимание, что тип array - массив находится в вершине диаграммы. Это означает, что все данные системы MATLAB являются массивами.

Каждому типу данных можно соотнести свои функции и операторы обработки, или другими словами, методы. Дочерние типы данных, расположенные на диаграмме ниже родительского типа, поддержаны также и методами родителя. Следовательно, массив типа double поддержан методами, применяемыми для типа numeric.

В таблице приведены некоторые из таких методов:

Класс Метод
Массив array Вычисление размера (size), длины (length), размерности (ndims), объединение массивов (), транспонирование (transpose), многомерная индексация (subsindex), переопределение (reshape) и перестановка (permute) размерностей многомерного массива.
Массив ячеек cell Индексация с использованием фигурных скобок {e1,…,en} и разделением элементов списка запятыми.
Строка Char Строковые функции (strcmp, lower), автоматическое преобразование к типу double для применения методов класса double.
Double Арифметические и логические операции, математические функции, функции от матриц.
Numeric Поиск (find), обработка комплексных чисел (real, imag), формирование векторов, выделение строк, столбцов, подблоков массива, расширение скаляра.
Sparse Операции над разреженными матрицами.
Массив записей Struct Доступ к содержимому поля.field (разделитель элементов списка - запятая).
Uint8 Операция хранения (чаще всего используется с ППП Image Processing Toolbox)
UserObject Определяется пользователем

Пустые массивы. Ранние версии системы MATLAB допускали единственную форму пустого массива размера 0х0, обозначаемого как . MATLAB 5 поддерживает массивы, у которых одна, но не все из размерностей, равна нулю, то есть массивы с размерами 1х0, 10х0х20 или определяются как пустые.

Квадратные скобки продолжают обозначать массив 0х0. Пустые массивы другого размера могут быть созданы с помощью функций zeros, ones, rand или eye. Например, для формирования пустого массива размера 0х5, можно использовать опертор присваивания
E = zeros(0,5).

Основное назначение пустых массивов состаит в том, чтобы любая операция, которая определена для массива(матрицы) размера m?n, определяла правильный результат для случая, когда m или n равно нулю. Размер массива(матрицы) результата должен соответствовать значению функции, вычисленной в нуле.

Например, оператор
C =
требует, чтобы массивы A и B имели одинаковое число строк. Таким образом, если массив A имеет размер m x n, а B - m x p, то C есть массив размера m x (n+p). Результат будет правильным, если любой из параметров m, n или p равен нулю.

Многие операции в системе MATLAB создают вектор-строку или вектор-столбец. В этом случае результат может быть, либо пустой вектор-строкой
r = zeros(1, 0),
либо пустым вектор-столбцом
C = zeros(0, 1).

MATLAB 5 поддерживает правила системы MATLAB 4 для операторов if и while. Например, условный оператор типа
if A, S1, else, S0, end
выполняет оператор S0, когда A - пустой массив.

Некоторые функции системы MATLAB такие, как sum, prod, min и max понижают размерность результата: если аргумент массив, то результат - вектор; если аргумент вектор, то результат - скаляр.

Для этих функций при пустом массиве входа получаются следующие результаты:
sum() = 0 ;
prod() = 1 ;
max() = ;
min() = .