Реклама:

Java Builder генерирует интерфейс Java (стандартный) для этой функции следующим образом:

public Object[] mysum(int nargout, Object varargin) throws MWException Параметр varargin передаетсят как тип Object. Это позволяет любое число вводов в форме массива Object[]. Содержание этого массива передают к откомпилированной m-функции в порядке, в котором они появляются в массиве. Ниже идет пример того, как можно было бы использовать метод mysum в программе

Java:

public double getsum(double[] vals) {

myclass cls = null; Object[] x = {vals}; Object[] y = null; try

{

cls = new myclass(); y = cls.mysum(1, x);

return ((MWNumericArray)y[0]).getDouble(1);

}

}

В этом примере создается массив Object длины 1 и инициализируется ссылкой на поставляемый массив^к} типа double. Этот параметр передают к методу mysum. Результат, как известно, является скаляром double MATLAB, но возвращается как Object[]. Для получения значения double требуется следующий код: return ((MWNumericArray)y[0]).getDouble(1);

Нужно привести возвращаемое значение y[0] к типу MWNumericArray и вызвать метод getDouble(int), чтобы получить первый элемент в массиве как примитивное значение double.

Передача массива вводов. Следующий пример выполняет более общее вычисление:

public double getsum(Object[] vals) throws MWException

{

myclass cls = null; Object[] x = null; Object[] y = null; try

{

x = new Object[vals.length]; for (int i = 0; i < vals.length;

x[i] = new MWNumericArray(vals[i], MWClassID.DOUBLE); cls = new myclass(); y = cls.mysum(1, x);

return ((MWNumericArray)y[0]).getDouble(1);

}

}

Эта версия getsum берет массив vals типа Object как ввод и преобразовывает каждое значение vals[i] в массив x[i] double MATLAB. Набор массивов MATLAB образует массив типа Object[], который передается к функции mysum, где она вычисляет полную сумму входного массива.

Передача переменного числа выводов. Следующий пример кода показывает, что параметры varargout обрабатываются таким же образом, как и параметры varargin. Рассмотрим следующую m-функцию:

function varargout = randvectors for i=1:nargout

varargout{i} = rand(1, i);

end

Эта функция возвращает набор случайных векторов double такой, что длина i-го вектора равна i. Вызов в MATLAB этой функции следующий: [y1,y2,y3,y4,y5,y6]=randvectors; где слева можно указать любое число параметров вывода.

Компилятор MATLAB создает стандартный интерфейс Java для этой функции:

public Object[] randvectors(int nargout) throws MWException

Таким образом, для обращения к соответствующему методу достаточно указать число n векторов вывода. Тогда результатом будет массив y типа Object[] длины n. Приведем пример использования метода randvectors в программе Java: public double[][] getrandvectors(int n)

{

myclass cls = null; Object[] y = null;

cls = new myclass();

y = cls.randvectors(n);

double[][] ret = new double[y.length][];

for (int i = 0; i < y.length;

ret[i] = (double[])((MWArray)y[i]).getData(); return ret;

}

Метод getrandvectors возвращает двумерный double массив с треугольной структурой. Длина i-ой строки равна i. Такие массивы обычно называются зубчатыми массивами. Зубчатые массивы легко поддерживаются в Java, потому что многомерный массив Java - это массив массивов.


⇐ Предыдущая страница| |Следующая страница ⇒