Ошибка MATLAB: не-одноэлементные rhs-размеры, чем не-одноэлементные индексы - PullRequest
0 голосов
/ 14 октября 2018

Следующий код работает нормально и дает точный результат.

c1 ... c5 - известные константы, а x (1) ... x (5) (анонимный вектор) - неизвестные переменные, которые длябыть приспособленным fminsearch, используя метод наименьших квадратов.(t, y) - данные (кривая) для соответствия уравнению, myfunc - это функция ode45, сохраненная в отдельном файле .m.

% run the solver
options = optimset('MaxFunEvals',10000,'MaxIter',10000,'Display','iter');
[x,fval,exitflag,output] = fminsearch(@(x) Obj(x,initial_p,c1,c2,c3,c4,c5,c6,t,y),x0,options);

function F = Obj(x,initial_p,c1,c2,c3,c4,c5,c6,t,y)
    p = myfunc(x(2:end),initial_p,t,c1,c4);
    yt = mainfunc(x,p,c1,c2,c3,c4,c5,c6);
    F = sqrt(sum((yt-y).^2));
    disp(x);
end

function yt = mainfunc(x,p,c1,c2,c3,c4,~,~)
    yf = c1*c2*c3*c4*sqrt(p);
    yt = x(1)+yf;
end

Но возникает ошибка (Assignment has more non-singleton rhs dimensions than non-singleton subscripts) когда я переписываю mainfunc (все остальное тоже самое):

function yt = mainfunc(x,p,c1,c2,c3,c4,c5,c6)
    ys = c1*c3*(c5/(c6*sqrt(p)));
    yf = c1*c2*c3*c4*sqrt(p);
    yt = x(1)+ys+yf;
end

p - это кривая (t, p), исходящая из ode45 в myfunc, она отлично работает в первой версиикода, так что никаких проблем нет.Вызывает ли проблема наличие двух терминов с sqrt (p) в mainfunc?

...