How to include complex numbers in fprintf function?
Mostrar comentarios más antiguos
lambda = [1.064e-6];
R = [30];
w=[0.001];
q = (1./R- i* lambda./pi./w.^2).^(-1);
a=1;
p=1;
m=1;
probe_r=linspace(0,0.003,100);
probe_theta=linspace(0,0.003,100);
rseed=[0*max(w):max(w)/30:3*max(w)];
thetaseed=[0:360]*pi/180;
[r,theta]=meshgrid(rseed,thetaseed);
E=LaguerreGaussianE([p,m,q,lambda,a],r,theta);
V=interp2(r,theta,E,probe_r,probe_theta);
column_names = {'r', 'theta', 'V'};
fid = fopen('fidtext.txt','wt');
fprintf(fid, '%s ', column_names{:});
fprintf(fid, '\n');
block_of_data = [probe_r, probe_theta, V];
fmt = repmat('%15g ', 1, 3);
fmt(end:end+1) = '\n';
fprintf(fid, fmt, block_of_data.');
fclose(fid);
With the current code I have I get a .txt file of only the real numbers from my function V along with the values of probe_r and probe_theta. How do I alter this to produce both the real and complex numbers as a 3 column .txt file of r, theta and V as I am unable to see a formatSpec to include complex numbers.
Respuesta aceptada
Más respuestas (1)
Ken
el 6 de Feb. de 2020
This works fine for a single complex number. If you replace x with an array, the reals come first followed by all the imaginaries.
For example:
rxSignal=[1.1+1j*2.2 3.3+1j*4.4 5.5+1j*6.6]
fileID=fopen('rxSignal.txt','w')
fprintf(fileID,'%f%+fj\n',real(rxSignal(:)),imag(rxSignal(:)));
fclose(fileID)
When you read the text file, you get:
1.100000+3.300000j
5.500000+2.200000j
4.400000+6.600000j
Here you see the reals filling the first three slots and the imaginaries filling the last three slots.
How to fix this without writing a for loop to do one at a time?
7 comentarios
Walter Roberson
el 6 de Feb. de 2020
Yes, but I posted the solution to that over two years ago; https://www.mathworks.com/matlabcentral/answers/369740-how-to-include-complex-numbers-in-fprintf-function#comment_510120
Ken
el 6 de Feb. de 2020
But I am using your code example and getting the wrong result. Did the Matlab version change this? Please run my snippet on your machine and view text file. Thanks.
Star Strider
el 6 de Feb. de 2020
@Ken Crandall —
‘But I am using your code example ...’
No, you’re not. Note the concatenation of the two vectors in a matrix, and the transpose operator (.') in Walter’s code, however not in yours.
Walter Roberson
el 6 de Feb. de 2020
The concatenation and transpose are very important for this purpose .
Star Strider
el 7 de Feb. de 2020
Ken Crandall’s Answer moved here —
I apologize. Thanks!
Star Strider
el 7 de Feb. de 2020
No apology necessary!
It’s just that it’s important to read the code carefully and understand how it works.
Paul Serna-Torre
el 4 de Dic. de 2023
Thank you. It worked.
Categorías
Más información sobre Entering Commands en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!