48968 (597417), страница 16
Текст из файла (страница 16)
patient(1,1,2).name = 'Al Smith';
patient(1,1,2).billing = 504.70;
patient(1,1,2).test = [80 80 80; 153 153 154; 181 190 182];
patient(1,2,2).name = 'Dora Jones';
patient(1,2,2).billing = 1173.90;
patient(1,2,2).test = [73 73 75; 103 103 102; 201 198 200];
Геометрически данную структуру можно отобразить следующим образом
Применение функций к многомерным массивам структур
Для применения функций к многомерным массивам структур. нужно использовать индекси-рование полей. Например, найдем сумму столбцов структуры test в patient(1,1,2):
sum((patient(1,1,2).test));
Аналогично, просуммируем все поля billing в многомерном массиве patient:
total = sum([patient.billing]);
ПРОГРАММИРОВАНИЕ НА MATLAB-е
Программирование на языке MATLAB : Быстрый старт
М-файлы языка MATLAB могут быть или сценариями (scripts), которые просто выполняют серию операторов (выражений), или же они могут быть функциями (functions), допускающи-ми также входные аргументы и выходные переменные. Вы можете создать М-файлы исполь-зуя текстовой редактор и затем использовать их как любую другую функцию или команду системы MATLAB.
В простейшем случае процесс выглядит так:
-
Вы создаете М-файл используя текстовой редактор.
-
Вызываете М-файл из командной строки или же из другого М-файла.
Схематически это можно отобразить следующим образом:
Типы М-файлов
Как указывалось выше, имеется два типа М-файлов, общие свойства которых приведены в таблице
М-сценарии | М-функции |
|
|
|
|
|
|
Что такое М-файл ?
В данном разделе мы рассмотрим основные части, из которых состоит М-функция. Допус-тим, мы имеем следующую функцию fact, вычисляющую факториал целого числа:
function f = fact (n) % Строка определения функции
% FACT Factorial. % Первая строка помощи (H1 line)
% FACT(N) returns the factorial of N, H! % Текст помощи (Help text)
% usually denoted by N!
% Put simply, FACT(N) is PROD(1:N).
f = prod(1:n); % Тело функции
Эта функция имеет некоторые элементы, которые являются общими для всех функций систе-мы MATLAB:
• Строка определения функции. Эта строка задает имя функции , а также число и порядок входных и выходных аргументов.
• Строка H1 (H1 line). H1 обозначает «первую строку» помощи. MATLAB выводит эту стро-ку в командное окно, когда вы пользуетесь функцией lookfor или запрашиваете помощь по всей директории.
• Текст помощи (Help text). MATLAB выводит в командное окно данный текст вместе со строкой H1, когда вы запрашиваете помощь по конкретной функции, то есть вводите help Имя_Функции.
• Тело функции. Эта часть функции содержит коды (команды), которые выполняют вычисле-ния и определяют значения всех выходных переменных.
Обеспечение помощи для вашей программы
Вы можете снабдить пользователя информацией (помощью) о вашей программе, путем включения раздела текста помощи в начало М-файла. Этот раздел начинается со строки, сле-дующей непосредственно за строкой опеределения функции и заканчивается на первой пус-той строке, или строке тела функции. Каждая строка текста (эти строки окрашены в зеленый цвет) помощи должна начинаться символом процента (%). MATLAB выводит в командное окно данный текст каждый раз когда вы вводите
help Имя_Функции
Вы можете также написать текст помощи для всей директории, путем создания файла со специальным именем Contents.m, который находится в вашей директории. Этот файл долже содержать только строки комментариев, то есть каждая строка должна начинаться со знака процента. MATLAB выводит на дисплей строки файла Contents.m всякий раз, когда вы вводите в командное окно строку
help Имя_Директории
Если данная директория не содержит файл Contents.m, то при вводе help Имя_Директории в командное окно выводится первая строка помощи (H1 line) для каждого файла директории.
Создание М-файлов: Использование текстовых редакторов
М-файлы представляют собой обычные текстовые файлы, которые вы создаете с использо-ванием текстового редактора. MATLAB содержит встроенный редактор, хотя в принципе мо-жно воспользоваться любым другим текстовым редактором.
Внимание! Для вызова редактора нужно в меню File выбрать New и затем M-File.
Другой способ вызова редактира М-файла из командной строки состоит в использовании фу-нкции edit. For example, при вводе
edit foo
MATLAB открывает встроенный текстовой редактор на файле foo.m. Если не указать имени файла, то будет вызван редактор с новым, неозаглавленным файлом. Вы можете создать фун-кцию fact, приведенную выше, путем открытия вашего текстового редактора, ввода показан-ных строк, и запоминанием текста в файле под названием fact.m в вашей текущей директо-рии.
После того как вы создали этот файл, его можно найти в списке файлов вашей текущей директории, для чего надо ввести команду
what
Можно также распечатать в командном окне файл командой
type fact
Наконец, вы можете вычислить факториал любого целого числа, например, 5-и
fact(5)
ans =
120
Внимание! Сохраняйте все созданные или измененные вами М-файлы в директории (ката-логе), который не находится в дереве каталогов MATLAB-а. Если вы сохраните ваши М-файлы в дереве каталогов MATLAB-а, они могут быть уничтожены при установке новой версии MATLAB-а.
Сценарии
Сценарии являются простейшим типом М-файлов, поскольку они не имеют входных или выходных аргументов. Они полезны для автоматизации последовательности команд, таких как обычные вычисления, которые приходится часто выполнять в командном окне. Сценарии работают над существующими данными в рабочем пространстве; вы также можете создавать новые данные при помощи сценариев. Все переменные, созданные в результате выполнения сценариев, остаются в главном рабочем простанстве MATLAB-а, так что вы можете исполь-зовать их для дальнейших вычислений.
Простой пример сценария
Приведенные ниже выражения вычисляют функцию rho для нескольких тригонометричес-ких функций угла theta, и строят серию графиков в полярной системе координат
% An M–file script to produce % Линия комментариев
% "flower petal" plots
theta = –pi:0.01:pi; % Вычисления
rho(1,:) = 2*sin(5*theta).^2;
rho(2,:) = cos(10*theta).^3;
rho(3,:) = sin(theta).^2;
rho(4,:) = 5*cos(3.5*theta).^3;
for i = 1:4
polar(theta,rho(i,:)) % Вывод на графики
pause
end
Попробуйте ввести эти команды в М-файл, названный petals.m. Этот файл является теперь сценарием MATLAB-а. Ввод команды petals (лепестки) в командной строке MATLAB –а приводит к выполнению команд сценария. Команда pause приостанавливает выполнение цикла до нажатия какой-либо клавиши (например, Return). Таким образом, после того как сценарий отображает один график из четырех, нажатие клавиши Return приводит к появле-нию следующего. Здесь мы не имеем входных или выходных переменных; сценарий petals создает требуемые ему переменные в основном рабочем пространстве MATLAB-а. Когда вы-полнение сценария завершено, все созданные переменные (i, theta, и rho) остаются в рабо-чем пространстве. Вы можете убедиться в этом, вводя команду whos в командной строке.
Функции
Функции представляют собой М-файлы, которые принимают входные аргументы и выдают выходные. Они работают над переменными в своем собственном рабочем пространстве, ко-торое не совпадает с основным рабочим пространством, доступном из командной строки MATLAB-а.
Простой пример функции
Функция average является простым М-файлом, который вычисляет среднее значение элемен-тов вектора.
function y = average(x)
% AVERAGE Mean of vector elements.
% AVERAGE(X), where X is a vector, is the mean of vector elements.
% Non-vector input results in an error.
[m,n] = size(x);
if (~((m == 1) | (n == 1)) | (m == 1 & n == 1))
error('Input must be a vector')
end
y = sum(x) / length(x) ; % Фактические вычисления
При вводе не векторной величины, данная функция выдает сообщение об ошибке (более точ-но, на дисплей выводится фраза «Вход должен быть вектором» ). Вы можете ввести эти ко-манды в М-файл, названный average.m. Функция average допускает единственный вход и возвращает единственный выходной аргумент. Для обращения к данной функции, введите
z = 1:99;
average(z)
что даст следующий результат
ans =
50
Основные части синтаксиса М-функций
Функции в общем случае состоят из следующий частей:
-
Строка определения функции (The Function Definition Line)
-
Строка помощи H1 (The H1 Line)
-
Текст помощи (Help Text)
-
Тело функции (The Function Body)
-
Комментарии (Comments)
Строка определения функции
Строка определения функции информирует систему MATLAB , что М-файл содержит функ-цию, и задает последовательность входных и выходных переменных. Для функции average эта строк имеет следующий вид:
где input argument – входной аргумент;
function name – имя функции;
output argument – выходной аргумент;
keyword – зарезервированное слово;
Все функции MATLAB-а имеют линию определения функции, соответствующую данной схеме. Если функции имеют несколько выходных переменных, нужно заключить список этих переменных в квадратные скобки. Входные переменные, даже если их несколько, всегда заключаются в обычные скобки. Вот пример более сложной функции
function [x,y,z] = sphere(theta, phi, rho)
Если функция не имеет выходных переменных, оставьте выход пустым, например,
function printresults(x)
или используйте пустые квадратные скобки
function [ ] = printresults(x)
Переменные, которые вы передаете функции не обязательно должны иметь то же имя, что и в линии определения функции.
Строка помощи H1
Строка H1, названная так потому что она является первой строкой текста помощи (Help text), является линией комментария, которая следует непосредственно за строкой определения фу-нкции. Поскольку она состоит из текста комментария, строка H1начинается с символа про-цента (%). Для функции average эта строка имеет вид
% AVERAGE Mean of vector elements.
(СРЕДНЕЕ ЗНАЧЕНИЕ Вычисление среднего значения векторов)
Эта строка является первой строкой текста, который появляется при вводе пользователем в командной строке команды
help function_name