知道x(t+1)和x(t)的关系,怎么用MATLAB拟合?

已知x(t+1)=x(t)+r*[1-x(t)/xm]*x(t),已知t=0:1:16,x=[...]应该怎么去拟合这个模型?

lz题目不是很清楚哈。

1、如果,已知模型、参数和初值,只需要仿真一下,那么很简单,可采用如下程序:

t=0:1:16;

N=length(t);

x=zeros(1,N);

x(1)=1;%初始化

r=0.01;

xm=10;

for ii=1:N-1

    x(ii+1)=x(ii)+r*(1-x(ii)/xm)*x(ii);

end

plot(t,x)

2、如果只知模型结构和输入t输出x,不知道模型中的参数如xm,r和初值,而要求我们参数辨识。这种辨识问题较复杂,针对lz问题,提供两种方法:

a, 离散模型转连续模型。连续模型为:dx/dt=r*[1-x/xm]*x。此连续模型解析解为:x(t)=xm*c*exp(rt)/(1+c*exp(rt)),参数有r、xm和c三个。此时就可以利用matlab的curve fitting工具箱。其中拟合函数项选用自定义,将上述函数写入即可。如图所示

b, 构建最小二乘函数。利用1中的程序,将参数xm, r作为因变量,在一组固定的输入xm,r下,模型中预测值与实际值的误差平方和作为函数值。再利用matlab最优化工具箱,对该函数进行优化,求出使得该函数取最小时的xm和r。具体代码如下:

函数的M文件:

function f=err2(p)

xm=p(1);

r=p(2);

%需要拟合的数据点,由于lz没给,我自己设定如下:

x0=[1.0000    1.0090    1.0181    1.0272    1.0364    1.0457    1.0551    1.0645    1.0740    1.0836    1.0933    1.1030    1.1128    1.1227    1.1327    1.1427    1.1529];

%% 仿真模型预测数据:

N=length(x0);

x=zeros(1,N);%初始化

x(1)=x0(1);

for ii=1:N-1

    x(ii+1)=x(ii)+r*(1-x(ii)/xm)*x(ii);

end

%% 求差方和

f=(x-x0)*(x-x0)'; 

end

优化的M文件

p = fminsearch(@(x) err2(x),[5;0.02];%[5;0.02]是初始迭代值,有时需要试几次。

xm=p(1);

r=p(2);

运行结果:  xm= 10.6867, r= 0.0099。与模型中设定参数r=0.01;

xm=10;一致。

温馨提示:答案为网友推荐,仅供参考
相似回答