[問題] 請教 解ODE聯立方程式已回收
============================[前言]==========================================
首先我先令4個狀態變數:x1 x2 x3 x4
我要解的方程式如下:
d(x1)
--------= x2
dt
d(x2)
--------= F1+G1*T
dt
d(x3)
--------= x4
dt
d(x4)
--------= F2+G2*T
dt
其中
(a2+a6)*sin(x1) + a4*cos(x1) + (a3+a5)*sin(x1)*cos(x1)*x2^2
F1= ---------------------------------------------------------------
(a11+a13)*cos(x1)*cos(x1) +a12
1
G1= -----------------------------------
(a11+a13)*cos(x1)*cos(x1) +a12
F2= a10 + a8*sin(x1)*x2^2 + a9*F1*cos(x1)
G2= a9*G1*cos(x1)*T
這裡面的 a11 a12 a13 a2 a3 a4 a5 a6 a7 a8 a9 都是固定不變的常數
[-α - (λ1*x2+F1)*sign(s1) - λ2*(λ3*x4+F2)*sign(s2)]
T = ------------------------------------------------------------------
G1*sign(s1) + λ2*G2*sign(s2)
s1 = x2 + λ1*x1
s2 = x4 + λ3*x3
這裡面的 αλ1 λ2 λ3 都是固定不變的常數
sign 是判斷括弧內東西是正數還是負數,如果括弧內是正數 sign()= 1
如果括弧內是負數 sign()=-1
============================[問題]===========================================
我想問為什麼程式只能跑到時間等於3?
如果想要把時間軸拉長過3秒,就會出現 Memory 的錯誤訊息
我之前的想法是:我的資料量太大所以 Memory 負荷不了,才會出現錯誤
我之前的解決方法:改用 ode23t 較不精準的解法。
使用 ode23t 是可以把時間拉到13秒,但x1值卻變成發散。
請問版上各位有沒有辦法可以解決,
把秒數拉長卻不會出現錯誤信息,也不會造成數值發散的方法
謝謝
==================================[CODE]=================================
[t,x] = ode45(@pp,[0 0.7],[0.1,0,0,0]);
function dx = pp(t,x)
dx = zeros(4,1);
M=5; % 下質量塊重
M2=20; % 車輪重
m=2; % 上質量塊重
m1=1; % 桿
a=0.1; % 桿上半部長
b=0.02; % 桿下半部長
r=0.04; % 車輪半徑
l=0.12; % 桿總長
%% 其他參數
g=9.8; % 重力加速度
N=(M+M+m+m1)*g; % 整個系統正向力
kf=0.85; % 車輪與地面摩擦係數
% 自訂參數
landa1=0.9; % λ = 1
landa2=0.8;
landa3=5;
alfa=10;
% 滑動參數 S
s1=x(2)+landa1*x(1);
s2=x(4)+landa3*x(3);
%系統參數
a11=(M*b+m*a)*(M*b-m*a)/(-M-M2-m-m1);
a12=-1/3*m*l*l-m*b*b;
a13=(M*b*b-m*a*a);
a2= M*g*b;
a3= ((M*b+m*a)*(M*b-m*a)/(-M-M2-m-m1);
a4= (M*b+m*a)*(-kf*N)/(-M-M2-m-m1);
a5= -(M*b*b+m*a*a);
a6= -(m*a+m1*(l/2-b))*g;
a8=-(-M*b+m*a)/((-M-M2-m-m1)*r);
a9=-(M*b-m*a)/((-M-M2-m-m1)*r);
a10=(-kf*N)/((-M-M2-m-m1)*r);
F1= (a4*cos(x1)+(a2+a6)*sin(x1)+(a3+a5)*sin(x1)*cos(x1)*x2^2)...
/((a11+a13)*cos(x1)*cos(x1)+a12);
G1= 1/((a11+a13)*cos(x1)*cos(x1)+a12);
F2= a10+a8*sin(x1)*x2^2+a9*F1*cos(x1);
G2= a9*G1*cos(x1)*T;
%% Input T
T = (-alfa-(landa1*x(2)+F1)*sign(s1)-landa2*(landa3*x(4)+F2)*sign(s2) )...
/(G1*sign(s1) + landa2*G2*sign(s2));
%% STATE EQUATION
dx(1,1)=x(2);
dx(2,1)=F1+G1*T;
dx(3,1)=x(4);
dx(4,1)=F2+G2*T;
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.59.152
推
08/15 12:06, , 1F
08/15 12:06, 1F
推
08/15 12:13, , 2F
08/15 12:13, 2F
→
08/15 12:14, , 3F
08/15 12:14, 3F
→
08/17 09:56, , 4F
08/17 09:56, 4F
→
08/17 09:57, , 5F
08/17 09:57, 5F
→
08/17 11:01, , 6F
08/17 11:01, 6F
→
08/17 11:02, , 7F
08/17 11:02, 7F
→
08/17 11:02, , 8F
08/17 11:02, 8F
推
08/17 17:36, , 9F
08/17 17:36, 9F
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章