Почему Python говорит, что не может получить доступ к локальной переменной «min_distance», если она не связана со значенPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему Python говорит, что не может получить доступ к локальной переменной «min_distance», если она не связана со значен

Сообщение Anonymous »

Я написал код, вычисляющий положения планет, однако по какой-то причине получаю ошибку 'невозможно получить доступ к локальной переменной 'min_distance', где она не связана со значением'
Я не знаю почему, min_distance уже было глобальным значением, так как в функцию Compute_position(min_distance) я уже включил min_distance и обновил его вне функции.
Я изменил функцию на Compute_position( min_distance) просто вычислить_position() и объявил min_distance глобальным, но это не сработало.
type def compute_position(min_distance,min_distance_Rogue_moon_global,max_distance_Earth_moon_global,
sub,total_time, dt, G, M_SUN, M_earth, M_VENUS, M_MARS, M_mercury, M_JUPITER, M_SATURN, M_NEPTUNE, M_URANUS, M_Rogue, M_Moon,
vctr_position_moon, vctr_velocity_moon, vctr_acceleration_moon,
vctr_position_Rogue, vctr_velocity_Rogue, vctr_acceleration_Rogue,
vctr_position_earth, vctr_velocity_earth, vctr_acceleration_earth,
vctr_position_venus, vctr_velocity_venus, vctr_acceleration_venus,
vctr_position_mars, vctr_velocity_mars, vctr_acceleration_mars,
vctr_position_mercury, vctr_velocity_mercury, vctr_acceleration_mercury,
vctr_position_jupiter, vctr_velocity_jupiter, vctr_acceleration_jupiter,
vctr_position_saturn, vctr_velocity_saturn, vctr_acceleration_saturn,
vctr_position_neptune, vctr_velocity_neptune, vctr_acceleration_neptune,
vctr_position_uranus, vctr_velocity_uranus, vctr_acceleration_uranus,
vctr_position_earth0, vctr_velocity_earth0, vctr_acceleration_earth0,
Roche_limit_Rogue_Moon_check,Roche_limit_Earth_Moon_check ,Roche_limit_Rogue_Earth_check,
Roche_limit_Rogue_Moon, Roche_limit_Earth_Moon, Roche_limit_Rogue_Earth, vctr_velocity_Rogue_Z
):

min_distance = float('inf')
min_distance_Earth_moon = float('inf')
min_distance_Rogue_moon = float('inf')
max_distance_Earth_moon = int(0)
for n in range(1, int(total_time/dt )):
#print(f"%{int(n/int(total_time/dt)*100)}")

vctr_acceleration_Rogue[n] = (- G * M_SUN* vctr_position_Rogue[n-1]/np.linalg.norm(vctr_position_Rogue[n-1])**3- G * M_earth * (vctr_position_Rogue[n-1]-vctr_position_earth[n-1])/np.linalg.norm(vctr_position_Rogue[n-1]-vctr_position_earth[n-1]**3)
- G * M_VENUS * (vctr_position_Rogue[n-1]-vctr_position_venus[n-1])/np.linalg.norm(vctr_position_Rogue[n-1]-vctr_position_venus[n-1])**3
- G * M_MARS * (vctr_position_Rogue[n-1]-vctr_position_mars[n-1])/(np.linalg.norm(vctr_position_Rogue[n-1]-vctr_position_mars[n-1])**3)
- G * M_mercury * (vctr_position_Rogue[n-1]-vctr_position_mercury[n-1])/np.linalg.norm(vctr_position_Rogue[n-1]-vctr_position_mercury[n-1])**3
- G * M_JUPITER* (vctr_position_Rogue[n-1]-vctr_position_jupiter[n-1])/np.linalg.norm(vctr_position_Rogue[n-1]-vctr_position_jupiter[n-1])**3
- G * M_Moon* (vctr_position_Rogue[n-1]-vctr_position_moon[n-1])/np.linalg.norm(vctr_position_Rogue[n-1]-vctr_position_moon[n-1])**3
)
vctr_velocity_Rogue[n] = vctr_velocity_Rogue[n-1] + vctr_acceleration_Rogue[n-1]*dt
vctr_position_Rogue[n] = vctr_position_Rogue[n-1] + vctr_velocity_Rogue[n-1]*dt + 0.5*dt**2*vctr_acceleration_Rogue[n-1]

vctr_acceleration_earth[n] = (
- G * M_SUN * vctr_position_earth[n-1]/np.linalg.norm(vctr_position_earth[n-1])**3
- G * M_mercury*(vctr_position_earth[n-1] - vctr_position_mercury[n-1])/np.linalg.norm(vctr_position_earth[n-1] - vctr_position_mercury[n-1])**3
- G * M_VENUS * (vctr_position_earth[n-1]-vctr_position_venus[n-1])/np.linalg.norm(vctr_position_earth[n-1]-vctr_position_venus[n-1])**3
- G * M_MARS * (vctr_position_earth[n-1]-vctr_position_mars[n-1])/(np.linalg.norm(vctr_position_earth[n-1]-vctr_position_mars[n-1])**3)
- G * M_JUPITER* (vctr_position_earth[n-1]-vctr_position_jupiter[n-1])/np.linalg.norm(vctr_position_earth[n-1]-vctr_position_jupiter[n-1])**3
- G * M_SATURN *(vctr_position_earth[n-1]-vctr_position_saturn[n-1])/np.linalg.norm(vctr_position_earth[n-1]-vctr_position_saturn[n-1])**3
- G * M_Moon* (vctr_position_earth[n-1] - vctr_position_moon[n-1])/np.linalg.norm(vctr_position_earth[n-1] - vctr_position_moon[n-1])**3
- G * M_Rogue* (vctr_position_earth[n-1] - vctr_position_Rogue[n-1])/np.linalg.norm(vctr_position_earth[n-1] - vctr_position_Rogue[n-1])**3
)

vctr_velocity_earth[n] = vctr_velocity_earth[n-1] + vctr_acceleration_earth[n-1]*dt
vctr_position_earth[n] = vctr_position_earth[n-1] + vctr_velocity_earth[n-1]*dt + 0.5*dt**2*vctr_acceleration_earth[n-1]

vctr_acceleration_moon[n] = (- G * M_SUN * vctr_position_moon[n-1]/np.linalg.norm(vctr_position_moon[n-1])**3
- G * M_Rogue* (vctr_position_moon[n-1] - vctr_position_Rogue[n-1])/(np.linalg.norm(vctr_position_moon[n-1] - vctr_position_Rogue[n-1])**3)
- G * M_earth*(vctr_position_moon[n-1] - vctr_position_earth[n-1])/(np.linalg.norm(vctr_position_moon[n-1] - vctr_position_earth[n-1])**3)
)
vctr_velocity_moon[n] = vctr_velocity_moon[n-1] + vctr_acceleration_moon[n-1]*dt
vctr_position_moon[n] = vctr_position_moon[n-1] + vctr_velocity_moon[n-1]*dt + 0.5*dt**2*vctr_acceleration_moon[n-1]

vctr_acceleration_earth0[n] = (-G * M_SUN * vctr_position_earth0[n-1]/np.linalg.norm(vctr_position_earth0[n-1])**3
- G * M_VENUS * (vctr_position_earth0[n-1]-vctr_position_venus[n-1])/np.linalg.norm(vctr_position_earth0[n-1]-vctr_position_venus[n-1])**3
- G * M_MARS * (vctr_position_earth0[n-1]-vctr_position_mars[n-1])/(np.linalg.norm(vctr_position_earth0[n-1]-vctr_position_mars[n-1])**3)
- G * M_JUPITER* (vctr_position_earth0[n-1]-vctr_position_jupiter[n-1])/np.linalg.norm(vctr_position_earth0[n-1]-vctr_position_jupiter[n-1])**3)
vctr_velocity_earth0[n] = vctr_velocity_earth0[n-1] + vctr_acceleration_earth0[n-1]*dt
vctr_position_earth0[n] = vctr_position_earth0[n-1] + vctr_velocity_earth0[n-1]*dt + 0.5*dt**2*vctr_acceleration_earth0[n-1]

