提问人:Fentse 提问时间:10/16/2023 最后编辑:Fentse 更新时间:10/16/2023 访问量:18
如何获得某些参数的最佳值,这些参数将为我提供最高速度
How do I get the best values of certain parameters that will give me the highest velocity
问:
我有 2 个 ODE 方程,我使用 RK-4 方法求解,我正在尝试找到 r1、r2 和 r3 的最佳值,这将返回 v3 的最佳值。一段时间以来,我一直在尝试最大化速度,但不断出现错误。这是我最后一次代码尝试。
import numpy as np
import matplotlib.pyplot as plt
y_n = []
def calculate_v3(r3, r, r2, phi_dot, theta_dot, phi, theta):
v3 = np.sqrt(r3**2 * theta2_dot**2 + (r - r2)**2 * theta1_dot**2 + 2 * r3 * (r - r2) * theta1_dot * theta2_dot * np.cos(theta_2 - theta_1))
return v3
def RHS(t, y, r1, r2, r3, r):
# ... (Same RHS function as before)
m2 = p * A * r
m1 = 5000
m3 = 100
theta_1, theta_2, w1, w2 = y
f0 = w1
f1 = w2
r = 1 # Define 'r' appropriately
f2 = (
(g * np.sin(theta_1) * ((m1 * r1) - (m2 * r) - (m3 * r2))) +
(m3 * r2) * (g * np.sin(theta_2) * np.cos(theta_1 - theta_2) - (r3 * w2**2 * np.sin(theta_1 - theta_2)) - (r2 * w1**2 * np.cos(theta_1 - theta_2) * np.sin(theta_1 - theta_2)))
) / (
(m1 * r1**2) + (m2 * (((r/2) - r2)**2 + (r**2/12))) + (m3 * r2**2 * np.sin(theta_1 - theta_2)**2)
)
f3 = ((r3/r2) * ((w1**2 * np.sin(theta_1 - theta_2)) - (f2 * np.cos(theta_1 - theta_2)))) - (g * np.sin(theta_2))
return np.array([f0, f1, f2, f3])
def RK4(t, y, h, f, r1, r2, r3, r):
#Runge Kutta standard calculations
k1 = f(t, y, r1, r2, r3, r)
k2 = f(t + h/2, y + h/2 * k1, r1, r2, r3, r)
k3 = f(t + h/2, y + h/2 * k2, r1, r2, r3, r)
k4 = f(t + h, y + h * k3, r1, r2, r3, r)
return 1/6*(k1 + 2 * k2 + 2 * k3 + k4)
def main():
global y_n
# Specify time interval and number of domain subintervals
t0 = 0
T = 0.71
n = 100
# Initial conditions
y0 = [np.pi/4, 0, 0, 0]
t_n = [t0]
y_n = [np.array(y0)]
#Step size
h = 0.01
while t_n[-1] < T:
#Keep going until T is reached.
#Store numerical solutions into y_n
y_n.append(y_n[-1] + h * RK4(t_n[-1], y_n[-1], h, RHS))
t_n.append(t_n[-1] + h)
print(y_n)
# Define bounds for r1, r2, r3, and r
r1_min = 0.5
r1_max = 1
r2_min = 3*r1_min
r2_max = 3*r1_max
r3_min = 0.3
r3_max = r2_max
r_min = r1_min + r2_min
r_max = r1_max + r2_max
# Initialize variables to store the maximum velocity and corresponding parameters
max_velocity = 0.0
best_parameters = None
# Iterate through parameter combinations within the specified bounds
for r1 in np.linspace(r1_min, r1_max, num=100):
for r2 in np.linspace(r2_min, r2_max, num=100):
for r3 in np.linspace(r3_min, r3_max, num=100):
for r in np.linspace(r_min, r_max, num=100):
# ... (Rest of your code remains the same)
# Calculate velocity for the current parameter combination
v3 = calculate_v3(r3, r, r2, y_n[-1][3], y_n[-1][1], varphi_dot, y_n[-1][2], y_n[-1][0])
# Check if this velocity is greater than the current maximum
if v3 > max_velocity:
max_velocity = v3
best_parameters = (r1, r2, r3, r)
# Print the maximum velocity and the corresponding parameters
print("Maximum Velocity:", max_velocity)
print("Best Parameters (r1, r2, r3, r):", best_parameters)
main()
这是我运行它后遇到的错误:
TypeError Traceback (most recent call last)
<ipython-input-8-ba5ebab27a6e> in <module>
103 print("Best Parameters (r1, r2, r3, r):", best_parameters)
104
--> 105 main()
<ipython-input-8-ba5ebab27a6e> in main()
62 #Keep going until T is reached.
63 #Store numerical solutions into y_n
---> 64 y_n.append(y_n[-1] + h * RK4(t_n[-1], y_n[-1], h, RHS))
65 t_n.append(t_n[-1] + h)
66
TypeError: RK4() missing 4 required positional arguments: 'r1', 'r2', 'r3', and 'r'
任何帮助都会很棒。
答: 暂无答案
评论
RHS
RK4()
RHS()