编程题汇总1

来源:互联网 发布:数据库与服务器 编辑:程序博客网 时间:2024/06/13 23:45

1.推导最小二乘法公式,并且通过几何来解释意义。

最小二乘公式寻找一条线性直线,该直线使得观测到的残差平方和最小。设(xi,yi)D, D是样本集,设样本集大小为n,则想寻找a和b使得
Loss=12ni=1(yi(axi+b))2——(1)
最小,则让Lossab求偏导有
Lossa=0 ——(2)
Lossb=0 ——(3)
代入loss有
ni=1(yi(axi+b))xi=0 ——(4)
ni=1(yi(axi+b))=0 ——(5)
由(5)式可得,(ni=1简化为)
b=yiaxin——(6)
(6)式带回(4)式得到
yixi(axi+b)xi=0
yixiax2ibxi=0
yixiax2iyiaxinxi=0
nyixianx2i(yiaxi)xi=0
nyixianx2iyixiaxixi=0
a=nxiyiyixinx2i(xi)2 ——(7)
(7)式带回(6)式
b=1n(yinxiyiyixinx2i(xi)2xi)
b=1n(nyix2iyi(xi)2nxiyixi+yi(xi)2nx2i(xi)2)
b=(yix2ixiyixinx2i(xi)2)——(8)
几何意义,见下图
这里写图片描述
几何解释就是求一条直线,使得y方向的偏差和最小


2.动态规划问题. 青蛙爬井问题(1):已知一个井高10米,青蛙可以选择跳1米或者跳3米。
1)问一共有多少种跳法
f(n)函数为青蛙面对一个n米高的井的跳法总数。则
f(n)=f(n1)+f(n3)——(1)

f(1)=1
f(2)=1
f(3)=2
以此类推
f(4)=f(1)+f(3)=3
f(5)=f(2)+f(4)=4
f(6)=f(3)+f(5)=6
f(7)=f(4)+f(6)=9
f(8)=f(5)+f(7)=13
f(9)=f(6)+f(8)=19
f(10)=f(7)+f(9)=28
2) 求通项公式
可以将递推公式(1)写成
f(n)=f(n1)+f(n3)
[f(n),f(n1),f(n2)]=110001100f(n1)f(n2)f(n3)——(2)

A=110001100

[f(n),f(n1),f(n2)]=An3f(3)f(2)f(1)=An3211——(3)
把矩阵A对角化有
A=VDV1 ——(4)
[f(n),f(n1),f(n2)]=VDn3V1211——(5)
这一步太难算了,我用matlab偷懒了一下

[V, D] = eig(A)

D =

1.4656 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i -0.2328 + 0.7926i 0.0000 + 0.0000i
0.0000 + 0.0000i 0.0000 + 0.0000i -0.2328 - 0.7926i
V =

-0.7710 + 0.0000i 0.3916 + 0.2518i 0.3916 - 0.2518i
-0.5261 + 0.0000i 0.1588 - 0.5408i 0.1588 + 0.5408i
-0.3589 + 0.0000i -0.6823 + 0.0000i -0.6823 + 0.0000i
验证 n=10事是否正确。 A7=VD7V1=
9.0000 - 0.0000i 4.0000 + 0.0000i 6.0000 + 0.0000i
6.0000 + 0.0000i 3.0000 - 0.0000i 4.0000 + 0.0000i
4.0000 - 0.0000i 2.0000 + 0.0000i 3.0000 - 0.0000i

f(n)=9×2+4×1+6×1=28


3.动态规划问题. 青蛙爬井问题(2)已知一个井高n米,青蛙可以选择跳1米或者跳2米。(题目几乎一样)
f(n)=f(n1)+f(n2)
f(2)=2
f(1)=1

这类似是斐波那契数列了
特征方程为
x2=x+1
特征根为
x1=1+52
x2=152

f(x)=c1xn1+c2xn2——(1)

f(2)=2
f(1)=1
得到
c1=12(1+15)
c2=12(115)
c1,c2,x1,x2带回(1)式即可

原创粉丝点击