除此之外, 这篇博客: 水文预报程序中的 1.2 程序设计 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
%% 输入数据
filename = "D:\1-3大四上\2-水文预报\sj\上机实验2\马斯京根法.xls";
data=xlsread(filename,'A7:d24');
t=1; %单位时段为12h
Qu=data(:,2);
n=length(Qu);
Qd=data(:,3);
q=data(:,4);
I=Qu;%input
O=Qd-q; %output
bianhua=I-Qd;
%% 选取带入的x个数为k^2个,进行k^2次运算
k=3;
kk=k^2;
xx=0.2:0.2/kk:0.4;
poa=[];% 储存试算的预报流量结果
for m=1:kk
delt_W=zeros(1,n);
W=zeros(n,1);
x=xx(m);
subplot(k,k,m)
for i=2:n
delt_W(i)=t*(bianhua(i)+bianhua(i-1))/2;
W(i)=delt_W(i)+W(i-1);
end
Q_e=x*I+(1-x)*O; % Q‘
r=polyfit(Q_e,W,1);
K=r(1);
x=xx(m);
%直线拟合R2
W=polyval(r,QQ);
R2=1-sum((QQ-Q_e).^2)/sum((Q_e-mean(Q_e)).^2);
%开始预报、检验
C0=(0.5*t-K*x)/(0.5*t+K-K*x);
C1=(0.5*t+K*x)/(0.5*t+K-K*x);
C2=(-0.5*t+K-K*x)/(0.5*t+K-K*x);
delt_Q=zeros(1,n);
Q2=zeros(n,1);
Q2(1)=O(1);
for i=2:n
I1=I(i-1);
I2=I(i);
Q1=Q2(i-1)-q(i-1);
Q2(i)=C0*I1+C1*I2+C2*Q1; %预报值
end
% 绘制绳套曲线
ColorMaker=1:1:n;
plot(Q_e,W);
hold on
scatter(Q_e,W,10,ColorMaker,'o','filled');
xlabel('Q/(m^3/s)');
ylabel('W(12h.m^3/s)');
% 绘制拟合直线
plot(QQ,W,':');
%计算辅助判断的参数
text(1000,1000,strcat('R2=',num2str(R2)));%R^2
poa=[poa,Q2];
delt_Q=Q2-O;
delt_Q_max=max(delt_Q)/1000;
delt_Q_sum=sum(abs(delt_Q))/1000;
title(strcat('x=',num2str(x),'K=',num2str(round(r(在这里插入代码片1),3)),'误差max',num2str(round(delt_Q_max,3))));
end