MATLAB中'fprintf'命令的语法

时间:2010-11-09 02:33:16

标签: matlab printf

我已经为保守污染物的一维平流 - 色散编写了MATLAB代码,如下所示。

% Analysis of 1D conservative contaminant migration through porous media.
% For t=25 days.

% Parameters:
dt = 1;
dx = 10;

% Coeffecients
m = (dt/dx^2)- (dt/dx);
n = -2*dt/(dx^2);
p = dt/(dx^2)+ dt/dx;

%Initialization
for i = 1:11
    c(i)= 0.0;
    h(i)= 0.0;
end

%Initial condition
c(6)= 500.0;

%Boundary condition
for i=1:11
    c(1)=0.0;
    c(11)= 0.0;
    h(1)= 0.0;
    h(11)= 0.0;
end
for k=1:25
    for i=2:10
        h(i)= c(i+1)*m + c(i)*n +c(i-1)*p;
    end
    for i=1:11
        c(i)=h(i);
    end
end

% Writing the results to file newfile.txt
fid= fopen('newfile.txt', 'wt');
fprintf(fid,%3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f
%3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f\n,h);
fclose (fid);
contour(c);

但我坚持使用fprintf命令语法。在执行它时,它显示缺少一些括号。

3 个答案:

答案 0 :(得分:3)

您需要将格式字符串写为字符串,即

fprintf(fid,%3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f
%3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f\n,h);

应该是

fprintf(fid,['%3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f',...
'%3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f\n'],h);

圆点表示换行符,方括号表示两行上的字符串。


另外,你并没有在这里编写Matlab代码。例如,zour初始化

for i = 1:11
    c(i)= 0.0;
    h(i)= 0.0;
end

可以写成

c = zeros(1,11);
h = zeros(1,11);
or
[c,h] = deal(zeros(1,11));

此外,

for i=1:11
    c(1)=0.0;
    c(11)= 0.0;
    h(1)= 0.0;
    h(11)= 0.0;
end

这里绝对没有,因为你已经将向量初始化为零,即使你想保留行以便能够改变值,你也可以消除循环。

最后,

for i=1:11
   c(i)=h(i);
end

可以改写为 c = h;

答案 1 :(得分:0)

您的格式字符串需要引号,如下所示:

fprintf(fid,'%3.3f %3.3f ... %3.3f\n',h);

(实际上并未将...放入其中,我只是将其作为占位符放在那里,因此我不必输入该批次,并提高可读性。)

答案 2 :(得分:0)

您已经获得了解释为什么会出错的答案。但是我将其写为:

fprintf(fid,'%3.3f ',h);
fprintf(fid,'\n');

该模板将被重复使用,直到h中的所有元素都用完为止。在这种情况下,换行符需要单独打印。