vctr_acceleration_venus[n] = (- G * M_SUN * vctr_position_venus[n-1]/np.linalg.norm(vctr_position_venus[n-1])**3
- G * M_Rogue* (vctr_position_venus[n-1] - vctr_position_Rogue[n-1])/(np.linalg.norm(vctr_position_venus[n-1] - vctr_position_Rogue[n-1])**3))
vctr_velocity_venus[n] = vctr_velocity_venus[n-1] + vctr_acceleration_venus[n-1]*dt
vctr_position_venus[n] = vctr_position_venus[n-1] + vctr_velocity_venus[n-1]*dt + 0.5*dt**2*vctr_acceleration_venus[n-1]

vctr_acceleration_mars[n] = (-G * M_SUN * vctr_position_mars[n-1]/np.linalg.norm(vctr_position_mars[n-1])**3
- G * M_JUPITER* (vctr_position_mars[n-1]-vctr_position_jupiter[n-1])/np.linalg.norm(vctr_position_mars[n-1]-vctr_position_jupiter[n-1])**3
- G * M_Rogue* (vctr_position_mars[n-1] - vctr_position_Rogue[n-1])/(np.linalg.norm(vctr_position_mars[n-1] - vctr_position_Rogue[n-1])**3))
vctr_velocity_mars[n] = vctr_velocity_mars[n-1] + vctr_acceleration_mars[n-1]*dt
vctr_position_mars[n] = vctr_position_mars[n-1] + vctr_velocity_mars[n-1]*dt + 0.5*dt**2*vctr_acceleration_mars[n-1]

vctr_acceleration_mercury[n] = (-G * M_SUN * vctr_position_mercury[n-1]/np.linalg.norm(vctr_position_mercury[n-1])**3
- G * M_Rogue* (vctr_position_mercury[n-1] - vctr_position_Rogue[n-1])/(np.linalg.norm(vctr_position_mercury[n-1] - vctr_position_Rogue[n-1])**3))
vctr_velocity_mercury[n] = vctr_velocity_mercury[n-1] + vctr_acceleration_mercury[n-1]*dt
vctr_position_mercury[n] = vctr_position_mercury[n-1] + vctr_velocity_mercury[n-1]*dt + 0.5*dt**2*vctr_acceleration_mercury[n-1]

vctr_acceleration_jupiter[n] = (-G * M_SUN * vctr_position_jupiter[n-1]/np.linalg.norm(vctr_position_jupiter[n-1])**3
- G * M_SATURN *(vctr_position_jupiter[n-1]-vctr_position_saturn[n-1])/np.linalg.norm(vctr_position_jupiter[n-1]-vctr_position_saturn[n-1])**3
- G * M_Rogue * (vctr_position_jupiter[n-1] - vctr_position_Rogue[n-1])/(np.linalg.norm(vctr_position_jupiter[n-1] - vctr_position_Rogue[n-1])**3))
vctr_velocity_jupiter[n] = vctr_velocity_jupiter[n-1] + vctr_acceleration_jupiter[n-1]*dt
vctr_position_jupiter[n] = vctr_position_jupiter[n-1] + vctr_velocity_jupiter[n-1]*dt + 0.5*dt**2*vctr_acceleration_jupiter[n-1]

# Calculate the current distance between Earth and the Rogue planet
current_distance_Rogue_Earth = np.linalg.norm(vctr_position_earth[n] - vctr_position_Rogue[n])
current_distance_Rogue_moon = np.linalg.norm(vctr_position_Rogue[n] - vctr_position_moon[n])

if Roche_limit_Earth_Moon_check == False:
if (np.linalg.norm(vctr_position_earth[n-1] - vctr_position_moon[n-1]) < Roche_limit_Earth_Moon):
Roche_limit_Earth_Moon_check = True

if Roche_limit_Rogue_Moon_check == False:
if (current_distance_Rogue_moon < Roche_limit_Rogue_Moon):
Roche_limit_Rogue_Moon_check = True

# Update min_distance if the current distance is smaller
if current_distance_Rogue_Earth < min_distance:
min_distance = current_distance_Rogue_Earth

current_distance_Earth_moon = np.linalg.norm(vctr_position_earth[n-1] - vctr_position_moon[n-1])

if current_distance_Earth_moon < min_distance_Earth_moon:
min_distance_Earth_moon = current_distance_Earth_moon

