# How do I export the calculations of a textfile?

3 views (last 30 days)
Eneru Y on 22 Mar 2017
Commented: Walter Roberson on 22 Mar 2017
I have to export to a file all the values of variables X and Y.
A = 10:0.1:100;
B = 100:1:1000;
C = 1:0.01:10;
X = A .* B;
Y = (A ./ B) .* C;
i.e. the X and Y values for each value of A, B and C. I've tried with
M = [ X ; Y ];
nomefile = fopen ( 'FILE.txt' , 'a');
fprintf ( nomefile , '%16.15E %16.15E\r\n' , M );
fclose (nomefile);
but I got a mess. I was supposed to get a file with 7.29E+08 lines, but I got a much smaller file with wrong values. Thank you!

Eneru Y on 22 Mar 2017
So to be precise:
A .* B = 901 * 901 values = 901² = 811801 values
(A ./ B) .* C = 901 * 901 * 901 = 901³ = 731432701 values
Thus X column = 811,801 rows and Y column = 731,432,701 rows.
Stephen Cobeldick on 22 Mar 2017
"Thus X column = 811,801 rows and Y column = 731,432,701 rows"
Nope, not even close:
>> size(X)
ans =
1 901
>> size(Y)
ans =
1 901
If you want matrix multiplication then you need to use the correct operator. If you want all permutations then use bsxfun, although you will likely run out of memory.
Walter Roberson on 22 Mar 2017
Using ndgrid or bsxfun runs out of memory on my machine.
Also, 901*901 is odd, so it is not clear how one would write it out as two columns? Two in which order? Should the last of the rows have only one entry?

Eneru Y on 22 Mar 2017
I think I found the solution:
for A = 10:0.1:100
for B = 100:1:1000
for C = 1:0.01:10
X = A * B;
Y = (A / B) * C;
U = [ X ; Y ];
fid = fopen('FILE.txt','a');
fprintf(fid,'%16.15E %16.15E\r\n', U );
fclose(fid);
end
end
end
This way it works. Thanks anyway!

Stephen Cobeldick on 22 Mar 2017
It would be much better to open the file before and after the loop, use w to write to a cleared file, and use the t option (because this handles newlines correctly):
fid = fopen('FILE.txt','wt');
for ...
....
fprintf(fid,'%16.15E %16.15E\n', U );
end
fclose(fid);
Eneru Y on 22 Mar 2017
Thank you!