24小时热门版块排行榜    

CyRhmU.jpeg
查看: 803  |  回复: 3

Hongtan

木虫 (著名写手)

[求助] 求助:控制器u随状态变化而切换时的ode45求解

考虑的系统很简单,即

\dot x_1=x_2
\dot x_2=u

u=-U sign(x_1-\beta x_1m)

其中x_1m 为 \dot x_1=0 时的值,也即 \dot x_1=0 时, x_1m 就变化一次, 且初始值为 x_1m=x_1(0)

我的程序是

主程序

clear all
global i;
global x10;
global M;

i=1;
tfinal=5;
step=0.001;
t0=[0:step:tfinal];
x10=2;
x20=1;
x0=[x10,x20];

[t,x]=ode45('slide',t0,x0);

figure(1)
subplot(2,2,1)
plot(t,x(:,1),'k-',t,x(:,2),'k:','Linewidth',1);
xlabel('t');
ylabel('x');



子程序

function y=slide(t,x)
global i
global x10;
global M;

U=6;
beta=0.5;

M(1)=x10;
if abs(x(2))<=0.1;
i=i+1;
M(i)=x(1);
end
x_1m=M(i);

u=-U*sign(x(1)-beta*x_1m);   

f1=x(2);
f2=3*sin(x(1))+(2+sin(t))*u;
y=[f1;f2];
t

但是,求解以后不对。希望得到高手帮助。
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

信彼南山

木虫 (著名写手)

程序怎么这么乱啊?
M(1)=x10;
if abs(x(2))<=0.1;
i=i+1;
M(i)=x(1);
end
x_1m=M(i);

这一段想做什么?
2楼2011-04-20 22:14:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Hongtan

木虫 (著名写手)

引用回帖:
Originally posted by 信彼南山 at 2011-04-20 22:14:15:
程序怎么这么乱啊?
M(1)=x10;
if abs(x(2))<=0.1;
i=i+1;
M(i)=x(1);
end
x_1m=M(i);

这一段想做什么?

这一段是切换,呵呵。x_10是x_1的初始值,作为x_1m的初始值。因为无法实现正好在时刻 \dot x_1(t)=0 的时候切换,所以就取满足|\dotx_1|=|x_2|<0.1时,x_1m切换到下一个值。
3楼2011-04-20 22:31:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

信彼南山

木虫 (著名写手)

你那段if一共就执行1次,切换什么了?
我咋没弄明白呢?
4楼2011-04-20 23:15:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 Hongtan 的主题更新
信息提示
请填处理意见