2016-04-16 2 views
1

необходимо решить систему нелинейных дифференциальных уравнений: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/дт, dx2/dt & dx3/dt.

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

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

ответ

0

Вы должны заменить 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,:)) 
Смежные вопросы