if current_distance_Rogue_moon < min_distance_Rogue_moon:
min_distance_Rogue_moon = current_distance_Rogue_moon

if current_distance_Earth_moon > max_distance_Earth_moon:
max_distance_Earth_moon = current_distance_Earth_moon

new_df = pd.DataFrame(new_data)
# Mevcut verilerle yeni verileri birleştirin
combined_df = pd.concat([existing_df, new_df], ignore_index=True)

# Excel dosyasına yaz
with pd.ExcelWriter(file_path, engine='openpyxl', mode='w') as writer:
combined_df.to_excel(writer, index=False)
print("it worked")

return min_distance, min_distance_Earth_moon, min_distance_Rogue_moon, max_distance_Earth_moon, vctr_velocity_Rogue_Z

c = int(0)
Alpha_Radian = 0
def CalcD(Alpha_Radian):
X_Rogue, Y_Rogue = 0, 0
for D in range(1, 2):
X_Rogue,Y_Rogue = CalcS(X_Rogue,Y_Rogue)
Alpha_degree = 0 + D*90
Alpha_Radian = math.radians(Alpha_degree)
return Alpha_Radian

def CalcS(X_Rogue,Y_Rogue):
Alpha_Radian = 0
for S in range(1, 2):

sub = 0.5E+06 + S * 0.5E+06
X_sub = float(sub*math.sin(Alpha_Radian))
Y_sub = float(sub*math.cos(Alpha_Radian))

X_Rogue = X_Earth + X_sub
Y_Rogue = Y_Earth + Y_sub
CalcV(vctr_position_Rogue, vctr_velocity_Rogue, vctr_velocity_Rogue_Z, sub)

return X_Rogue,Y_Rogue

def CalcV(vctr_position_Rogue,vctr_velocity_Rogue, vctr_velocity_Rogue_Z, sub):
X_Rogue = float()
Y_Rogue = float()
c = 0
for V in range(1 , 2):

min_distance_Rogue_moon_global, min_distance_Earth_moon_global , min_distance , max_distance_Earth_moon_global,sub , vctr_velocity_Rogue_Z = compute_position(
min_distance,min_distance_Rogue_moon_global,max_distance_Earth_moon_global,
sub,total_time, dt, G, M_SUN, M_earth, M_VENUS, M_MARS, M_mercury, M_JUPITER, M_SATURN, M_NEPTUNE, M_URANUS, M_Rogue, M_Moon,
vctr_position_moon, vctr_velocity_moon, vctr_acceleration_moon,
vctr_position_Rogue, vctr_velocity_Rogue, vctr_acceleration_Rogue,
vctr_position_earth, vctr_velocity_earth, vctr_acceleration_earth,
vctr_position_venus, vctr_velocity_venus, vctr_acceleration_venus,
vctr_position_mars, vctr_velocity_mars, vctr_acceleration_mars,
vctr_position_mercury, vctr_velocity_mercury, vctr_acceleration_mercury,
vctr_position_jupiter, vctr_velocity_jupiter, vctr_acceleration_jupiter,
vctr_position_saturn, vctr_velocity_saturn, vctr_acceleration_saturn,
vctr_position_neptune, vctr_velocity_neptune, vctr_acceleration_neptune,
vctr_position_uranus, vctr_velocity_uranus, vctr_acceleration_uranus,
vctr_position_earth0, vctr_velocity_earth0, vctr_acceleration_earth0,
Roche_limit_Rogue_Moon_check,Roche_limit_Earth_Moon_check ,Roche_limit_Rogue_Earth_check,
Roche_limit_Rogue_Moon, Roche_limit_Earth_Moon, Roche_limit_Rogue_Earth, vctr_velocity_Rogue_Z
)

print(f"Percent calculated:{c/1600*100}")
c += 1
vctr_velocity_Rogue_Z = -10 -V*10
vctr_position_Rogue[0] = np.array([X_Rogue, Y_Rogue, 1e+06])
vctr_velocity_Rogue[0] = np.array([0, 0, vctr_velocity_Rogue_Z])

return vctr_position_Rogue,vctr_velocity_Rogue, vctr_velocity_Rogue_Z
CalcD(Alpha_Radian)
here


Подробнее здесь: https://stackoverflow.com/questions/790 ... s-not-asso
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»