Matlab: оценка коэффициентов нелинейных дифференциальных уравнений

Необходимо решить систему нелинейных дифференциальных уравнений:

x1p = a1*u2*x1^1.3 + a2*u1 + a3*u3
x2p = (a4*u2 + a5)*x1^1.3 + a6*x2
x3p = (a7*u3 + (a8*u2-a9)*x1)/a10

x1p, x2p и x3p являются производными по времени от x1, x2 и x3, то есть dx1/dt, dx2/dt и dx3/dt.

у нас есть дискретные данные x1, x2 и x3, а также u1, u2 и u3. Нам нужно решить задачу, чтобы получить неизвестные коэффициенты a1, a2, …, a10.

Проверил много сообщений и могу сказать, что решение включает ODE45 (или другой ODEX) и, возможно, fsolve или fminsearch (Matlab), но не удалось правильно настроить проблему, думаю, мы плохо понимаем кодирование. Пожалуйста, предложения.


person Rok Petric    schedule 16.04.2016    source источник


Ответы (1)


вы должны заменить x1p, x2p и x3p, используя определение производной: x1p = (x1(i+1) - x(i))/ dt и так для остальных. затем используйте следующий алгоритм (он не завершен):

descrete data of x1, x2 & x3 as well as of u1, u2 & u3
dt = 0.01
myFun = @(a,x1,x2,x3,u1,u2,u3)
   [ (x1(i+1) - x1(i))/ dt = a(1)*u2(i)*x1(i)^1.3 + a(2)*u1(i) + a(3)*u3(i);   
     (x2(i+1) - x2(i))/ dt = (a(4)*u2(i) + a(5)*x1(i)^1.3 + a(6)*x2(i);
     (x3(i+1) - x3(i))/ dt = (a(7)*u3(i) + (a(8)*u2(i)-a(9))*x1(i))/a(10) ]
A=[];
a0 = [0; 0; 0 ;0 ;....   ]
for i= 1:1: lenngth(x1) 
a=fsolve(@(a)myFun(a,x1,x2,x3,u1,u2,u3),a0,options);
a0 = [ a(1,1) ; a(2,1); a(3,1) ; .......]
A = cat(1,A,a) ;
end 
a1 = mean(A(1,:))
a2 = mean(A(2,:))
.
.
a10 = mean(A(10,:))
person ayhan    schedule 06.07.2017