Использование функции Ньютона scipy для решения уравнения - PullRequest
0 голосов
/ 29 мая 2020

Я использую функцию scipy 'newton' в течение нескольких месяцев, и я столкнулся с довольно запутанной ситуацией. Один из моих графиков, включающий следующий код:

#Declaring frequency and wave vector arrays
w_array = np.linspace(0.1,3,1000)*10**15
k_array = np.array([])

#Declaring variables
p = 2.85*10**15
e1=1
c=300000000

def twolayer(k):
    e2 = 3.43-(p**2)/(w**2 - (1j*gamma*w))
    result = ((w/c)*(((e2*e1)/(e2+e1))**0.5))-k
    return result

#Loop that uses secant method for each value of omega to find solutions for k
for w in w_array:
    gamma = 2.23 * 10**14
    k_array = np.append(k_array,newton(twolayer,0))

print(twolayer(0))

#Plotting
plt.figure(dpi=100)
plt.scatter(k_array.real,w_array)
plt.xlabel('Wave vector k')
plt.ylabel('Frequency ω')

, который выводит следующий график:

enter image description here

Но я немного запутался, что на самом деле делает здесь функция 'newton'. Поскольку я не предоставил производную, она подвергается методу Секанта, но какой процесс позволяет ей решать функцию, которая имеет несколько значений y для данного значения x?

1 Ответ

1 голос
/ 29 мая 2020

Вы просто неправильно это строите! В ваших вычислениях k является функцией w.

Попробуйте:

#Plotting
plt.figure(dpi=100)
plt.scatter(w_array, k_array.real)
plt.xlabel('Frequency ω')
plt.ylabel('Wave vector k')

дает

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...