Да, это возможно.Вы можете упаковать свои функции в массив ячеек и указать их значения в качестве параметров при цикле по этому массиву ячеек
t = (0:0.1:100)';
conc = rand(size(t));
% Packing your function handles in a cell array ( I do not have the
% symbolic math toolbox, so I used function handles here. In your case you
% have to pack your equations equ_n(x) in between the curly brackets{} )
allfuns = {@(x) 10*x.^2+1, ...
@(x) 5*x.^3+10*x.^2, ...
@(x) 5*x.^3+10*x.^2};
% Allocate memory
y = zeros(length(t), length(allfuns));
p = zeros(2,length(allfuns));
yfit = zeros(length(t), length(allfuns));
rms = zeros(1, length(allfuns));
% Loop over all functions the cell, applying your functional chain
for i=1:length(allfuns)
y(:,i) = allfuns{i}(t);
p(:,i) = polyfit(t,y(:,i),1);
yfit(:,i) = p(1,i)*conc+p(2,i);
rms(:,i) = double(sqrt((sum((yfit(:,i)-y(:,i)).^2)./ ...
length(yfit(:,i)))));
end
Это приводит к
>> rms
rms =
1.0e+06 *
0.0578 2.6999 2.6999
Вы можете расширить это до произвольного числауравнений в allfuns
.
Кстати: вы подгоняете многочлены 1-го порядка с polyfit
к значениям, рассчитанным с помощью функций 2-го и 3-го порядка.Это приводит, конечно, к грубым припадкам с максимумом rms
.Я не знаю, как выглядит ваша полная проблема, но вы можете определить массив poly_orders
, содержащий полиномиальный порядок каждой функции в allfuns
.Если вы дадите эти значения в качестве параметра для функции polyfit
в цикле, ваши подгонки будут работать лучше.