Python: построение двумерной функции двух переменных

У меня есть функция:

def g(R, r):
 return (np.sqrt(2.0 * (R + r) / (r * R)) - (1 + np.sqrt(R)) / np.sqrt(R) -
 np.sqrt(2.0 / (r * (1 + r))) * (1 - r) -
 (1.0 / np.sqrt(R) - np.sqrt(2.0) * (1 - R) / np.sqrt(R * (1 + R))
 - 1))

Функция определяется установкой delta v_B = delta v_H где delta v_B является

np.sqrt(2.0 * (R + r) / (r * R)) - (1 + np.sqrt(R)) / np.sqrt(R) -
 np.sqrt(2.0 / (r * (1 + r))) * (1 - r)

и delta v_H является

1.0 / np.sqrt(R) - np.sqrt(2.0) * (1 - R) / np.sqrt(R * (1 + R)) - 1

Поэтому я написал g как delta v_b - delta v_H.

Теперь это моя функция и код, который я использую ниже:

import pylab
import numby as np


def g(R, r):
 return (np.sqrt(2.0 * (R + r) / (r * R)) - (1 + np.sqrt(R)) / np.sqrt(R) -
 np.sqrt(2.0 / (r * (1 + r))) * (1 - r) -
 (1.0 / np.sqrt(R) - np.sqrt(2.0) * (1 - R) / np.sqrt(R * (1 + R))
 - 1))


r = np.linspace(11.9, 16, 500000)
R = np.linspace(1, 20, 500000)

fig2 = pylab.figure()
ax2 = fig2.add_subplot(111)
ax2.plot(R, g(R, r), 'r')
pylab.xlabel('$R_1 = \\frac{r_C}{r_A}$')
pylab.ylabel('$R_2 = \\frac{r_B}{r_A}$')
pylab.xlim((0, 25))
pylab.ylim((0, 100)) 

pylab.show()

Функция должна асимптотировать бесконечность около 11.94 и пересекать линию y = x около 15.58

Как я могу сделать такой сюжет? Я не знаком с тем, как это сделать, и я не знаю, как построить такую функцию.

Является ли мое определение непригодным для g как g(R, r)? Если да, то как это определить, если это не так?

1 ответ

Это вызов кривой неявных функций, вы можете использовать contour для рисования с levels=[0] аргументов levels=[0]:

import numpy as np
import matplotlib.pyplot as plt

def g(R, r):
 return (np.sqrt(2.0 * (R + r) / (r * R)) - (1 + np.sqrt(R)) / np.sqrt(R) -
 np.sqrt(2.0 / (r * (1 + r))) * (1 - r) -
 (1.0 / np.sqrt(R) - np.sqrt(2.0) * (1 - R) / np.sqrt(R * (1 + R))
 - 1))

R, r = np.mgrid[1:30:200j, 1:100:200j]
Z = g(R,r)
plt.contour(R, r, Z, colors='k', levels=[0]) 
plt.show()

licensed under cc by-sa 3.0 with attribution.