登录论坛

查看完整版本 : [MATLAB数学相关] 求非线性方程在不进行线性化的情况下离散化


yuan_buct
2009-04-14, 23:26
已知非线性随机微分方程dx/dt=f(x,u)+w(t),其中x为系统状态向量,u为控制输入向量,w(t)为零均值高斯白噪声向量,我的课题需要先将该方程离散化(但不进行线性化),然后针对离散化后得到的非线性离散随机系统,利用可观测量的采样值使用非线性滤波方法对其进行估计,这其中离散化环节该如何处理?怎么用matlab实现啊?急用,谢谢了!

zt_zt
2009-04-15, 03:13
先线性化再离散没有固定的公式
离散化需要人工做<--此处笔误。下文是正确的

yuan_buct
2009-04-15, 17:36
谢谢你的答案,但我想问用龙哥库塔法解出微分方程的数值解后,怎么再按给定的采样时间进行离散化啊?

zt_zt
2009-04-16, 01:27
离散化不是问题,c2d(sys,T)就可以了。关键问题是线性化,每走一步就要线性化一次计算量太大。如果你的系统特殊就先吧线性化表示成函数就变成时变系统了。或者采用次优滤波。

yuan_buct
2009-04-16, 17:37
我是用UKF滤波算法,所以不能进行线性化?c2d()对于非线性系统也可以?sys怎么代入啊?但是用EKF算法需要线性化,我也愁着呢。

yuan_buct
2009-04-16, 17:46
系统很简单,是二阶微分方程组dx1/dt=-x2;dx2/dt=-0.2(1-x1^2)*x2

yuan_buct
2009-04-16, 17:47
写错了,是dx1/dt=-x2;dx2/dt=-0.2(1-x1^2)*x2+x1,y=[x1 x2]'

zt_zt
2009-04-17, 01:30
UKF的话好像不要线性化的。可能我记错了,大概是跟PF差不多思想的吧。c2d是线性化以后再做的。
比方说你那个方程在某点线性化后a=[1 2;3 4],b=[1 2],c=[3 4],d=0
就调用sys=c2d(ss(a,b,c,d),T).T为采样时间。
让后回的sys可以直接带matlab自带kalman函数。
或者G=eye+T*a B=B H=T*B d=0离散化,但此时X(t)—>X(kT)中T未提出,所以最终滤波结束请在X(k)上乘以T。(也可以在滤波前就处理下,感觉都差不多的)

yuan_buct
2009-04-19, 12:50
呵呵,还是不太明白,我已经解出微分方程得到一些离散的数值解,但怎么利用这些解或者原来那个连续的微分方程得出一个离散的系统的方程呢?因为滤波要用离散后的方程啊。谢谢

zt_zt
2009-04-20, 02:31
在你算到的点上面tylor或者其他正交基展开啊
例:
x'=sin(x)得到离散解x=0 y=0(胡乱写的解)
在00处tylor展开得阶数根据精度选(采用其他正交基更适合计算机算,比如埃米尔特)
x'=sin(0)+cos(0)x-cos(0))/(3!)*x^3+o(x^3)

x'=[0 1 0 -1/6]*[1 x x^2 x^3]'
这个就是在点(0,0)附近的线性化了。
然后对系统a=[0 1 0 -1/6] b=???? c=?? d=0离散化
sys=ss(a,b,c,d)注意,这里用ss(a,b,c,d,T)得到离散系统时abcd是作为离散系统的矩阵对应脉冲传递或者差分和上面微分方程不一样,所以在做c2d
c2d(sys,T)
这样子说不清楚,你还是查查相关资料吧,比如kalman filtering theory:using matlab等

yuan_buct
2009-06-11, 23:07
呵呵,谢谢啊,想问一下matlab中有kalman工具箱吗?