У меня есть экспериментальные данные (концентрация в зависимости от времени), и у меня есть набор ODE в качестве модели, чтобы подогнать их под неизвестные параметры (k).
Однако у меня есть это сообщение об ошибке: «Невозможно выполнить назначение, потому что размер левой стороны 1 на 1, а размер правой стороны 1 на 9». Я проверил, и он принадлежал функции opt.
Также , У меня нет решения для моих ODE?!
С уважением,
global td cd ci ki
T = readtable('experimental_data.xlsx','Sheet',2);
T1= T.Variables;
td= T1(:,1); %experimet time
cd= [T1(:,4), T1(:,3),zeros(9,1),T1(:,2),T1(:,5),zeros(9,1),T1(:,6),T1(:,7),T1(:,8)]; %species concentration
ci= [0.136 0.193 0 0.271 0 0 0 0 0]'; %initial concentration
ki= [1 1 1 1 1 1 1 1 1 1]'; %initial k guess
opt = fminsearch(@(k) optim(td,cd,k,ci), ki); %optimization function (ERROR)
function dc = diff(k,t,C)
r1= (-k(1)* C(1))/(1+ k(10) * C(5));
r2= (k(1) * C(1) - k(2) * C(2))/(1+ k(10) * C(5));
r3= (k(2) * C(2) - k(3) * C(3))/(1+ k(10) * C(5));
r4= (k(3) * C(3) - k(3) * C(3))/(1+ k(10) * C(5));
r5= (k(4) * C(4) - k(5) * C(5) -k(6)*C(5))/(1+ k(10) * C(5));
r6= (k(6) * C(5) - k(7) * C(6) -k(8)*C(6))/(1+ k(10) * C(5));
r7= (k(8) * C(6) - k(9) * C(7))/(1+ k(10) * C(5));
r8= (k(5) * C(5) + k(7) * C(6))/(1+ k(10) * C(5));
r9= (k(9) * C(7))/(1+ k(10) * C(5));
dc = [r1;r2;r3;r4;r5;r6;r7;r8;r9];
end
function SSE = optim(td,cd,k,ci)
global td cd ci
f = @(t,C) diff(k,t,C);
[tm, cm] = ode45(f, td, ci); %cm is the concentration predicted by the model
err = cd - cm;
SSE = sum(err.^2); %sum squared-error.
end