fprintf formatting problem with cell and array matrix 3

2 次查看(过去 30 天)
In relation to my previous post and accepted answer.
The outputs are just how i would like them.
Unfornunately the inputs are are actually the transpose of what they should be.
I slightly modified the code to try achieve the previous results, but it is not quire there. The data matrix is correct, but the fprintf output is not.
Any tweaks to correct this would be very much appreciated.
clear, clc, close all
%% input data
fracs = ...
[1.080799513888714E-32 0 0.62466759170135333 0.0742119108820972 0 0 0 ...
0 0 0.30112049741654717;
8.1862156579892249E-31 0 0.43700138755203366 0.56299861244797844 0 0 ...
0 0 0 0;
4.8637114770698571E-21 0 0.32440166506243995 0.67559833493756316 0 0 ...
4.2291497653345257E-26 0 0 0;
1.6450880329246443E-15 3.1789404533678006E-36 0.24933518340270872 0.7506648165972899 ...
3.0673853913761709E-28 1.3223645939372742E-32 8.0871899392903947E-19 ...
6.70013387010215E-33 0 0;
4.900395718623101E-12 6.1747782151010521E-28 0.19571626793147767 0.80428373206852888 ...
2.2269718209845535E-22 1.6572230040113729E-24 3.3433984090423735E-14 ...
9.2977078152200557E-25 0 0;
1.0257351304705146E-9 2.617799763018077E-22 0.15550208132805002 0.84449791867194646 ...
2.1781579716418966E-18 4.9208050395830782E-19 4.3857807128809733E-11 ...
3.2214171097127513E-19 0 0;
4.3103181910295979E-8 2.7279345388281687E-18 0.12422433753331349 0.87577561936350534 ...
1.570342966673278E-15 3.78000038794537E-15 7.1379146386309683E-9 2.9689871616039746E-15 ...
3.5360248709238178E-32 0;
6.5459411463843508E-7 2.7320582329382315E-15 0.099201583893637285 0.9007974509664014 ...
2.1726807488669134E-13 2.8836393026009774E-12 3.1054584734036675E-7 ...
2.7651925411612618E-12 7.12366402656099E-27 0;
5.0662163511599685E-6 5.883213268176446E-13 0.078724813502676808 0.92126444320230738 ...
1.0153013026281985E-11 4.8262185118338723E-10 5.6770786659506609E-6 ...
5.7354594102813562E-10 9.7023674645676979E-23 0;
2.4421990262674956E-5 4.403704051947919E-11 0.06164794655733434 0.93827052251646137 ...
2.2445716907411361E-10 2.8377451585746555E-8 5.7038008629661728E-5 4.25498603104255E-8 ...
2.0811584806073058E-19 0;
8.2187030635818051E-5 1.5288924079026876E-9 0.047173110175765094 0.95237302382510747 ...
2.8721600227496867E-9 7.7581284460813075E-7 0.00036939736170548689 1.5057939350703259E-6 ...
1.1726859150654507E-16 0;
0.00020427712746989916 2.9105403726253816E-8 0.034760508512691225 0.96330610874190448 ...
2.3876219545799965E-8 1.1566323656074547E-5 0.0016873015383648579 3.0208650517165084E-5 ...
2.3443091248967122E-14 0;
0.00038077633599091645 3.3138117176928766E-7 0.024151961677904805 0.96931004937101217 ...
1.3649589247496569E-7 0.00010177468680586972 0.0056759924892255493 0.00037897756200643907 ...
1.9511337609553526E-12 0;
0.00052407082677757269 2.2742164116491102E-6 0.015511740358074975 0.96632796330430382 ...
5.3611083709640121E-7 0.00053118366049772158 0.014065446275684821 0.0030367852474231624 ...
6.887405688319738E-11 0;
0.00052856823076589509 8.658464587260697E-6 0.0093989841734753513 0.9495411058272516 ...
1.3577058415442342E-6 0.0015427398356310203 0.024754647508174875 0.014223938254272516 ...
8.8099805664011839E-10 0;
0.00042813835721212761 1.8749212329738908E-5 0.0057655124991027457 0.920591265384587 ...
2.269548855159085E-6 0.0026396910954343466 0.032128828877358365 0.038425545025119787 ...
4.149228770119087E-9 0;
0.00031494793492961137 2.8327147863117975E-5 0.0037057710019004955 0.88634406267706345 ...
2.922132902838032E-6 0.0032768974022960775 0.034775463743648316 0.071551607959386754 ...
1.018411787725647E-8 0;
0.00022348304331810186 3.5251522913437423E-5 0.0024786422606670384 0.85134668127933666 ...
3.2746278191248033E-6 0.00344139271559275 0.034292082662405188 0.10817919188794742 ...
1.7500625275918122E-8 0;
0.00015605925600176512 3.9341075649633064E-5 0.001702599392503859 0.8174699691665277 ...
3.3970252161274673E-6 0.0032942135941524892 0.032135291011034732 0.14519912947891617 ...
2.4579722439036182E-8 0;
0.0001078783250984206 4.1056317609275734E-5 0.0011891055667362491 0.78536474093557762 ...
3.3613947843293898E-6 0.0029771549758717086 0.029184848667306983 0.18113182333004763 ...
3.0486964237300663E-8 0;
7.392252463130788E-5 4.0959000051015282E-5 0.00083862229703092787 0.755195725277905 ...
3.2225776517101929E-6 0.0025861369476422578 0.025940842802949327 0.2153205337688972 ...
3.4803232955347635E-8 0;
5.0210295664953338E-5 3.9555945293785451E-5 0.0005944585106563569 0.7269340589384562 ...
3.01982398381767E-6 0.0021806906182302303 0.022687255264208894 0.24751071315297202 ...
3.7450541969004565E-8 0]';
of = [0.5; 1; 1.5; 2; 2.5; 3; 3.5; 4; 4.5; 5; 5.5; 6; 6.5; 7; 7.5; 8; 8.5; ...
9; 9.5; 10; 10.5; 11]';
pnames = {'*H','HO2','*H2','H2O','H2O2','*O','*OH','*O2','O3','H2O(S)'}';
%% print
fileID = fopen('ofmf.txt','w');
fmt = ['%16s', repmat('%16.7e ', 1, numel(of)-1), '%16.7e\n'];
a = [{'mix-ratio'}, num2cell(of)];
b = [pnames, num2cell(fracs)];
data = [a; b];
fprintf(fileID,fmt,data{:});
fclose(fileID);
% check
type('ofmf.txt')

