我希望從兩個非線性方程中獲得一些解(x和y)。 所以我寫了一些代碼,並插入方程,但它不起作用。Python:如何計算2個變量非線性方程或在python中繪製這些方程?
據我所知,問題產生於f2 = math.acos(~~~),即「ValueError:math domain error」 (實際上,當我擦除math.acos並顯示一些錯誤但特定解決方案。)
所以,請問一些幫助知道方法, (1)我如何獲得'f1 =〜','f2 =〜'的某些解作爲x,y。 (2)我如何繪製'sub_equation =〜'和'f1 =〜'的圖。
我真的很想找一些幫助。謝謝。
from scipy.optimize import fsolve
import math
import numpy as np
import matplotlib.pyplot as plt
###Input###
Angle = 120.0
length_Porpyrin =18.6
length_linker = 12.5
###parameter###
length_1 = length_Porpyrin/2.0
lenght_2 = length_linker/2.0
delta = np.pi*Angle/180.0/2.0
ramda = 30.18/180.0*np.pi
bond_angle = 2.0*np.pi/3.0
length_d = 1.35
def equations(p):
x,y = p
### modified Variable ###
atr1 = np.arctan(length_1/x)
atr2 = np.arctan(lenght_2/y)
sub_equation = (length_d ** 2+(y/np.cos(np.arctan(lenght_2/y))) ** 2-(x/np.cos(np.arctan(length_1/x))) ** 2)*np.cos(np.arctan(lenght_2/y))/(2 * length_d * y)
##########################
f1 = ( (x/np.cos(np.arctan(length_1/x))) ** 2 + (y/np.cos(np.arctan(lenght_2/y))) ** 2 - 2 *(x/np.cos(np.arctan(length_1/x))) * (y/np.cos(np.arctan(length_1/x))) * np.cos(ramda-np.arctan(length_1/x)-np.arctan(lenght_2/y)) ) - length_d ** 2
f2 = math.acos(sub_equation) - (bond_angle -(np.pi-np.arctan(lenght_2/y)-delta))
return (f1, f2)
solution = fsolve(equations, (25,25))
radius1 = solution[0]
radius2 = solution[1]
print('[solution]')
print(solution)
print('radius1', radius1)
print('radius2', radius2)
是的,我明白了。我需要將math.acos()的內部項限制爲[-1,1]。但是如何?定義每個方程和變量(x,y)。它犯了一些錯誤。 – Dasol