Интерполяционные матрицы с 2 переменными и 1 зависимым значением - PullRequest
1 голос
/ 18 апреля 2019

Я анализирую асинхронный двигатель, меняя частоту и абсолютное значение тока статора.Поскольку инструмент FEM работает только с токовым входом, мне нужно изменять ток по частоте, чтобы получить значения тока постоянного крутящего момента для каждой частоты.

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

I_S = [ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 ];
fre = [ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ];
tor = [ 0 0.1 0.3 0.5 0.7 1 1.5 2 2.6 3.3 0 1.1 1.3 1.5 1.7 2 2.5 3 3.6 4.3 0 2.1 2.3 2.5 2.7 3 3.5 4 4.6 5.3 ];

При отображении torкак цветовая карта в сюжете.Каждая матрица имеет длину 30.

Для одного моделирования требуется около 20-30 секунд.Таким образом, чтобы получить точную сетку, FEM-инструменту требуется несколько часов для генерации.

Я хотел бы интерполировать пробелы между известными.

Кажется, что либо способпроблема заключается в создании матриц, или функции interp * ...- в Octave / MATLAB просто не работают для такой интерполяции.

Есть ли способ добиться интерполяции в виде сетки / сетки изэтот тип матриц?Я нашел много примеров с x, y как переменными и z как математической функцией, но редко с 3 линейными / нелинейными матрицами.

1 Ответ

0 голосов
/ 18 апреля 2019

Ваши данные должны быть в виде сетки, то есть 2D:

// Known data
current = [0:2];
frequency = [0:9];
[current2D, frequency2D] = meshgrid(current,frequency);
torque2D = [ 0 0.1 0.3; 0.5 0.7 1; 1.5 2 2.6; 3.3 0 1.1; 1.3 1.5 1.7; 2 2.5 3; 3.6 4.3 0; 2.1 2.3 2.5; 2.7 3 3.5; 4 4.6 5.3 ];

// Interpolated data
currentToInterpolate = [0.5 1.5];
frequncyToInterpolate = [0.5 : 8.5];
[currentToInterpolate2D, frequencyToInterpolate2D] = meshgrid(currentToInterpolate,frequncyToInterpolate);
interpolatedTorque2D = interp2(current2D,frequency2D,torque2D,currentToInterpolate2D,frequencyToInterpolate2D);
...