Ошибка решения системы дифференциальных уравнений с одним дифференциальным уравнением третьего порядка в Matlab. Размеры массива не совпадают - PullRequest
0 голосов
/ 10 марта 2020
J1 = 18.041;
J2 = 1.99;
J3 = 6.58;
J4 = 1.46;
J5 = 7.50;
J6 = 15.46;
J7 = 4.21;
J8 = 7.68;
J9 = 24.84;
J10 = 8.58;
J11 = 6.57;
J12 = 4.20;
J13 = 4.63;
J14 = 0.7648;
J15 = 0.3607;
J16 = 68.48;
Js1 = 145.09;
Js2 = 128.58;
Js3 = 138.841;
Js4 = 145.09;
Jcar = 1.7916;
Jhollow = 1.478;
r1 = 45;
r2 = 46;
r3 = 38;
r4 = 15;
r5 = 37;
r6 = 68;
r7 = 29;
r8 = 37;
r9 = 60;
r10 = 33;
r11 = 29;
r12 = 27;
r13 = 52;
r14 = 19;
r15 = 16;
r16 = 57;
k0 = 241.32;
w2 = 1000;
kcar = 0.356;
khollow =  6.091;
D = 4867.91;

%syms h3(t) x3(t) theta2(t) theta1(t) x2(t) h4(t) h5(t) h1(t) h2(t) x1(t) 

%ode1 = diff(h3)- (J4*r9*(diff(theta2,2)))/r4 == (theta2*khollow*r9)/r4 - kcar*theta1;
%ode2 = diff(x3,t) - (h3/J8)*r8 + w2*r3 == 0;
%ode3 = diff(x2,t) - (h2/J10)*r10 + w2*r5 == 0; 
%ode4 = diff(theta2,t)*(r4- 1/(k0*r4)) - (diff(theta2,t,3)/(k0*r4)) - h3*r9/(J9 + Js1) + w2*r4 == 0;
%ode5 = diff(h1,t) - D*r16*(diff(x1)) == k0*x1*r16  -  D*r16*((h4*r14)/(Js2 + J1 + (Jcar/3)));
%ode6 = diff(x1,t) - (h4)*r14/(Js2 + J1 + (Jcar/3)) + h1*r16/J16 == 0;
%ode7 = diff(h5,t) - x3*k0*r8 == 0;
%ode8 = diff(h2,t) - x2*k0*r10 == 0;
%ode9 = diff(h4,t) - kcar*theta1 - (2*h4*D)/(Js2 + J1 + (Jcar/3)) + k0*x1*r14 == 0;
%ode10 = diff(theta1,t) - h3/(J9 + Js1) + (h4)/(Js2 + J1 + (Jcar/3)) == 0;
%odes = [ode1; ode2; ode3; ode4; ode5; ode6; ode7; ode8; ode9; ode10];
%S = dsolve(odes);

f = @(t,x) [(J4*r9*(diff(x(4),2)))/r4 + (x(4)*khollow*r9)/r4 - kcar*x(10); 
    (x(1)*r8)/(J8) - w2*r3;
    (x(8)/J10)*r10 - w2*r5;
    (x(1)*r9)/(J9 + Js1)*r4 + (diff(x(4)) + diff(x(4),3))/(k0*r4*r4) - w2; 
    k0*x(6)*r16 - D*r16*(((x(9))*r14)/(Js2 + J1 + (Jcar/3)) - diff(x(6))); 
    (x(9)*r14)/(Js2 + J1 + (Jcar/3)) - (x(5)*r16)/J16; 
    x(2)*k0*r8;
    x(3)*k0*r10; 
    kcar*x(10) - x(9)*2*D/(Js1 + J1 + (Jcar/3)) -k0*x(6)*r14;
    x(1)/(J9 + Js1) - x(9)/(Js2 + J1 + (Jcar/3))];

[t,xa] = ode45(f,[0 1.5], [0 2 2 2 2 3 1 9 9 1])

Размеры массива не соответствуют погрешности вывода Matlab. Закомментированный код выполняется долгое время и не выдает результатов после его запуска в течение 15-20 минут. Дифференциальные уравнения решаются с использованием ODE 45. Буду очень признателен за помощь в этом. Дифференциальные уравнения получены из анализа механической коробки передач с двойным сцеплением с использованием метода графа связей.

1 Ответ

0 голосов
/ 11 марта 2020

Прежде чем поместить функцию типа f в оду, попробуйте. Он уже сломан, и вы получаете ту же ошибку при вызове f(t,x). Далее отлаживая его, оцените строки f по одной:

>> (J4*r9*(diff(x(4),2)))/r4 + (x(4)*khollow*r9)/r4 - kcar*x(10)

ans =

     []

>> (x(1)*r8)/(J8) - w2*r3

ans =

      -38000

Первая строка содержит 0 элементов, вторая - 1 элемент. Я не продолжил, но это уже проблема. В каждой строке должно быть одинаковое количество элементов, вероятно, 1 в вашем случае.

...