Ошибка разбора в '[': использование может быть неверным синтаксисом MATLAB - PullRequest
1 голос
/ 05 января 2020

Я разрабатываю небольшую утилиту, которая вычисляет уравнение в частных производных в MATLAB. Я получаю сообщение об ошибке неверного синтаксиса:

Parse error at '[' : usage might be invalid MATLAB syntax в вызове функции, но я не понимаю, почему:

Ниже кода, который я использую для main_routine.m:

% pde operations ..

 % Explicit (nonstiff) integration
if(mf == 1)
    [t,u] = ode45(@pde_1, tout, u0, options);
end

%
% Implicit (sparse stiff) integration
if(mf == 2)
    S = jpattern_num;
    options = odeset(options, 'JPattern', S)
    [t,u] = ode15s(@pde_1, tout, u0, options);
end

Вызов функции jpattern_num.m, где ошибка:

function S = jpattern_num
global n

% Set independent, dependent variables for the calculation
% of the sparsity pattern
tbase = 0;
for i=1:n
    ybase(i) = 0.5;
end
ybase = ybase';
%
% Compute the corresponding derivative vector
ytbase = pde_1(tbase,ybase); 
fac[];   % <-- Error Here but don't know wy
thresh = 1e-16;
vectorized = 'on';
[Jac,fac] = numjac(@pde_1, tbase, ybase, ytbase, thresh, fac, vectorized);
%
% Replace nonzero elements by "1" (so as to create a "0-1" map of the 
% Jacobian matrix)
S = spones(sparse(Jac));
%
% Plot the map ….

Что я пробовал до сих пор:

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

2) Этот источник был очень полезен, так как у пользователя было похожее проект. Я применил ту же модификацию:

из

fac[];

Я применил

fac();

Но это, к сожалению, не решило проблему.

3 Я больше покопался в возможной причине проблемы и наткнулся на этот источник , который всегда из официальной документации. Я применил то, что было рекомендовано, но проблема все еще сохраняется.

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

1 Ответ

2 голосов
/ 05 января 2020

Строка, как сейчас, не создает массив. Если вы хотите создать пустой массив, попробуйте

fac = [];

Но теперь возникает вопрос, зачем передавать пустой массив в numjac? Если массив будет создан в последней функции, нет необходимости передавать его в качестве аргумента. Фактически, если массив, переданный в качестве аргумента, изменяется в функции, Matlab создает новый массив.

...