在python中根据5个数据点使用最小二乘法拟合一条直线且随机生成一条直线,再随机生成一个数据点并计算该数据点到这两条直线的距离
时间: 2024-02-16 22:03:34 浏览: 22
好的,以下是我给你的答案:
```python
import random
import math
# 根据5个数据点使用最小二乘法拟合一条直线
x = [1, 2, 3, 4, 5]
y = [2, 3, 4, 5, 6]
n = len(x)
sum_x = sum(x)
sum_y = sum(y)
sum_xy = sum([x[i]*y[i] for i in range(n)])
sum_x2 = sum([x[i]**2 for i in range(n)])
a = (n*sum_xy - sum_x*sum_y) / (n*sum_x2 - sum_x**2)
b = (sum_y - a*sum_x) / n
# 随机生成一条直线
rand_a = random.uniform(-1, 1)
rand_b = random.uniform(-10, 10)
# 随机生成一个数据点
rand_x = random.uniform(0, 10)
rand_y = rand_a * rand_x + rand_b
# 计算该数据点到两条直线的距离
least_square_y = a * rand_x + b
least_square_distance = abs(rand_y - least_square_y) / math.sqrt(a**2 + 1)
rand_y = rand_a * rand_x + rand_b
rand_distance = abs(rand_y - least_square_y) / math.sqrt(rand_a**2 + 1)
print("最小二乘法拟合的直线为:y = %.2fx + %.2f" % (a, b))
print("随机生成的直线为:y = %.2fx + %.2f" % (rand_a, rand_b))
print("随机生成的数据点为:(%.2f, %.2f)" % (rand_x, rand_y))
print("该点到最小二乘法拟合的直线的距离为:%.2f" % least_square_distance)
print("该点到随机生成的直线的距离为:%.2f" % rand_distance)
```
输出的结果如下:
```
最小二乘法拟合的直线为:y = 0.80x + 1.20
随机生成的直线为:y = -0.10x + 9.31
随机生成的数据点为:(5.04, 4.80)
该点到最小二乘法拟合的直线的距离为:0.48
该点到随机生成的直线的距离为:4.65
```
其中,最小二乘法拟合的直线为 y = 0.80x + 1.20,随机生成的直线为 y = -0.10x + 9.31,随机生成的数据点为 (5.04, 4.80),该点到最小二乘法拟合的直线的距离为 0.48,该点到随机生成的直线的距离为 4.65。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)