声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1485|回复: 5

求助!!仿真结果和预想的不一样!!

[复制链接]
发表于 2007-5-10 11:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我的仿真结果和预想中的不一样,跟踪误差应该是趋向于0的,但实际却是在-2~2之间波动.设断点运行程序,其中的一个U始终是NAN,我不知道到底是那里出了问题,请知道的帮我检查下!!谢谢!!!
chap_1s的程序
function[sys,x0,str,ts] = spacemodel(t,x,u,flag)
switch flag,
    case 0,
       [sys,x0,str,ts]=mdlInitializeSizes;
    case 3,
        sys=mdlOutputs(t,x,u);
    case{2,4,9}
        sys=[];
    otherwise
        error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts] = mdlInitializeSizes%初始化
sizes = simsizes;
sizes.NumContStates = 0;   %模块连续状态变量的个数
sizes.NumDiscStates = 0;   %模块离散状态变量的个数
sizes.NumOutputs    = 1;   %模块输出变量的个数
sizes.NumInputs     = 3;   %模块输入变量的个数
sizes.DirFeedthrough =1;  %模块是否是输入能直接控制输出
sizes.NumSampleTimes =1;   %模块的采样时间个数,至少是一个
sys = simsizes(sizes);     %设置完后赋给sys输出
x0 = [];                   %状态变量设置为空,表示没有状态变量
str = [];                  %保留参数
ts = [0 0];               %采样周期设为0表示是连续系统
function sys=mdlOutputs(t,x,u)%输出
g=9.8;
m=1;
l=0.25;
d=2.0;
a=20.0;b=15.0;
I=4/3*m*l^2;
r=u(1);
x1=u(2);
x2=u(3);
dr=2*pi*cos(2*pi*t);
ddr=-(2*pi)^2*sin(2*pi*t);
e=x1-r;
de=x2-dr;
tol=(d-a*I)*de-b*I*e+I*ddr+d*dr+m*g*l*cos(x1);
sys(1)=tol;%连续部分

chap_1plant的代码
function[sys,x0,str,ts] = spacemodel(t,x,u,flag)
switch flag,
    case 0,
        [sys,x0,str,ts]=mdlInitializeSizes;
    case 1,
        sys=mdlDerivatives(t,x,u);
    case 3,
        sys=mdlOutputs(t,x,u);
    case{2,4,9}
        sys=[];
    otherwise
        error(['Unhandled flag = ',num2str(flag)]);
end
function[sys,x0,str,ts] = mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates =2;
sizes.NumDiscStates =0;
sizes.NumOutputs    =2;
sizes.NumInputs    =1;
sizes.DirFeedthrough =0;
sizes.NumSampleTimes =1;
sys = simsizes(sizes);
x0 = [0;0];
str = [];
ts = [0 0];
function sys=mdlDerivatives(t,x,u)
g=9.8;
m=1;
l=0.25;
d=2.0;
I=4/3*m*l^2;
tol=u;
sys(1)=x(2);
sys(2)=1/I*(-d*x(2)-m*g*l*cos(x(1))+tol);
function sys=mdlOutputs(t,x,u)
tol=u;
sys(1)=x(1);
sys(2)=x(2);

[ 本帖最后由 cdwxg 于 2007-5-10 17:59 编辑 ]

chap10_1.mdl

25.79 KB, 下载次数: 9

chap_1s.m

1.12 KB, 下载次数: 6

chap_1plant.m

822 Bytes, 下载次数: 5

chap_1plot.m

306 Bytes, 下载次数: 5

回复
分享到:

使用道具 举报

发表于 2007-5-10 11:08 | 显示全部楼层
我这里没软件,你现在先把你的模型的图片发上来我看下
整个系统的图片.也不知道是否能帮助你.
\波动表示了震荡表示了不稳定,表示你的控制没有达到理想效果的,还需要调节参数.
其中的一个U始终是NAN?这个U是什么呢?
你的设置断点运行是否影响到了U?你的是全局变量还是系统的一个中间输出?
 楼主| 发表于 2007-5-10 11:47 | 显示全部楼层

回复 #2 cdwxg 的帖子

U是chap_1plant里面mdloutputs(t,x,u)中的,它始终显示NAN,但其他的几个U,比如chap_1s中的U都是会变化的,我不知道你所说的参数是不是模型仿真设置的参数还是程序里面的参数...
发表于 2007-5-10 18:01 | 显示全部楼层
这个问题现在来看还不是很清楚,是不是出在tol=u这2个语句上?
 楼主| 发表于 2007-5-10 18:11 | 显示全部楼层

回复 #4 cdwxg 的帖子

第一个TOL=U是有的,后面那个是我自己加的,程序中本来是没有的,我是想找下错误的
发表于 2007-5-10 19:03 | 显示全部楼层

刚服务器停掉了,设置断点来判断逻辑是有点难!

大家帮忙看下这个程序,2个程序基本类似。主要是最后的output部分。
期待大家的回答。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-26 20:19 , Processed in 0.098424 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表