2010-11-09 2 views
-1

Я написал код MATLAB для одномерной адвекции-дисперсии для консервативного загрязнения следующим образом.Синтаксис команды fprintf в 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

Вы должны написать строку формата как строки, т.е.

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. Например, инициализация ЗУР

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 

можно переписать в виде с = ч;

0

Вы должны кавычки вокруг строки формата, например, так:

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

(на самом деле не положить ... в, я просто положить его там в качестве заполнителя, поэтому я не придется вводить в партии и улучшить читаемость).

Смежные вопросы