假设理想状态下的弹道轨迹满足抛物线方程y = a+bx+cx^2(注:真实状态下的轨迹并不是那样,一般发射后段的轨迹比较倾斜,这是因为后段受空气阻力的影响比较大。),已知弹道轨迹经过点(1,6)、(3,5)、(7,2),求此弹道轨迹抛物线方程。 要求: 采用列主元消去法求解,并画出此弹道轨迹抛物线图形。用Python写出过程
时间: 2023-05-24 12:05:03 浏览: 167
由已知数据可列出三个方程组成的线性方程组:
a + b + c = 6
9a + 3b + c = 5
49a + 7b + c = 2
采用列主元消去法,进行高斯消元,得到增广矩阵:
[1 1 1 | 6]
[9 3 1 | 5]
[49 7 1 | 2]
首先将第一列变为主元,进行消元得到:
[1 1 1 | 6]
[0 -6 -8 | -43]
[0 -42 -48 | -272]
然后将第二列变为主元,进行消元得到:
[1 1 1 | 6]
[0 1 4/3 | 43/6]
[0 0 -8/3 | -26/3]
最后将第三列变为主元,进行消元得到:
[1 0 -1/2 | 7/6]
[0 1 4/3 | 43/6]
[0 0 1 | 13/24]
从中可以得到方程:a = 7/6, b = 43/6 - 4/3 * 13/24 = 5/4, c = 13/24
因此,弹道轨迹的抛物线方程为:y = 7/6 + 5/4x - 13/24x^2
下面是Python代码:
import numpy as np
import matplotlib.pyplot as plt
A = np.array([[1, 1, 1], [9, 3, 1], [49, 7, 1]])
B = np.array([6, 5, 2])
AB = np.column_stack((A, B))
n = len(B)
for k in range(n-1):
max_index = np.argmax(abs(AB[k:n,k]))
if max_index != 0:
AB[[k, k+max_index]] = AB[[k+max_index, k]]
for i in range(k+1, n):
factor = AB[i,k] / AB[k,k]
AB[i,k:n+1] = AB[i,k:n+1] - factor * AB[k,k:n+1]
x = np.zeros(n)
for i in range(n-1, -1, -1):
x[i] = (AB[i,n] - AB[i,i+1:n]@x[i+1:n]) / AB[i,i]
a, b, c = x
print('a =', a)
print('b =', b)
print('c =', c)
x = np.linspace(0, 8, 100)
y = a + b*x - c*x**2
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('y')
plt.title('Trajectory')
plt.show()