最小二乘

x = (2+(0:10)/5)';
y = 1+x+x.^2+x.^3+x.^4+x.^5+x.^6+x.^7;
A = [x.^0 x x.^2 x.^3 x.^4 x.^5 x.^6 x.^7];
c = (A'*A)\(A'*y);

[Q R] = qr(A);
b = Q' *y;

由于c其实是有真实解的,就是[1 1 1 1 1 1 1 1]。但是在matlab中使用最小二乘求出来的c却是:

c =

5.2331
-9.4504
11.9452
-5.3051
3.1580
0.5611
1.0491
0.9977

这是因为常规方程中条件数很大导致的,原因是A'*A不满秩,导致求逆时候会出现异常。

修改c的式子为c=(A'*A+a*I)\(A'*y) ,并且把a赋为一个很小的值,得到系数c可以非常接近真实值。

>> c=(A'*A+a*I)\(A'*y)

c =

0.9336
1.0385
1.0311
0.9750
0.9998
1.0039
0.9989
1.0001

 

转载于:https://www.cnblogs.com/McKean/p/6185401.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值