向前/向后差分进行拟合

差分
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

clc, clear
format short e

% load每行列数一定要相同
% textread的空白部分会读入0
% readtable、readmatrix的空白部分是NAN
a=readtable('data6_18.txt')%readmatrix 2019版本加入
a=table2array(a)

fp= fopen('data6_18.txt','r');
textcell = textscan(fp,'%f %f %f %f %f %f %f %f','delimiter',' ');   %按最多的列进行格式化,以空格为分割
a=cell2mat(textcell);     %转成矩阵形式,再通过Nan判断数据是否有效即可
fclose(fp);

x=a([2:2:6],:)'; x=x(~isnan(x));

fn=@(r,xm,t)xm./(1+(xm/3.9-1)*exp(-r*(t-1790))); %定义匿名函数
ft=fittype(fn,'independent','t');  t=[1800:10:2000]'; 
[f, st]=fit(t,x(2:end), ft, 'StartPoint',rand(1,2),...
    'Lower',[0,280],'Upper',[0.1,1000])  %由先验知识主观确定参数界限
xs=coeffvalues(f)  %显示拟合的参数值
xh=f(2010)  %2010年的预测值
disp('-------------------')
%向前差分
a=[-x(1:end-1),ones(21,1)] ; %向前差分
b=diff(x)./x(1:end-1)/10;
cs=a\b; r=cs(2), xm=r/cs(1)
xh=fn(r,xm,2010)  %2010年的预测值

% disp('-------------------')
% a=[ones(21,1),-x(1:end-1)] ; %向前差分
% b=diff(x)./x(1:end-1)/10;
% cs=a\b; r=cs(1), xm=r/cs(2)
% xh=fn(r,xm,2010)  %2010年的预测值
%
% 向后差分
a=[ones(21,1), -x(2:end)];  %向后差分
b=diff(x)./x(2:end)/10;
cs=a\b; r=cs(1), xm=r/cs(2)
xh=fn(r,xm,2010)  %2010年的预测值

%向前差分
a=[-x(1:end-1),ones(21,1)] ; %向前差分
b=diff(x)./x(1:end-1)/10;
cs=a\b; r=cs(2), xm=r/cs(1)
xh=fn(r,xm,2010)  %2010年的预测值

% disp('-------------------')
% a=[ones(21,1),-x(1:end-1)] ; %向前差分
% b=diff(x)./x(1:end-1)/10;
% cs=a\b; r=cs(1), xm=r/cs(2)
% xh=fn(r,xm,2010)  %2010年的预测值
%
% 向后差分
a=[ones(21,1), -x(2:end)];  %向后差分
b=diff(x)./x(2:end)/10;
cs=a\b; r=cs(1), xm=r/cs(2)
xh=fn(r,xm,2010)  %2010年的预测值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值