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.