Синтаксис команды 'fprintf' в MATLAB - PullRequest
0 голосов
/ 09 ноября 2010

Я написал код 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 ]

3 голосов
/ 09 ноября 2010

Вам нужно записать строку формата в виде строки, то есть

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 =ч;

0 голосов
/ 04 апреля 2019

Вы уже получили ответ, объясняющий, почему вы получаете ошибку. Однако я бы написал это как:

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

Шаблон используется повторно, пока все элементы в h не будут исчерпаны. В этом случае новую строку необходимо печатать отдельно.

0 голосов
/ 09 ноября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...