数学建模数模第一次作业(章绍辉版)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
、
r = sse =
(ii)输入代码: f=@(k,t)k(1)*exp(k(2).*(t-1790)); k0=[,]; k=nlinfit(t,c,f,k0) sse=sum((c-f(k,t)).^2) 得到:
&
k= sse =+003 即:x0= r= sse=
(iii)输入代码: f=@(k,t)k(1)*exp(k(2).*(t-k(3))); k0=[,,1790]; k=nlinfit(t,c,f,k0)
误差
40
非线性拟合
20
线性拟合
非线性拟合与线性拟合误差比较效果图
0
-20
-40
-60
-80
-100
-120
-140
-160 1750
1800
1850
时间t
1900
1950
2000
|
由图可知非线性拟合产生的误差比线性拟合均匀得多,可能是由于作了变换 Y=ln(x(t))。因此,这里采用非线性拟合比较合理。
B,代码如下: t=1790:10:2000; c=[,,,,,,,,,,,,,,,,,,,,,]; x=t-1790; y=log(c); k=polyfit(x,y,1) r=k(1),x0=exp(k(2)) sse=sum((c-exp(polyval(k,x))).^2)
!
plot(t,c,'k+',t,exp(polyval(k,t-1790)),'k-') xlabel('t'),ylabel('x(t)'), legend('22个已知数据点’,2) title('polyfit函数拟合效果图') 得到: k=
(2) x1=linspace(-2,2,101);
/
x2=linspace(-2,8); axis equal plot(exp(x1),x1,x1,exp(x1),x2,x2) title('指数函数 y=exp(x)和对数函数 y=ln(x)关于 y=x 对称')
指 数 函 数 y=exp(x)和 对 数 函 数 y=ln(x)关 于 y=x对 称 8
0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
3.代码如下: n=input('请输入实验次数n=') k=0; for i=1:n
。
x=ceil(rand*6)+ceil(rand*6); if x ==3|x==11 k=k+1; elseif x~=2&x~=7&x~=12
r= x0 =
、
sse =+004
450
400
polyfit函 数 拟 合 效 果 图 22个 已 知 数 据 点
350
300
250
x(t)
200
150
100
50
0 1750
1800
1850
1900
t
1950
2000
即:A= B= r= A= x0 = 误差平方和为。
(3)比较(1),(2)两种拟合方式的误差平方和,显然线性拟合带来的误差比 非线性拟合大得多。用函数 plot 绘制两种拟合方式的误差比较图,输入代码: f=@(k,t)k(1)*exp(k(2).*(t-1790)); k0=[,]; k1=nlinfit(t,c,f,k0);
1.(1) n=101; x1=linspace(-1,1,n); x2=linspace(-2,2,n); y1=[sqrt(1-x1.^2);-sqrt(1-x1.^2)]; y2=[sqrt(4-x2.^2);-sqrt(4-x2.^2);sqrt(1-(x2.^2)/4);-sqrt(1-(x2.^2)/4)]; plot(x1,y1)
Warning: Rank deficient, rank = 2, tol = .
> In nlinfit at 161
k=
Байду номын сангаасsse =
即:r= N= x0= 误差平方和为:
(iii)输入代码:
f=@(k,t)k(3)*k(2)./(k(3)+(k(2)-k(3))*exp(-k(1)*(t-k(4)))); k0=[,,,1790]; k=nlinfit(t,c,f,k0) sse=sum((c-f(k,t)).^2) 得到: Warning: Rank deficient, rank = 2, tol = . > In nlinfit at 161 k =+003 *
7
6
5
4
3
2
1
0
-1
-2
-2 -1
0
1
2
3
4
5
6
7
8
(3) hold on
—
q=input('请输入一个正整数 q;') for i=1:q
for j=1:i if rem(j,i) plot(j/i,1/i) end
end end
@
0.5
0.45
0.4
0.35
0.3
0.25
0.2
0.15
0.1
0.05
…
hold on; plot(x2,y2) title('椭圆 x^2/4+y^2=1 的内切圆和外切圆') axis equal
椭 圆 x2/4+y2=1的 内 切 圆 和 外 切 圆 2
1.5
1
0.5
0
-0.5
-1
-1.5
-2 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5
y= ceil(rand*6)+ceil(rand*6); while y~=x&y~=7
y=ceil(rand*6)+ceil(rand*6); end if y==7
;
k=k+1; end end end
—
更改试验次数n的值,打赌者赢得概率w随n的变化情况如下:
试验次数n
打赌者赢得概率w
1000
《
x=t-1790; y=log(c); k2=polyfit(x,y,1); plot(t,c-f(k1,t),'k+',t,c-exp(polyval(k2,x)),'kp') title('非线性拟合与线性拟合误差比较效果图') xlabel('t'),ylabel('x(t)'), legend('非线性拟合',2,'线性拟合',2) 得到:
&
sse=sum((c-f(k,t)).^2) 得到: k =+003 *
sse =+003 即:x0= r= t0= sse= 从误差平方和 sse 来看(ii)和(iii)的拟合效果较好。
]
(2)对
两边取对数得
令 y= , x=t-1790 , A=r, B= ,则原方程变为:y=Ax+B。用 polyfit 拟合参数 A、
(4) (i)输入代码: f=@(k,t)*k(2)./+(k(2)*exp(-k(1)*(t-1790))); t=1790:10:2000; c=[,,,,,,,,,,,,,,,,,,,,,]; k0=[,];
$
k=nlinfit(t,c,f,k0) sse=sum((c-f(k,t)).^2) 得到:
1500
;
2000 2500 3000 3500
{
4000 4500 5000
从上表可看出打赌者赢的概率大约为。
<
理论计算: 掷一次骰子,得到点数及相应的概率
点数 2
3
4
5
(
7
8
9
10 11 12
6
概率 。
2/36 3/36 4/36 5/36 6/36 5/36 4/36 ,
2/36 1/36
p 1/36
3/36
打 赌 者 赢 的 情 况 有 两 种 :( 1 ) 第 一 次 就 掷 出 3 点 或 者 11 点 ; 其 概 率
P1=2/36+2/36=1/9;
(2) 当第 1 次掷出的点数之和是 4,5,6,8,9 或 10,,继续掷骰子,直到掷
出的点数 之和是 7 或原来的值为止,先得到的点数之和是 7;其概率 P2=196/495
k= sse =+003 即:r= N=
误差平方和为:
(ii)输入代码:
/
f=@(k,t)k(3)*k(2)./(k(3)+(k(2)-k(3))*exp(-k(1)*(t-1790))); k0=[,,]; k=nlinfit(t,c,f,k0) sse=sum((c-f(k,t)).^2) 得到:
sse =+002 即:r= N= x0= t0= 误差平方和为:
此处(i)的误差平方和很大,(ii)和(iii)的误差平方和几乎一样且 matlab 都 出现了警告(这点跟书上的参考答案不一样,书上是只有(iii)出现了警告,但 拟合出来的参数值又跟书上一样。不知道为什么)所以这里我把(ii)和(iii)的拟 合效果图都给出:
(ii)拟 合 效 果 图 300
250
200
150
100
50
0 1750
1800
1850
1900
1950
2000
300 250 200 150 100
50 0 1750
1800
(iii)拟 合 效 果 图
1850
1900
1950
2000
则打赌者赢的概率 P=P1+P2=.
4.(1)
】
(i)输入代码: f=@(r,t)*exp(r.*(t-1790)); t=1790:10:2000; c=[,,,,,,,,,,,,,,,,,,,,,]; r0=; r=nlinfit(t,c,f,r0) sse=sum((c-f(r,t)).^2) 得到:
r = sse =
(ii)输入代码: f=@(k,t)k(1)*exp(k(2).*(t-1790)); k0=[,]; k=nlinfit(t,c,f,k0) sse=sum((c-f(k,t)).^2) 得到:
&
k= sse =+003 即:x0= r= sse=
(iii)输入代码: f=@(k,t)k(1)*exp(k(2).*(t-k(3))); k0=[,,1790]; k=nlinfit(t,c,f,k0)
误差
40
非线性拟合
20
线性拟合
非线性拟合与线性拟合误差比较效果图
0
-20
-40
-60
-80
-100
-120
-140
-160 1750
1800
1850
时间t
1900
1950
2000
|
由图可知非线性拟合产生的误差比线性拟合均匀得多,可能是由于作了变换 Y=ln(x(t))。因此,这里采用非线性拟合比较合理。
B,代码如下: t=1790:10:2000; c=[,,,,,,,,,,,,,,,,,,,,,]; x=t-1790; y=log(c); k=polyfit(x,y,1) r=k(1),x0=exp(k(2)) sse=sum((c-exp(polyval(k,x))).^2)
!
plot(t,c,'k+',t,exp(polyval(k,t-1790)),'k-') xlabel('t'),ylabel('x(t)'), legend('22个已知数据点’,2) title('polyfit函数拟合效果图') 得到: k=
(2) x1=linspace(-2,2,101);
/
x2=linspace(-2,8); axis equal plot(exp(x1),x1,x1,exp(x1),x2,x2) title('指数函数 y=exp(x)和对数函数 y=ln(x)关于 y=x 对称')
指 数 函 数 y=exp(x)和 对 数 函 数 y=ln(x)关 于 y=x对 称 8
0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
3.代码如下: n=input('请输入实验次数n=') k=0; for i=1:n
。
x=ceil(rand*6)+ceil(rand*6); if x ==3|x==11 k=k+1; elseif x~=2&x~=7&x~=12
r= x0 =
、
sse =+004
450
400
polyfit函 数 拟 合 效 果 图 22个 已 知 数 据 点
350
300
250
x(t)
200
150
100
50
0 1750
1800
1850
1900
t
1950
2000
即:A= B= r= A= x0 = 误差平方和为。
(3)比较(1),(2)两种拟合方式的误差平方和,显然线性拟合带来的误差比 非线性拟合大得多。用函数 plot 绘制两种拟合方式的误差比较图,输入代码: f=@(k,t)k(1)*exp(k(2).*(t-1790)); k0=[,]; k1=nlinfit(t,c,f,k0);
1.(1) n=101; x1=linspace(-1,1,n); x2=linspace(-2,2,n); y1=[sqrt(1-x1.^2);-sqrt(1-x1.^2)]; y2=[sqrt(4-x2.^2);-sqrt(4-x2.^2);sqrt(1-(x2.^2)/4);-sqrt(1-(x2.^2)/4)]; plot(x1,y1)
Warning: Rank deficient, rank = 2, tol = .
> In nlinfit at 161
k=
Байду номын сангаасsse =
即:r= N= x0= 误差平方和为:
(iii)输入代码:
f=@(k,t)k(3)*k(2)./(k(3)+(k(2)-k(3))*exp(-k(1)*(t-k(4)))); k0=[,,,1790]; k=nlinfit(t,c,f,k0) sse=sum((c-f(k,t)).^2) 得到: Warning: Rank deficient, rank = 2, tol = . > In nlinfit at 161 k =+003 *
7
6
5
4
3
2
1
0
-1
-2
-2 -1
0
1
2
3
4
5
6
7
8
(3) hold on
—
q=input('请输入一个正整数 q;') for i=1:q
for j=1:i if rem(j,i) plot(j/i,1/i) end
end end
@
0.5
0.45
0.4
0.35
0.3
0.25
0.2
0.15
0.1
0.05
…
hold on; plot(x2,y2) title('椭圆 x^2/4+y^2=1 的内切圆和外切圆') axis equal
椭 圆 x2/4+y2=1的 内 切 圆 和 外 切 圆 2
1.5
1
0.5
0
-0.5
-1
-1.5
-2 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5
y= ceil(rand*6)+ceil(rand*6); while y~=x&y~=7
y=ceil(rand*6)+ceil(rand*6); end if y==7
;
k=k+1; end end end
—
更改试验次数n的值,打赌者赢得概率w随n的变化情况如下:
试验次数n
打赌者赢得概率w
1000
《
x=t-1790; y=log(c); k2=polyfit(x,y,1); plot(t,c-f(k1,t),'k+',t,c-exp(polyval(k2,x)),'kp') title('非线性拟合与线性拟合误差比较效果图') xlabel('t'),ylabel('x(t)'), legend('非线性拟合',2,'线性拟合',2) 得到:
&
sse=sum((c-f(k,t)).^2) 得到: k =+003 *
sse =+003 即:x0= r= t0= sse= 从误差平方和 sse 来看(ii)和(iii)的拟合效果较好。
]
(2)对
两边取对数得
令 y= , x=t-1790 , A=r, B= ,则原方程变为:y=Ax+B。用 polyfit 拟合参数 A、
(4) (i)输入代码: f=@(k,t)*k(2)./+(k(2)*exp(-k(1)*(t-1790))); t=1790:10:2000; c=[,,,,,,,,,,,,,,,,,,,,,]; k0=[,];
$
k=nlinfit(t,c,f,k0) sse=sum((c-f(k,t)).^2) 得到:
1500
;
2000 2500 3000 3500
{
4000 4500 5000
从上表可看出打赌者赢的概率大约为。
<
理论计算: 掷一次骰子,得到点数及相应的概率
点数 2
3
4
5
(
7
8
9
10 11 12
6
概率 。
2/36 3/36 4/36 5/36 6/36 5/36 4/36 ,
2/36 1/36
p 1/36
3/36
打 赌 者 赢 的 情 况 有 两 种 :( 1 ) 第 一 次 就 掷 出 3 点 或 者 11 点 ; 其 概 率
P1=2/36+2/36=1/9;
(2) 当第 1 次掷出的点数之和是 4,5,6,8,9 或 10,,继续掷骰子,直到掷
出的点数 之和是 7 或原来的值为止,先得到的点数之和是 7;其概率 P2=196/495
k= sse =+003 即:r= N=
误差平方和为:
(ii)输入代码:
/
f=@(k,t)k(3)*k(2)./(k(3)+(k(2)-k(3))*exp(-k(1)*(t-1790))); k0=[,,]; k=nlinfit(t,c,f,k0) sse=sum((c-f(k,t)).^2) 得到:
sse =+002 即:r= N= x0= t0= 误差平方和为:
此处(i)的误差平方和很大,(ii)和(iii)的误差平方和几乎一样且 matlab 都 出现了警告(这点跟书上的参考答案不一样,书上是只有(iii)出现了警告,但 拟合出来的参数值又跟书上一样。不知道为什么)所以这里我把(ii)和(iii)的拟 合效果图都给出:
(ii)拟 合 效 果 图 300
250
200
150
100
50
0 1750
1800
1850
1900
1950
2000
300 250 200 150 100
50 0 1750
1800
(iii)拟 合 效 果 图
1850
1900
1950
2000
则打赌者赢的概率 P=P1+P2=.
4.(1)
】
(i)输入代码: f=@(r,t)*exp(r.*(t-1790)); t=1790:10:2000; c=[,,,,,,,,,,,,,,,,,,,,,]; r0=; r=nlinfit(t,c,f,r0) sse=sum((c-f(r,t)).^2) 得到: