作业帮 > 综合 > 作业

将人口死亡率分为趋势项与周期项 ,用matlab如何对数据进行处理,趋势项可看为负指数分布,周期项三角函

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/07/08 11:38:42
将人口死亡率分为趋势项与周期项 ,用matlab如何对数据进行处理,趋势项可看为负指数分布,周期项三角函
t为年份,y为年死亡率;t=[1978:2009];
y=[0.02 0.018 0.0178 0.017 0.014 0.01318 0.01228 0.0114 0.0108 0.01198 0.01459 0.01791 0.01424 0.01002 0.01211 0.0115 0.0095 0.00883 0.00843 0.00821 0.00803 0.0076 0.00732 0.00761 0.00704 0.00734 0.00732 0.00725 0.00687 0.00625 0.00621 0.00634 0.00636 0.0066 0.0069 0.00682 0.00678 0.00686 0.00672 0.00664 0.00654 0.00667 0.0067 0.00664 0.00664 0.00649 0.00657 0.00656 0.00651 0.0065 0.00646 0.00645 0.00643 0.00641 0.0064 0.00642 0.00651 0.00681 0.00693 0.00706 0.00708];
将人口死亡率分为趋势项与周期项 ,用matlab如何对数据进行处理,趋势项可看为负指数分布,周期项三角函
要用非线性最小二乘拟合lsqcurvefit:
首先编写假设的函数:
function F=myfun(x,xdata)
F=x(1)*cos(x(2)*xdata)+x(3)*exp(-x(4)*xdata);
其中 x(1),x(2)...为要拟合出来参数
再进行拟合,用年份做变量不太方便,我改了一下,你可以改回来
t=0.5:0.5:30.5;
t=t';
y=[0.02 0.018 0.0178 0.017 0.014 0.01318 0.01228 0.0114 0.0108 0.01198 0.01459 0.01791 0.01424 0.01002 0.01211 0.0115 0.0095 0.00883 0.00843 0.00821 0.00803 0.0076 0.00732 0.00761 0.00704 0.00734 0.00732 0.00725 0.00687 0.00625 0.00621 0.00634 0.00636 0.0066 0.0069 0.00682 0.00678 0.00686 0.00672 0.00664 0.00654 0.00667 0.0067 0.00664 0.00664 0.00649 0.00657 0.00656 0.00651 0.0065 0.00646 0.00645 0.00643 0.00641 0.0064 0.00642 0.00651 0.00681 0.00693 0.00706 0.00708]';
x=lsqcurvefit(@myfun,[2 1 0.01 0.04],t,y) %第二项那个向量是迭代的初始值,你可以自己反复试,直到图像符合,而且算出来的x比较稳定时,即为你要的解.
y1=x(1)*cos(x(2)*t)+x(3)*exp(-x(4)*t);
plot(t,y,'or',t,y1,'b-')
再问: 怎么运行不了啊,求详细过程 ??? Undefined function or variable "t". Error in ==> lsqcurvefit at 149 [t,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ... 神马意思,先谢谢了
再答: 你把我写的从t=0.5:0.5:30.5;。。。。开始全部复制粘贴过去呀 你没有定义t,所以才会??? Undefined function or variable "t". 这个t就相当于你的年份呀
再问: 可是我确实定义了t,还把xdata改为t试了一下,就是出错。。。
再答: 你有没有把 function F=myfun(x,xdata) F=x(1)*cos(x(2)*xdata)+x(3)*exp(-x(4)*xdata); 单独写成一个m文件? 你给我留言吧,再追问要扣分了