知道x(t+1)和x(t)的关系,怎么用MATLAB拟合?
答案:1 悬赏:0 手机版
解决时间 2021-11-23 03:02
- 提问者网友:饥饿走向夜
- 2021-11-22 06:44
知道x(t+1)和x(t)的关系,怎么用MATLAB拟合?
最佳答案
- 五星知识达人网友:春色三分
- 2021-11-22 07:13
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;一致。
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;一致。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