📄 examp.m
字号:
clear;rand('state',0);randn('state',0);%% The code that generated the data.%%beta0 = 10;%beta1 = 100;%beta2 = 9.8;%for t=1:40%x(t,1)=t;%sigma(t,1)=8;%y(t,1)=beta0+beta1*t-(1/2*beta2)*t^2+sigma(t,1)*randn;%end%precomputed dataload data1x=data1(:,1);y=data1(:,2);sigma=data1(:,3);%set data length%N = length(x);N = 10;x=x(1:N);y=y(1:N);sigma=sigma(1:N);%outliery(4)=y(4)-200;[x , y , sigma ]%build the parabolic system matrixG = [ ones(N,1) , x , -1/2*x.*x ];%apply the weightingyw = y./sigma;Gw = G./[sigma,sigma,sigma];%solve for the least-squares solutiondisp(['Least-squares solution'])m2 = Gw\ywdisp(['1-norm solution'])m1 = irls(Gw,yw,1.0e-5,1.0e-5,1,25)m=m1;%get the covariance matrixginv = inv(Gw'*Gw)*Gw';disp(['Covariance matrix'])covm = ginv*eye(N).^2*ginv'%get the 1.96-sigma (95%) conf intervalsdisp(['95% parameter confidence intervals on 2-norm solution'])del = 1.96*sqrt(diag(covm));[m-del , m2 , m+del]disp(['Chi-square misfit'])chi2 = norm((y - G*m2)./sigma)^2%find the p-value for this data set%degrees of freedomdof = N-3;disp(['Chi-square p-value'])p = 1-chi2cdf(chi2,dof)%find the parameter correlationss=sqrt(diag(covm))disp(['Parameter correlations'])r = covm./(s*s')%Plot the predicted data from the two modelsi=1;for k = min(x)-1:.05:max(x)+1 xx(i)=k; mm1(i) = m1(1)+k*m1(2)-1/2*k^2*m1(3); mm2(i)=m2(1)+k*m2(2)-1/2*k^2*m2(3); i=i+1;endfigure(1)bookfonts;plot(xx,mm1,xx,mm2,'k');hold onerrorbar(x,y,sigma,'ok');%title(['Data and Model'])xlabel('Time (s)');ylabel('Elevation (m)'); %print -deps l1example.epshold off%Monte Carlo Section, L1y0 = G*m1; nreal=10000;for j = 1:nreal%%generate a trial data set of perturbed, weighted data% ytrial = y0+sigma.*randn(N,1); ywtrial=ytrial./sigma; %L1 mmc(j,:)=irls(Gw,ywtrial,1.0e-5,1.0e-5,1,25)';%L2%mmc(j,:)=(Gw\ywtrial)'; chimc(j)= norm((ytrial-y0)./sigma)^2;endfigure(2)bookfonts;hist(chimc);%title(['1000 Monte-Carlo Chi-square Values'])%print -deps parabfig2.epsfigure(3)bookfonts;subplot(1,3,1)bookfonts;hist(mmc(:,1))title(['m_1'])subplot(1,3,2)bookfonts;hist(mmc(:,2))title(['m_2'])subplot(1,3,3)bookfonts;hist(mmc(:,3))title(['m_3'])%print -deps parabfig3.eps%empirical covariance estimation covmemp=mmc-[mean(mmc(:,1))*ones(nreal,1),mean(mmc(:,2))*ones(nreal,1),mean(mmc(:,3))*ones(nreal,1)];covmemp=(covmemp'*covmemp)/nrealfigure(4)bookfonts;subplot(1,3,1)bookfonts;plot(mmc(:,1),mmc(:,2),'b*')hold onxlabel('M_1')ylabel('M_2')subplot(1,3,2)bookfonts;plot(mmc(:,1),mmc(:,3),'b*')hold onxlabel('M_1')ylabel('M_3')subplot(1,3,3)bookfonts;plot(mmc(:,2),mmc(:,3),'b*')xlabel('M_2')ylabel('M_3')hold on%plot the error ellipsoid%get the sub-axes of the ellipsoid for plottingn1=[0;0;1];n2=[0;1;0];n3=[1;0;0];vp1=(eye(3)-n1*n1')*covmemp*(eye(3)-n1*n1');vp2=(eye(3)-n2*n2')*covmemp*(eye(3)-n2*n2');vp3=(eye(3)-n3*n3')*covmemp*(eye(3)-n3*n3');vp1=vp1(1:2,1:2);vp2=[vp2(1,1),vp2(1,3);vp2(3,1),vp2(3,3)];vp3=vp3(2:3,2:3);[u1,lam1]=eig(vp1);[u2,lam2]=eig(vp2);[u3,lam3]=eig(vp3);l1=sqrt(diag(lam1));l2=sqrt(diag(lam2));l3=sqrt(diag(lam3));dtheta=0.01;theta=0:dtheta:2*pi;for i=1:length(theta) v1=2.79*(l1(1)*u1(:,1)*cos(theta(i))+l1(2)*u1(:,2)*sin(theta(i))); v2=2.79*(l2(1)*u2(:,1)*cos(theta(i))+l2(2)*u2(:,2)*sin(theta(i))); v3=2.79*(l3(1)*u3(:,1)*cos(theta(i))+l3(2)*u3(:,2)*sin(theta(i))); x1(i)=m(1)+v1(1); y1(i)=m(2)+v1(2); x2(i)=m(1)+v2(1); z2(i)=m(3)+v2(2); y3(i)=m(2)+v3(1); z3(i)=m(3)+v3(2);endsubplot(1,3,1)bookfonts;plot(x1,y1,'k')hold offsubplot(1,3,2)bookfonts;plot(x2,z2,'k')hold offsubplot(1,3,3)bookfonts;plot(y3,z3,'k')hold off%check confidence intervals[u,lam]=eig(covm);%rotate model estimates into the principal coordinate systemmmcrot = mmc*u;%subtract the (rotated) parameter meansmmcrotmean=mean(mmcrot);mmcrot=mmcrot- ...[mmcrotmean(1)*ones(nreal,1),mmcrotmean(2)*ones(nreal,1),mmcrotmean(3)*ones(nreal,1)];%counting of model estimates within the ellipsoidcount=0;for i=1:nreal if ((mmcrot(i,1)^2/lam(1,1)+mmcrot(i,2)^2/lam(2,2)+mmcrot(i,3)^2/lam(3,3)) <= 3.35^2) count=count+1; endenddisp(['confidence interval inclusion:']) count/nreal%generate confidence ellipsoids to plot on top of the model distributiontheta=(0:.01:2*pi);elrot1=2.79*[lam(1,1)^0.5*cos(theta)',lam(2,2)^0.5*sin(theta)'];elrot2=2.79*[lam(1,1)^0.5*cos(theta)',lam(3,3)^0.5*sin(theta)'];elrot3=2.79*[lam(2,2)^0.5*cos(theta)',lam(3,3)^0.5*sin(theta)'];figure(5)bookfonts;subplot(1,3,1)bookfonts;plot(mmcrot(:,1),mmcrot(:,2),'*',elrot1(:,1),elrot1(:,2),'k')xlabel('M_1')ylabel('M_2')subplot(1,3,2)bookfonts;plot(mmcrot(:,1),mmcrot(:,3),'*',elrot2(:,1),elrot2(:,2),'k')xlabel('M_1')ylabel('M_3')subplot(1,3,3)bookfonts;plot(mmcrot(:,2),mmcrot(:,3),'*',elrot3(:,1),elrot3(:,2),'k')xlabel('M_2')ylabel('M_3')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -