Для генерации кода необходимо установить сложность переменных во время присвоения. Присвойте комплексную константу переменной или используйте функцию 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, но комплексе с мнимыми частями с нулевым знаком в сгенерированном коде:
В целом выражения, которые содержат один или несколько комплексных операндов, приводят к комплексному результату в сгенерированном коде, даже если значение результата является нулем. Рассмотрите следующую строку кода:
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.