Я хочу построить график V (ось y) и график t (ось x), используя приведенное ниже уравнение при 5 различных значениях L (показано ниже)
Л= [5,10,15,20,25]
б=0,0032
Уравнение, (b*V*0,277*t) - (b*L) = log(1+b*V*0,277*t)
вывод кода будет таким, как показано на рисунке Ожидаемый результат
Хотя sympy предоставляет функцию plot_implicit
, результаты далеки от хороших. Мы можем использовать Numpy и Matplotlib для достижения нашей цели.
Основная идея заключается в том, что ваше уравнение можно записать как LHS - RHS = 0
. Итак, мы можем создать контурные графики и выбрать уровень 0. Но контурные графики используют карты цветов, поэтому нам придется создавать сплошные карты цветов:
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.lines import Line2D
from matplotlib.colors import ListedColormap
import numpy as np
Lvalues = [5,10,15,20,25]
bval = 0.0032
V = np.linspace(0, 1000)
t = np.linspace(0, 10)
V, t = np.meshgrid(V, t)
f = lambda V, t, b, L: b*V*0.277*t - b*L - np.log(1+b*V*0.277*t)
colors = cm.tab10.colors
handles = []
fig, ax = plt.subplots()
for L, c in zip(Lvalues, colors):
cmap = ListedColormap([c, c])
z = f(V, t, bval, L)
ax.contour(t, V, z, levels=[0], cmap=cmap)
handles.append(Line2D([], [], color=c, label = "L = %s" % L))
ax.legend(handles=handles)
plt.show()
Большое спасибо за подробное решение.
Предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.