Приложение
Поддержка
средств Java в MATLAB 6
Язык программирования
Java обычно непосредственно не используется для поддержки математических вычислений
в системе MATLAB. Однако этот перспективный язык высокого уровня входит в состав
ядра системы и широко применяется для создания средств интерфейса и средств
Интернета. Поэтому в новых версиях MATLAB 6.0/6.1 существенно расширена поддержка
средств языка Java, который приобрел важное значение для решения задач в области
создания электронных и Интернет-документов.
Фактически
Java интегрирован в MATLAB и используется для построения его графического интерфейса
и справочной системы (наряду с HTML). Кроме того, предусмотрены работа с рядом
типов данных, классов и объектов, связанных с Java, и поддержка построенной
на Java виртуальной машины. Основной материал по использованию средств языка
Java имеется в дополнительном руководстве «MATLAB. External Interfaces.
Version 6». Для знакомства с тонкостями программирования на Java рекомендуется
обращаться в Интернет-сайт www.javasoft.com, посвященный этому языку. Уточнить
версию Java, установленную в системе MATLAB, на вашей компьютерной платформе
можно, исполнив команду:
»
version -Java ans
Java
1.1.8 from Sun Microsystems Inc.
Вы можете
создавать объекты Java в MATLAB с использованием имени класса Java:
»
f = java.awt.Frame('My Title')
f
=
Java.
awt. Frame[f rameO. 0,0, 0x0. i nval i d. hi dden. layout=java. awt. Border-Layout.
resizable.title=my
title]
Методы объектов
Java могут быть вызваны как с использованием синтаксиса Java,
так
и с использованием синтаксиса MATLAB:
»
setTitle (f. 'new title' )
» t = getTitle(f)
t
=
new
title
Тот
же пример с использованием синтаксиса Java:
»
f.setTitle ('modify title' )
»
t = f.getTitle
t
=
modify
title
»
whos f
Name
Size Bytes Class
f1x1
Java.awt.Frame
Grand total is 1 elements using 0 bytes
Как видно
из этого сообщения, в MATLAB поддерживаются Java-классы и Java-объекты.
Для более
полного знакомства с возможностями Java в MATLAB можно воспользоваться справочной
системой. Правда, в индексном каталоге поиск разделов по имени «Java»
к успеху не приводит, но в окне расширенного поиска Search можно найти ряд статей
по применению Java.
В окне справки
в разделе Calling Java from MATLAB можно найти целый ряд разделов справки, посвященных
применению этого языка в системе MATLAB (естественно, на английском языке).
Для получения
информации об объектах и методах Java, с которыми может работать MATLAB, нужно
исполнить команду:
»methodsview
Java.awt.Menultem
Данные окна
рис. П2 показывают, что поддержка Java реализована в большом числе объектов
и методов системы MATLAB.
При использовании
объектов Java пользователь должен учитывать многочисленные отличия в свойствах
объектов Java и объектов MATLAB, что ведет к различиям в результатах исполнения
многих функций. Например, вот как работает функция определения длины строки
в MATLAB:
»
s=
'
Hellо my friend!'
s
=
Hello
my friend!
»
size(s)
ans
=
1
16
Результат
означает, что строка s задана как одномерный массив с числом элементов 16. А
вот как та же функция работает со строковым массивом Java:
»
string=java.lang.Sthng( 'Hello my friend!')
string=
Hello
my friend!
»
size(string)
ans =
1 1
Нетрудно заметить,
что отдельные символы в этом случае не рассматриваются как элементы массива,
и строка представлена одномерным массивом единичной длины.
»
C=char(string)
С=
Hello
my friend!
»
[m,n]=size(C)
m
=
1
n
=
16
»
whos С
Name
Size Bytes Class
С
1x16 32 char array Grand total is 16 elements using 32 bytes
Использовав
преобразование объекта класса java.lang.string в массив символов MATLAB, мы
все-таки подсчитали число символов обычными средствами MATLAB. Но в среде MATLAB
мы можем сделать это и средствами Java.
»
string.length
ans
=
16
Или
»
e=java.lang.StringBuffer(string)
e
=
Hello
my friend!
»
e.length
ans
=
16
Следующий
пример показывает создание Java-структуры многоугольника:
»
polygon=java.awt.Polygon([14 42 98 124],[55 12 -2 62].4)
polygon =
java.awt.Pol ygon@94067b
Для выявления
структуры Java объекта может использоваться функция struct (object), которая
преобразует объект в структуру (массив структур) MATLAB с потерей информации
о классе.
Пример: .
»
struct(string)
ans
=
0x0
struct array with fields:» struct(polygon)
ans
=
npoints:
4
xpoints:
[4x1 int32]
ypoints:
[4x1 int32]
Следует отметить,
что указание имени объекта с большой буквы (кстати, как это задано в определении
класса) ведет к ошибке, поскольку сам объект, преобразуемый в структуру, по
правилам MATLAB, где регистр имеет значение, называется
polygon:
»
struct(Polygon)
???
Undefined function or variable 'Polygon'.
Эти примеры,
и их можно привести множество, свидетельствуют о том, что пользователь, рискнувший
применить средства Java в MATLAB на практике, должен хорошо знать как возможности
языка Java, так и особенности среды и языка программирования MATLAB. И быть
готовым к различным сюрпризам.
Для обычных
пользователей системой MATLAB по ее прямому назначению — математические вычисления
— большинство возможностей Java представляет ограниченный интерес. Исключением,
пожалуй, является работа с такими важными объектами Java, как массивы и классы
url. Напомним, что Java-массивы входят в иерархию объектов языка программирования
системы MATLAB.
Массивы в
Java считаются одномерными (подобными векторам-столбцам MAT-LAB). Однако возможно
построение массивов в массивах без ограничения числа уровней вложения. Тем не
менее функция ndims MATLAB, если ее входным аргументом является такой «многомерный»
массив Java, всегда возвращает 2. Форма таких массивов в общем случае не прямоугольная,
т. е. число элементов по рядам и столбцам может различаться. В MATLAB все массивы,
кроме массивов Java, могут быть одномерными, двумерными и многомерными. Нумерация
элементов Java-массивов в обычных системах программирования на Java идет с нуля.
В MATLAB нумерация всех элементов массивов, в том числе и Java-массива (Java-array),
начинается с единицы. (База массива равна единице.) Ниже приведен пример задания
прямоугольного Java-массива в массиве с числами двойной точности с именем dblArray:
dblArray = javaArrayC Java.lang.Double'.3.4);
В следующем
фрагменте программы на языке MATLAB с помощью циклов элементам массива присваиваются
конкретные значения:
for
1=1:3
for
j-l:4 dblArray(i.j) = Java.lang.Double((i*5)+j);
end
end
Теперь
несложно проверить созданный массив:
dblArray
dblArray
=
Java.lang.Double[][]:
|
|
|
|
|
|
[6]
[7]
[11] [12]
[16] [17]
»
dblArray(2.3)
ans =
13.0
|
[
8]
[13]
[18]
|
[9]
[14]
[19]
|
|
|
|
|
|
|
Из этого примера
в целом ясно, что, несмотря на отдельные нюансы, работа с Java-массивами в основном
подобна таковой для MATLAB массивов. При этом система MATLAB поддерживает ряд
типов преобразований массивов и иных данных из форматов, принятых на языке программирования
Java, в форматы MATLAB и наоборот.
|