信息

这个问题是关闭的。重新编辑或回答。

这段代码之后,我还有问题没有足够的输入参数。错误的开关信号。任何人请卡尔曼滤波器可以检查代码并检查为什么它不工作。

1视图(30天)
函数(sys, x0, str, ts) = SimuKalmanFilter (t, x, u,标志)
开关国旗
情况下0
(sys, x0, str, ts) = mdlInitializeSizes;
情况下1
sys = mdlDerivatives (t, x, u);
情况下2
sys = mdlUpdate (t, x, u);
情况下3
sys = mdlOutputs (t, x, u);
情况下4
sys = mdlGetTimeOfNextVarHit (t, x, u);
情况下9
sys = mdlTerminate (t, x, u);
否则
错误([= ' '未处理的标志num2str(国旗)]);
结束
函数(sys, x0, str, ts) = mdlInitializeSizes
大小= simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 1;
sizes.NumOutputs = 1;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(大小);
x0 = 5000 + sqrt (5) * randn;
str = [];
t = 0 [1];
全球P;
P = 5;
函数sys = mdlDerivatives (t, x, u)
sys = [];
函数sys = mdlUpdate (t, x, u)
全球P;
F = 1;
B = 0;
H = 1;
Q = 0;
R = 5;
xpre = F * x + B * u;
Ppre = F * P * F + Q;
K = Ppre * H ' *发票(H * Ppre * H + R);
e =你* xpre;
xnew = xpre + K * e;
P =(眼(1)- k * H) * Ppre;
sys = xnew;
函数sys = mdlOutputs (t, x, u)
sys = x;
函数sys = mdlGetTimeOfNextVarHit (t, x, u)
sampleTime = 1;
sys = t + sampleTime
函数sys = mdlTerminate (t, x, u)
sys = [];
如果真正的
%的代码
结束
2的评论
穆罕默德Chaouechi
穆罕默德Chaouechi 2017年10月19日
> > SimuKalmanFilter没有足够的输入参数。错误SimuKalmanFilter(2)行开关标志或> > SimuKalmanFilter (t, x, u,国旗)未定义的函数或变量“t”。

答案(1)

罗伯特·亨森
罗伯特·亨森 2017年10月18日
你运行这个函数通过按“运行”按钮?如果是这样,因为这个函数需要输入你需要覆盖默认行为的运行命令。的 在编辑器中运行功能 部分的MATLAB编程Guidedescribes如何做到这一点。
或者您可以使用命令窗口。假设你有加载变量t, x, u,国旗到您的工作空间,然后在命令窗口中输入:
(sys, x0, str, ts) = SimuKalmanFilter (t, x, u,标志)
按下运行按钮,无需修改默认行为是相当于打字
SimuKalmanFilter
在命令窗口中。也就是说,所有的输入传递给函数。
2的评论
罗伯特·亨森
罗伯特·亨森 2017年10月20日
如果x, t, u和旗帜在工作区中并不那么你将继续得到错误。我仍然不确定你打算如何使用,但看着你的函数看起来当国旗0你生成一些数据,然后在进一步的迭代中当国旗你用这些数据去做一件事是另一个值。如果是这样你可以添加这个文件的顶部
如果输入参数个数= = 0
国旗= 0;
结束
解决“没有足够的输入”的问题,但这可能只是把问题当标志= 1。
文档有很多例子来帮助您熟悉如何函数被称为从命令窗口中,从编辑器,在仿真软件。万博1manbetx这可能是一个好的开始://www.tianjin-qmedu.com/help/simulink/sfg/s-function-万博1manbetxexamples.html

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!