章绍辉数学建模第一章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题一
1. (1)Matlab命令:
hold on; x1=linspace(-1,1); y11=sqrt(1-x1.^2); y12=-sqrt(1-x1.^2); plot(x1,y11); plot(x1,y12); x2=linspace(-2,2); y21=sqrt(4-x2.^2); y22=-sqrt(4-x2.^2); plot(x2,y21); plot(x2,y22); x3=linspace(-2,2); y31=sqrt(1-x3.^2/4); y32=-sqrt(1-x3.^2/4); plot(x3,y31); plot(x3,y32);
%(i) f1=@(xa,t)(3.9).*exp(xa(1).*(t-1790)); x=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 106.5 123.2 131.7 150.7 179.3 204 226.5 251.4 281.4]; t=1790:10:2000; xa0=0.1; xa=nlinfit(t,x,f1,xa0); r=xa ssea=sum((x-f1(xa,t)).^2) %(ii)
plot(t,x,'+') xlabel('年份') ylabel('人口/百万') hold on plot(t,g2(xd,t),'ro') legend('实际值','拟合值',2) hold off
m=m+1; end end p=m/n; end
重复10次测试结果(输入n为1000): 0.4970 0.5150 0.5270 0.5000 0.5230 0.5110 0.5000 0.4960 0.5270 0.5110 估计打赌者赢的概率: 0.5107 理论计算: 掷两个骰子,掷出的结果共有36种结果,当第一次掷出3或 11时概率为P3=P11=1/18,当第一次掷出4,5,6,8,9或 10时,继续掷骰子直到掷出7或第一次掷出的值时停止,此 时概率P=196/495,则理论概率为 P3+P11+P=251/495=0.5071; 随着试验次数增加,这些概率收敛到0.5070。 4. (1)Matlab命令:
输出图形:
(2)Matlab命令:
hold on; x1=linspace(-3,3); y1=exp(x1); plot(x1,y1,'-'); x2=linspace(-5,25); y2=x2; plot(x2,y2,'-'); x3=linspace(0.05,20); y3=log(x3); plot(x3,y3,'-');
输出图像:
(3)Matlab命令:
function Riemann(n) for i=2:n j=1:i-1; j=j(gcd(i,j)==1); plot(j/i,1/i,'b.'); hold on; end
输入n=100
输出图像: 3.Matlab命令:
function p=win(n) m=0; for i=1:n x1=ceil(6*rand); x2=ceil(6*rand); x=x1+x2; if x==3 || x==11 m=m+1; end if x==4 || x==5 || x==6 || x==8 || x==9 || x==10 y1=ceil(6*rand); y2=ceil(6*rand); y=y1+y2; while y~=7 && y~=x y1=ceil(6*rand); y2=ceil(6*rand); y=y1+y2; end if y==7
x=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 106.5 123.2 131.7 150.7 179.3 204 226.5 251.4 281.4]; t=1790:10:2000; X=t-1790;
Y=log(x); m=polyfit(X,Y,1) r=m(1) x0=exp(m(2)) ycx=exp(polyval(m,X)); sse=sum((x-ycx).^2) plot(t,x,'+') xlabel('年份') ylabel('人口/百万') hold on plot(t,g2(xd,t),'ro') legend('实际值','拟合值',2) hold off
结果: m = 0.020219333761898 1.799226697714661 r = 0.020219333761898 x0 = 6.044971066570829 sse = 3.489176713658146e+04
Байду номын сангаас
(3) 从误差结果来看,指数增长模型非线性拟合的误差平方和 2.2639e+03比线性拟合的误差平方和3.4892e+04要小得 多,可以观察到随着线性拟合的越大,其误差也越大,造 成这样的结果原因在于:对于越大的数据,由于求了对数 处理,把变化的幅度改变了,进而引起了越大的误差。 (4) Matlab代码:
运行结果如下: (i) N = 3.424421452047254e+02 r = 0.027352784587056 ssee = 1.224893784300030e+03 (ii) N = 4.465731912033727e+02 r = 0.021547289105893
x0 = 7.698118979647007 ssed = 4.577405235783897e+02 (iii) N = 94.772723008835442 r = 0.782933071457756 x0 = 4.543142434814583 t0 = 1.715002873656930e+03 ssef = 1.608061236363640e+05 比较误差平方和,模型(ii)的误差平方和最小,故认为 拟合效果最好,下面的拟合效果图。 Matlab代码:
plot(t,x,'+') xlabel('年份') ylabel('人口/百万') hold on plot(t,f2(xb,t),'ro') legend('实际值','拟合值',2) hold off
(2)对模型两边分别求对数: (1) 令,则方程(1)可化为(2)为一次线性模型,下面对方 程(2)进行线性拟合。 Matlab代码:
xe=nlinfit(t,x,g1,xe0); N=xe(1) r=xe(2) ssea=sum((x-g1(xe,t)).^2) %(ii) g2=@(xe,t)xe(1)*xe(3)./(xe(3)+(xe(1)-xe(3))*exp(-xe(2)* (t-1790))); xd0=[5 0.01 3.9]; xd=nlinfit(t,x,g2,xd0); N=xd(1) r=xd(2) x0=xd(3) sseb=sum((x-g2(xd,t)).^2) %(iii) g3=@(xf,t)xf(1)*xf(3)./(xf(3)+(xf(1)-xf(3))*exp(-xf(2)*(txf(4)))); xf0=[5 0.01 3.9 1790]; xf=nlinfit(t,x,g3,xf0); N=xf(1) r=xf(2) x0=xf(3) t0=xf(4) ssec=sum((x-g3(xf,t)).^2)
输出结果如下: (i) r = 0.021194226383220 ssea = 1.741848398741968e+04 (ii) x0 = 14.993958741348798 r = 0.014223075471036 sseb = 2.263917490355983e+03 (iii) t0 = -3.555319403868392e+43 x0 = -2.354423987310530e+42 r = -2.276151673580580e+37 ssec = 3.584072600000000e+05 由输出结果我们可以看到:情况(ii)的误差平方和相最 小,所以认为(ii)的拟合效果最好,并由此做出拟合效 果图: Matlab代码: %画图
f2=@(xb,t)(xb(1)).*exp(xb(2).*(t-1790)); xb0=[3.9 0.1]; xb=nlinfit(t,x,f2,xb0); x0=xb(1) r=xb(2) sseb=sum((x-f2(xb,t)).^2) %(iii) f3=@(xc,t)(xc(2)).*exp(xc(1).*(t-xc(3))); xc0=[0.1 3.9 1790]; xc=nlinfit(t,x,f3,xc0); t0=xc(3) x0=xc(2) r=xc(1) ssec=sum((x-f3(xc,t)).^2)
%(i) g1=@(x,t)N*x0/(x0+(N-x0)*exp(-r*(t-t0))); g1=@(xe,t)xe(1)*3.9./(3.9+(xe(1)-3.9)*exp(-xe(2)*(t1790))); x=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 106.5 123.2 131.7 150.7 179.3 204 226.5 251.4 281.4]; t=1790:10:2000; xe0=[5 0.01];
1. (1)Matlab命令:
hold on; x1=linspace(-1,1); y11=sqrt(1-x1.^2); y12=-sqrt(1-x1.^2); plot(x1,y11); plot(x1,y12); x2=linspace(-2,2); y21=sqrt(4-x2.^2); y22=-sqrt(4-x2.^2); plot(x2,y21); plot(x2,y22); x3=linspace(-2,2); y31=sqrt(1-x3.^2/4); y32=-sqrt(1-x3.^2/4); plot(x3,y31); plot(x3,y32);
%(i) f1=@(xa,t)(3.9).*exp(xa(1).*(t-1790)); x=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 106.5 123.2 131.7 150.7 179.3 204 226.5 251.4 281.4]; t=1790:10:2000; xa0=0.1; xa=nlinfit(t,x,f1,xa0); r=xa ssea=sum((x-f1(xa,t)).^2) %(ii)
plot(t,x,'+') xlabel('年份') ylabel('人口/百万') hold on plot(t,g2(xd,t),'ro') legend('实际值','拟合值',2) hold off
m=m+1; end end p=m/n; end
重复10次测试结果(输入n为1000): 0.4970 0.5150 0.5270 0.5000 0.5230 0.5110 0.5000 0.4960 0.5270 0.5110 估计打赌者赢的概率: 0.5107 理论计算: 掷两个骰子,掷出的结果共有36种结果,当第一次掷出3或 11时概率为P3=P11=1/18,当第一次掷出4,5,6,8,9或 10时,继续掷骰子直到掷出7或第一次掷出的值时停止,此 时概率P=196/495,则理论概率为 P3+P11+P=251/495=0.5071; 随着试验次数增加,这些概率收敛到0.5070。 4. (1)Matlab命令:
输出图形:
(2)Matlab命令:
hold on; x1=linspace(-3,3); y1=exp(x1); plot(x1,y1,'-'); x2=linspace(-5,25); y2=x2; plot(x2,y2,'-'); x3=linspace(0.05,20); y3=log(x3); plot(x3,y3,'-');
输出图像:
(3)Matlab命令:
function Riemann(n) for i=2:n j=1:i-1; j=j(gcd(i,j)==1); plot(j/i,1/i,'b.'); hold on; end
输入n=100
输出图像: 3.Matlab命令:
function p=win(n) m=0; for i=1:n x1=ceil(6*rand); x2=ceil(6*rand); x=x1+x2; if x==3 || x==11 m=m+1; end if x==4 || x==5 || x==6 || x==8 || x==9 || x==10 y1=ceil(6*rand); y2=ceil(6*rand); y=y1+y2; while y~=7 && y~=x y1=ceil(6*rand); y2=ceil(6*rand); y=y1+y2; end if y==7
x=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 106.5 123.2 131.7 150.7 179.3 204 226.5 251.4 281.4]; t=1790:10:2000; X=t-1790;
Y=log(x); m=polyfit(X,Y,1) r=m(1) x0=exp(m(2)) ycx=exp(polyval(m,X)); sse=sum((x-ycx).^2) plot(t,x,'+') xlabel('年份') ylabel('人口/百万') hold on plot(t,g2(xd,t),'ro') legend('实际值','拟合值',2) hold off
结果: m = 0.020219333761898 1.799226697714661 r = 0.020219333761898 x0 = 6.044971066570829 sse = 3.489176713658146e+04
Байду номын сангаас
(3) 从误差结果来看,指数增长模型非线性拟合的误差平方和 2.2639e+03比线性拟合的误差平方和3.4892e+04要小得 多,可以观察到随着线性拟合的越大,其误差也越大,造 成这样的结果原因在于:对于越大的数据,由于求了对数 处理,把变化的幅度改变了,进而引起了越大的误差。 (4) Matlab代码:
运行结果如下: (i) N = 3.424421452047254e+02 r = 0.027352784587056 ssee = 1.224893784300030e+03 (ii) N = 4.465731912033727e+02 r = 0.021547289105893
x0 = 7.698118979647007 ssed = 4.577405235783897e+02 (iii) N = 94.772723008835442 r = 0.782933071457756 x0 = 4.543142434814583 t0 = 1.715002873656930e+03 ssef = 1.608061236363640e+05 比较误差平方和,模型(ii)的误差平方和最小,故认为 拟合效果最好,下面的拟合效果图。 Matlab代码:
plot(t,x,'+') xlabel('年份') ylabel('人口/百万') hold on plot(t,f2(xb,t),'ro') legend('实际值','拟合值',2) hold off
(2)对模型两边分别求对数: (1) 令,则方程(1)可化为(2)为一次线性模型,下面对方 程(2)进行线性拟合。 Matlab代码:
xe=nlinfit(t,x,g1,xe0); N=xe(1) r=xe(2) ssea=sum((x-g1(xe,t)).^2) %(ii) g2=@(xe,t)xe(1)*xe(3)./(xe(3)+(xe(1)-xe(3))*exp(-xe(2)* (t-1790))); xd0=[5 0.01 3.9]; xd=nlinfit(t,x,g2,xd0); N=xd(1) r=xd(2) x0=xd(3) sseb=sum((x-g2(xd,t)).^2) %(iii) g3=@(xf,t)xf(1)*xf(3)./(xf(3)+(xf(1)-xf(3))*exp(-xf(2)*(txf(4)))); xf0=[5 0.01 3.9 1790]; xf=nlinfit(t,x,g3,xf0); N=xf(1) r=xf(2) x0=xf(3) t0=xf(4) ssec=sum((x-g3(xf,t)).^2)
输出结果如下: (i) r = 0.021194226383220 ssea = 1.741848398741968e+04 (ii) x0 = 14.993958741348798 r = 0.014223075471036 sseb = 2.263917490355983e+03 (iii) t0 = -3.555319403868392e+43 x0 = -2.354423987310530e+42 r = -2.276151673580580e+37 ssec = 3.584072600000000e+05 由输出结果我们可以看到:情况(ii)的误差平方和相最 小,所以认为(ii)的拟合效果最好,并由此做出拟合效 果图: Matlab代码: %画图
f2=@(xb,t)(xb(1)).*exp(xb(2).*(t-1790)); xb0=[3.9 0.1]; xb=nlinfit(t,x,f2,xb0); x0=xb(1) r=xb(2) sseb=sum((x-f2(xb,t)).^2) %(iii) f3=@(xc,t)(xc(2)).*exp(xc(1).*(t-xc(3))); xc0=[0.1 3.9 1790]; xc=nlinfit(t,x,f3,xc0); t0=xc(3) x0=xc(2) r=xc(1) ssec=sum((x-f3(xc,t)).^2)
%(i) g1=@(x,t)N*x0/(x0+(N-x0)*exp(-r*(t-t0))); g1=@(xe,t)xe(1)*3.9./(3.9+(xe(1)-3.9)*exp(-xe(2)*(t1790))); x=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 106.5 123.2 131.7 150.7 179.3 204 226.5 251.4 281.4]; t=1790:10:2000; xe0=[5 0.01];