Python:绘制两个变量的二维函数

时间:2013-07-03 23:24:09

标签: python matplotlib

我有这个功能:

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}}如果是这样,如果不是这样,应该如何定义?

enter image description here

1 个答案:

答案 0 :(得分:2)

这是调用隐式函数曲线,你可以使用contour用参数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()

enter image description here