exponenta event banner

Создание кода для сложных данных

Ограничения при определении сложных переменных

Для создания кода необходимо задать сложность переменных во время присвоения. Назначьте переменной комплексную константу или используйте complex функция. Например:

x = 5 + 6i; % x is a complex number by assignment.
y = complex(5,6); % y is the complex number 5 + 6i.

После назначения невозможно изменить сложность переменной. Не удалось создать код для следующей функции, так как x(k) = 3 + 4i изменяет сложность x.

function x = test1( )
x = zeros(3,3); % x is real
for k = 1:numel(x)
    x(k) = 3 + 4i;
end
end

Для решения этой проблемы назначьте сложную константу x.

function x = test1( )
x = zeros(3,3)+ 0i; %x is complex
for k = 1:numel(x)
    x(k) = 3 + 4i;
end
end

Создание кода для сложных данных с нулевыми мнимыми элементами

Для генерации кода сложные данные, содержащие все мнимые части с нулевым значением, остаются сложными. Эти данные не становятся реальными. Это поведение имеет следующие последствия:

  • В некоторых случаях результаты функций, которые сортируют сложные данные по абсолютному значению, могут отличаться от результатов MATLAB ®. См. раздел Функции сортировки комплексных значений по абсолютному значению.

  • Для функций, требующих сортировки комплексных входов по абсолютному значению, комплексные входы с нулевыми мнимыми частями должны быть отсортированы по абсолютному значению. Эти функции включают ismember, union, intersect, setdiff, и setxor.

Функции сортировки комплексных значений по абсолютному значению

Функции, которые сортируют комплексные значения по абсолютному значению, включают sort, issorted, sortrows, median, min, и max. Эти функции сортируют комплексные числа по абсолютному значению, даже если мнимые части равны нулю. Как правило, сортировка абсолютных значений дает результат, отличный от сортировки вещественных деталей. Поэтому, когда входы в эти функции являются сложными с нулевыми мнимыми частями в сгенерированном коде, но реальными в MATLAB, сгенерированный код может давать результаты, отличные от MATLAB. В следующих примерах входные данные для sort вещественна в MATLAB, но сложна с нулевыми мнимыми частями в сгенерированном коде:

  •  Передача реальных входных данных функции, созданной для сложных входных данных

  •  Ввод в sort Вывод функции, возвращающей сложный код в сгенерированном коде

Результаты выражений со сложными операндами

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

z = x + y; 

Предположим, что во время выполнения, x имеет значение 2 + 3i и y имеет значение 2 - 3i. В MATLAB этот код дает реальный результат z = 4. Во время создания кода типы для x и y известны, но их значения не известны. Поскольку один или оба операнда в этом выражении сложны, z определяется как комплексная переменная, требующая хранения для вещественной и мнимой части. z равен комплексному результату 4 + 0i в сгенерированном коде, не 4, как в коде MATLAB.

Исключения из этого поведения:

  • Функции, которые принимают сложные аргументы, но дают реальные результаты, возвращают реальные значения.

    y = real(x); % y is the real part of the complex number x.
    y = imag(x); % y is the real-valued imaginary part of x.
    y = isreal(x); % y is false (0) for a complex number x.
    
  • Функции, которые принимают вещественные аргументы, но дают сложные результаты, возвращают комплексные значения.

    z = complex(x,y); % z is a complex number for a real x and y.
    

Результаты комплексного умножения на нефинитные значения

Когда операнд комплексного умножения содержит конечное значение, генерируемый код может дать результат, отличный от результата, полученного MATLAB. Разница обусловлена тем, как генерация кода определяет комплексное умножение. Для создания кода:

  • Умножение комплексного значения на комплексное значение (a + bi) (c + di) определяется как (ac - bd) + (ad + bc) i. Полный расчет выполняется, даже если вещественная или мнимая часть равна нулю.

  • Умножение действительного значения на комплексное значение c (a + bi) определяется как ca + cbi.