采纳的回答

Voss
Voss 2023-11-1
编辑:Voss 2023-11-1
You just have to tranpose data as well:
data = [a; b].';
Full code:
clear, clc, close all
%% input data
fracs = ...
[1.080799513888714E-32 0 0.62466759170135333 0.0742119108820972 0 0 0 ...
0 0 0.30112049741654717;
8.1862156579892249E-31 0 0.43700138755203366 0.56299861244797844 0 0 ...
0 0 0 0;
4.8637114770698571E-21 0 0.32440166506243995 0.67559833493756316 0 0 ...
4.2291497653345257E-26 0 0 0;
1.6450880329246443E-15 3.1789404533678006E-36 0.24933518340270872 0.7506648165972899 ...
3.0673853913761709E-28 1.3223645939372742E-32 8.0871899392903947E-19 ...
6.70013387010215E-33 0 0;
4.900395718623101E-12 6.1747782151010521E-28 0.19571626793147767 0.80428373206852888 ...
2.2269718209845535E-22 1.6572230040113729E-24 3.3433984090423735E-14 ...
9.2977078152200557E-25 0 0;
1.0257351304705146E-9 2.617799763018077E-22 0.15550208132805002 0.84449791867194646 ...
2.1781579716418966E-18 4.9208050395830782E-19 4.3857807128809733E-11 ...
3.2214171097127513E-19 0 0;
4.3103181910295979E-8 2.7279345388281687E-18 0.12422433753331349 0.87577561936350534 ...
1.570342966673278E-15 3.78000038794537E-15 7.1379146386309683E-9 2.9689871616039746E-15 ...
3.5360248709238178E-32 0;
6.5459411463843508E-7 2.7320582329382315E-15 0.099201583893637285 0.9007974509664014 ...
2.1726807488669134E-13 2.8836393026009774E-12 3.1054584734036675E-7 ...
2.7651925411612618E-12 7.12366402656099E-27 0;
5.0662163511599685E-6 5.883213268176446E-13 0.078724813502676808 0.92126444320230738 ...
1.0153013026281985E-11 4.8262185118338723E-10 5.6770786659506609E-6 ...
5.7354594102813562E-10 9.7023674645676979E-23 0;
2.4421990262674956E-5 4.403704051947919E-11 0.06164794655733434 0.93827052251646137 ...
2.2445716907411361E-10 2.8377451585746555E-8 5.7038008629661728E-5 4.25498603104255E-8 ...
2.0811584806073058E-19 0;
8.2187030635818051E-5 1.5288924079026876E-9 0.047173110175765094 0.95237302382510747 ...
2.8721600227496867E-9 7.7581284460813075E-7 0.00036939736170548689 1.5057939350703259E-6 ...
1.1726859150654507E-16 0;
0.00020427712746989916 2.9105403726253816E-8 0.034760508512691225 0.96330610874190448 ...
2.3876219545799965E-8 1.1566323656074547E-5 0.0016873015383648579 3.0208650517165084E-5 ...
2.3443091248967122E-14 0;
0.00038077633599091645 3.3138117176928766E-7 0.024151961677904805 0.96931004937101217 ...
1.3649589247496569E-7 0.00010177468680586972 0.0056759924892255493 0.00037897756200643907 ...
1.9511337609553526E-12 0;
0.00052407082677757269 2.2742164116491102E-6 0.015511740358074975 0.96632796330430382 ...
5.3611083709640121E-7 0.00053118366049772158 0.014065446275684821 0.0030367852474231624 ...
6.887405688319738E-11 0;
0.00052856823076589509 8.658464587260697E-6 0.0093989841734753513 0.9495411058272516 ...
1.3577058415442342E-6 0.0015427398356310203 0.024754647508174875 0.014223938254272516 ...
8.8099805664011839E-10 0;
0.00042813835721212761 1.8749212329738908E-5 0.0057655124991027457 0.920591265384587 ...
2.269548855159085E-6 0.0026396910954343466 0.032128828877358365 0.038425545025119787 ...
4.149228770119087E-9 0;
0.00031494793492961137 2.8327147863117975E-5 0.0037057710019004955 0.88634406267706345 ...
2.922132902838032E-6 0.0032768974022960775 0.034775463743648316 0.071551607959386754 ...
1.018411787725647E-8 0;
0.00022348304331810186 3.5251522913437423E-5 0.0024786422606670384 0.85134668127933666 ...
3.2746278191248033E-6 0.00344139271559275 0.034292082662405188 0.10817919188794742 ...
1.7500625275918122E-8 0;
0.00015605925600176512 3.9341075649633064E-5 0.001702599392503859 0.8174699691665277 ...
3.3970252161274673E-6 0.0032942135941524892 0.032135291011034732 0.14519912947891617 ...
2.4579722439036182E-8 0;
0.0001078783250984206 4.1056317609275734E-5 0.0011891055667362491 0.78536474093557762 ...
3.3613947843293898E-6 0.0029771549758717086 0.029184848667306983 0.18113182333004763 ...
3.0486964237300663E-8 0;
7.392252463130788E-5 4.0959000051015282E-5 0.00083862229703092787 0.755195725277905 ...
3.2225776517101929E-6 0.0025861369476422578 0.025940842802949327 0.2153205337688972 ...
3.4803232955347635E-8 0;
5.0210295664953338E-5 3.9555945293785451E-5 0.0005944585106563569 0.7269340589384562 ...
3.01982398381767E-6 0.0021806906182302303 0.022687255264208894 0.24751071315297202 ...
3.7450541969004565E-8 0]';
of = [0.5; 1; 1.5; 2; 2.5; 3; 3.5; 4; 4.5; 5; 5.5; 6; 6.5; 7; 7.5; 8; 8.5; ...
9; 9.5; 10; 10.5; 11]';
pnames = {'*H','HO2','*H2','H2O','H2O2','*O','*OH','*O2','O3','H2O(S)'}';
%% print
fileID = fopen('ofmf.txt','w');
fmt = ['%16s', repmat('%16.7e ', 1, numel(of)-1), '%16.7e\n'];
a = [{'mix-ratio'}, num2cell(of)];
b = [pnames, num2cell(fracs)];
data = [a; b].';
fprintf(fileID,fmt,data{:});
fclose(fileID);
% check
type('ofmf.txt')
mix-ratio 5.0000000e-01 1.0000000e+00 1.5000000e+00 2.0000000e+00 2.5000000e+00 3.0000000e+00 3.5000000e+00 4.0000000e+00 4.5000000e+00 5.0000000e+00 5.5000000e+00 6.0000000e+00 6.5000000e+00 7.0000000e+00 7.5000000e+00 8.0000000e+00 8.5000000e+00 9.0000000e+00 9.5000000e+00 1.0000000e+01 1.0500000e+01 1.1000000e+01 *H 1.0807995e-32 8.1862157e-31 4.8637115e-21 1.6450880e-15 4.9003957e-12 1.0257351e-09 4.3103182e-08 6.5459411e-07 5.0662164e-06 2.4421990e-05 8.2187031e-05 2.0427713e-04 3.8077634e-04 5.2407083e-04 5.2856823e-04 4.2813836e-04 3.1494793e-04 2.2348304e-04 1.5605926e-04 1.0787833e-04 7.3922525e-05 5.0210296e-05 HO2 0.0000000e+00 0.0000000e+00 0.0000000e+00 3.1789405e-36 6.1747782e-28 2.6177998e-22 2.7279345e-18 2.7320582e-15 5.8832133e-13 4.4037041e-11 1.5288924e-09 2.9105404e-08 3.3138117e-07 2.2742164e-06 8.6584646e-06 1.8749212e-05 2.8327148e-05 3.5251523e-05 3.9341076e-05 4.1056318e-05 4.0959000e-05 3.9555945e-05 *H2 6.2466759e-01 4.3700139e-01 3.2440167e-01 2.4933518e-01 1.9571627e-01 1.5550208e-01 1.2422434e-01 9.9201584e-02 7.8724814e-02 6.1647947e-02 4.7173110e-02 3.4760509e-02 2.4151962e-02 1.5511740e-02 9.3989842e-03 5.7655125e-03 3.7057710e-03 2.4786423e-03 1.7025994e-03 1.1891056e-03 8.3862230e-04 5.9445851e-04 H2O 7.4211911e-02 5.6299861e-01 6.7559833e-01 7.5066482e-01 8.0428373e-01 8.4449792e-01 8.7577562e-01 9.0079745e-01 9.2126444e-01 9.3827052e-01 9.5237302e-01 9.6330611e-01 9.6931005e-01 9.6632796e-01 9.4954111e-01 9.2059127e-01 8.8634406e-01 8.5134668e-01 8.1746997e-01 7.8536474e-01 7.5519573e-01 7.2693406e-01 H2O2 0.0000000e+00 0.0000000e+00 0.0000000e+00 3.0673854e-28 2.2269718e-22 2.1781580e-18 1.5703430e-15 2.1726807e-13 1.0153013e-11 2.2445717e-10 2.8721600e-09 2.3876220e-08 1.3649589e-07 5.3611084e-07 1.3577058e-06 2.2695489e-06 2.9221329e-06 3.2746278e-06 3.3970252e-06 3.3613948e-06 3.2225777e-06 3.0198240e-06 *O 0.0000000e+00 0.0000000e+00 0.0000000e+00 1.3223646e-32 1.6572230e-24 4.9208050e-19 3.7800004e-15 2.8836393e-12 4.8262185e-10 2.8377452e-08 7.7581284e-07 1.1566324e-05 1.0177469e-04 5.3118366e-04 1.5427398e-03 2.6396911e-03 3.2768974e-03 3.4413927e-03 3.2942136e-03 2.9771550e-03 2.5861369e-03 2.1806906e-03 *OH 0.0000000e+00 0.0000000e+00 4.2291498e-26 8.0871899e-19 3.3433984e-14 4.3857807e-11 7.1379146e-09 3.1054585e-07 5.6770787e-06 5.7038009e-05 3.6939736e-04 1.6873015e-03 5.6759925e-03 1.4065446e-02 2.4754648e-02 3.2128829e-02 3.4775464e-02 3.4292083e-02 3.2135291e-02 2.9184849e-02 2.5940843e-02 2.2687255e-02 *O2 0.0000000e+00 0.0000000e+00 0.0000000e+00 6.7001339e-33 9.2977078e-25 3.2214171e-19 2.9689872e-15 2.7651925e-12 5.7354594e-10 4.2549860e-08 1.5057939e-06 3.0208651e-05 3.7897756e-04 3.0367852e-03 1.4223938e-02 3.8425545e-02 7.1551608e-02 1.0817919e-01 1.4519913e-01 1.8113182e-01 2.1532053e-01 2.4751071e-01 O3 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 3.5360249e-32 7.1236640e-27 9.7023675e-23 2.0811585e-19 1.1726859e-16 2.3443091e-14 1.9511338e-12 6.8874057e-11 8.8099806e-10 4.1492288e-09 1.0184118e-08 1.7500625e-08 2.4579722e-08 3.0486964e-08 3.4803233e-08 3.7450542e-08 H2O(S) 3.0112050e-01 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00
  5 个评论
