Python 绘制具有离散和连续参数的积分
Python Plot an Integral with discrete and continuous parameters
我有以下功能:
def sbeta(beta,gamma,y):
k = 2/(np.pi)**2.
return k * np.sqrt(1 - (np.sqrt(1-y**2.)*np.sin(beta)*np.cos(gamma) - y*np.cos(beta))**2.)
其中 beta 是常数,y 定义在 -1 和 1 之间:
beta = 23.4
y = numpy.linspace(-1, 1, 100)
我想为从 0 到 2pi 计算的 gamma 绘制此函数的积分:
def integral(beta,gamma,y):
for i in range(len(y)):
I = integrate.quad(sbeta, 0., 2*np.pi, args=(beta, y[i]))
print(I)
plt.plot(y[i],I[0])
gamma = np.linspace(0., 2*np.pi, 10)
integral(beta,gamma,y)
plt.show()
此时没有错误,但我认为这是不正确的。我想将 gamma 的积分计算为从 0 到 2pi 的变量,但 y 是一个离散数组。如何计算和绘制来自 -1 和 1 的 10 个 y 值?我应该使用 scipy.integrate.cumtrapz 吗?
这是我尝试的答案:
import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate
def f(gamma, y):
k = 2/(np.pi)**2.
beta = 23.4*(np.pi/180.)
return k * np.sqrt(1 - (np.sqrt(1-y**2.)*np.sin(beta)*np.cos(gamma) - y*np.cos(beta))**2.)
y = np.linspace(-1., 1.,10)
low = 0.
high = 2*np.pi
Ivals = []
for i in range(len(y)):
I = integrate.quad(f, low, high, args=(y[i]))
plt.scatter(y[i],I[0])
Ivals.append(I)
plt.show()
显示以下情节:
谁能证实这是否正确?
我有以下功能:
def sbeta(beta,gamma,y):
k = 2/(np.pi)**2.
return k * np.sqrt(1 - (np.sqrt(1-y**2.)*np.sin(beta)*np.cos(gamma) - y*np.cos(beta))**2.)
其中 beta 是常数,y 定义在 -1 和 1 之间:
beta = 23.4
y = numpy.linspace(-1, 1, 100)
我想为从 0 到 2pi 计算的 gamma 绘制此函数的积分:
def integral(beta,gamma,y):
for i in range(len(y)):
I = integrate.quad(sbeta, 0., 2*np.pi, args=(beta, y[i]))
print(I)
plt.plot(y[i],I[0])
gamma = np.linspace(0., 2*np.pi, 10)
integral(beta,gamma,y)
plt.show()
此时没有错误,但我认为这是不正确的。我想将 gamma 的积分计算为从 0 到 2pi 的变量,但 y 是一个离散数组。如何计算和绘制来自 -1 和 1 的 10 个 y 值?我应该使用 scipy.integrate.cumtrapz 吗?
这是我尝试的答案:
import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate
def f(gamma, y):
k = 2/(np.pi)**2.
beta = 23.4*(np.pi/180.)
return k * np.sqrt(1 - (np.sqrt(1-y**2.)*np.sin(beta)*np.cos(gamma) - y*np.cos(beta))**2.)
y = np.linspace(-1., 1.,10)
low = 0.
high = 2*np.pi
Ivals = []
for i in range(len(y)):
I = integrate.quad(f, low, high, args=(y[i]))
plt.scatter(y[i],I[0])
Ivals.append(I)
plt.show()
显示以下情节:
谁能证实这是否正确?