Как вы форматируете комплексные числа для вывода текста в Matlab
У меня есть комплексное число, которое я хочу вывести в виде текста с помощью команды fprintf. Я не вижу спецификации формата для комплексных чисел. Есть простой способ сделать это?
Использование спецификации формата для фиксированной точки выводит только реальную часть.
3 ответа
Согласно документации fprintf и sprintf
Числовые преобразования печатают только реальную составляющую комплексных чисел.
Так что для комплексного значения z
Вы можете использовать это
sprintf('%f + %fi\n', z, z/1i)
например
>> z=2+3i;
>> sprintf('%f + %fi\n', z, z/1i)
2.000000 + 3.000000i
Вы можете обернуть его в анонимную функцию, чтобы легко получить как строку
zprintf = @(z) sprintf('%f + %fi', z, z/1i)
затем
>> zprintf(2+3i)
ans =
2.000000 + 3.000000i
Обращайтесь к действительной и мнимой частям отдельно:
x = -sqrt(-2)+2;
fprintf('%7.4f%+7.4fi\n',real(x),imag(x))
или преобразовать в строку сначала с num2str()
num2str(x,'%7.4f')
Я не знаю, есть ли простой способ, но вы можете написать свою собственную функцию форматирования (сложный способ):
function mainFunction()
st = sprintfe('%d is imaginary, but %d is real!',1+3i,5);
disp(st);
st = sprintfe('%f + %f = %f',i,3,3+i);
disp(st);
end
function stOut = sprintfe(st,varargin) %Converts complex numbers.
for i=1:numel(varargin)
places = strfind(st,'%');
currentVar = varargin{i};
if isnumeric(currentVar) && abs(imag(currentVar))> eps
index = places(i);
formatSpecifier = st(index:index+1);
varargin{i} = fc(currentVar,formatSpecifier);
st(index+1) = 's';
end
end
stOut = sprintf(st,varargin{:});
end
function st = fc(x,formatSpecifier)
st = sprintf([formatSpecifier '+' formatSpecifier 'i'],real(x),imag(x));
end
Это решение страдает некоторыми ошибками (не обрабатывает%2d,%3f), но вы получите общее представление.
Вот результаты:
>> mainFuncio
1+3i is imaginary, but 5 is real!
0.000000+1.000000i + 3.000000 = 3.000000+1.000000i