我已经为保守污染物的一维平流 - 色散编写了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命令语法。在执行它时,它显示缺少一些括号。
答案 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
中的所有元素都用完为止。在这种情况下,换行符需要单独打印。