How to include complex numbers in fprintf function?
이전 댓글 표시
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.
채택된 답변
추가 답변 (1개)
Ken
2020년 2월 6일
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
Walter Roberson
2020년 2월 6일
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
2020년 2월 6일
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
2020년 2월 6일
@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
2020년 2월 6일
The concatenation and transpose are very important for this purpose .
Star Strider
2020년 2월 7일
Ken Crandall’s Answer moved here —
I apologize. Thanks!
Star Strider
2020년 2월 7일
No apology necessary!
It’s just that it’s important to read the code carefully and understand how it works.
Paul Serna-Torre
2023년 12월 4일
Thank you. It worked.
카테고리
도움말 센터 및 File Exchange에서 Entering Commands에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!