Walter Roberson
Walter Roberson 2023-11-1
@Voss is correct. When you use fprintf(), all of the first parameter (after the format) will be "consumed" before any of the next parameter. This is a pain for constructing formatted output with multiple columns especially if multiple datatypes are involved.
Because of this you might be interested in the newer compose which works "across" rows
%fprintf doesn't care about row vector vs column vector,
%it just uses all of the parameter before moving on to the next
fprintf('A<%g> B<%g>\n', [1 2], [3 4])
A<1> B<2> A<3> B<4>
fprintf('A<%g> B<%g>\n', [1;2], [3;4])
A<1> B<2> A<3> B<4>
%compose with column vectors processes a row at a time
compose('A<%g> B<%g>\n', [1;2], [3;4])
ans = 2×1 cell array
{'A<1> B<3>↵'} {'A<2> B<4>↵'}
%I cannot explain this output for compose. The relevant doc says
%"If the number of columns in the last input array, AN, exceeds the
%number of remaining operators, then compose adds an additional
%column to str, as described in the previous syntax." -- but
%cannot understand at the moment why it repeats the previous output
compose('A<%g> B<%g> C<%g>\n', [1 2], [3 4])
ans = 1×2 cell array
{'A<1> B<2> C<3>↵'} {'A<1> B<2> C<4>↵'}
%and what happens if we use row vectors with compose?
compose('A<%g> B<%g>\n', [1 2], [3 4])
Error using compose
Format must have enough conversion operators for the data arguments.
%I think that's a bug compared to the documentation
Brantosaurus
Brantosaurus 2023-11-1
That's very kind of you raising that Walter. I will have a play around and keep that in the itinery also.

请先登录,再进行评论。

更多回答(0 个)

产品


版本

R2017a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by