2010-11-09 43 views
-1

我已經編寫了MATLAB代碼,用於保守污染物的一維對流擴散,如下所示。MATLAB中'fprintf'命令的語法

% 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

你需要編寫格式字符串作爲字符串,即

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;

0

你需要引號的格式字符串,像這樣:

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

(實際上不放在...,我只是把它放在那裏作爲佔位符,所以我不必鍵入在批次中,並提高可讀性)。