Python 在多个常量上绘制函数
我试图在一个图形上使用多个值来绘制函数Python 在多个常量上绘制函数,python,numpy,matplotlib,plot,scipy,Python,Numpy,Matplotlib,Plot,Scipy,我试图在一个图形上使用多个值来绘制函数f(x)。我以前做过,效果很好。但是当使用相同的方法使用这个函数时,我得到一个错误 x和y必须具有相同的第一维度,但具有形状(1000)和(1) 编辑: 当尝试设置m=1.1而不是列表,并仅为m的一个值绘制时,我得到以下错误消息 TypeError:只能将整数标量数组转换为标量索引 这是我的代码 import matplotlib.pyplot as plt import scipy as s x = s.linspace(0,2* s.pi, 1000
f(x)
。我以前做过,效果很好。但是当使用相同的方法使用这个函数时,我得到一个错误
x和y必须具有相同的第一维度,但具有形状(1000)和(1)
编辑: 当尝试设置
m=1.1
而不是列表,并仅为m
的一个值绘制时,我得到以下错误消息
TypeError:只能将整数标量数组转换为标量索引
这是我的代码
import matplotlib.pyplot as plt
import scipy as s
x = s.linspace(0,2* s.pi, 1000)
m=1.1
def f(x):
return [m**2 /(4*s.cos(x/2))] [ (m*s.cos(x/2) - 1)*(m - s.cos(x/2))] / ( 1 + m**2 - 2*m*s.cos(x/2))**2
plt.plot(x,f(x))
plt.show()
这能说明我的问题是什么吗
我做错了什么?
谢谢 将常数作为参数传递:
def f(x, m):
numerator = m**2*(m*s.cos(x/2) - 1)*(m - s.cos(x/2))
denominator = 4*s.cos(x/2)*(1 + m**2 - 2*m*s.cos(x/2))**2
return numerator/denominator
fig, ax = plt.subplots()
m_arr = s.asarray([1.1, 1.2, 1.3, 1.5, 2.0])
for const_m in m_arr:
ax.plot(x, f(x, const_m))
将常数作为参数传递:
def f(x, m):
numerator = m**2*(m*s.cos(x/2) - 1)*(m - s.cos(x/2))
denominator = 4*s.cos(x/2)*(1 + m**2 - 2*m*s.cos(x/2))**2
return numerator/denominator
fig, ax = plt.subplots()
m_arr = s.asarray([1.1, 1.2, 1.3, 1.5, 2.0])
for const_m in m_arr:
ax.plot(x, f(x, const_m))
我认为你的函数没有返回你想要的。在返回调用中,您试图使用计算值索引到第一个数组中,这会导致
类型错误:只有整数标量数组可以转换为标量索引错误
e、 g.[1,2,3,4][1]
为您提供2
,但[1,2,3,4][1.5]
会引发错误
如果我使用原始数组进行索引,我会得到基于值常量的漂亮、干净的行
import matplotlib.pyplot as plt
import numpy as np
import scipy as s
x = s.linspace(0,2* s.pi, 1000)
m = [1.1, 1.2, 1.3, 1.5, 2.0]
m = np.array(m).reshape(-1,1)
def f(x):
return np.array([m**2 /(4*s.cos(x/2))][0]).T.dot(np.array([ (m*s.cos(x/2) - 1)*(m - s.cos(x/2))] / (1 + m**2 - 2*m*s.cos(x/2))**2)[0])
plt.plot(x,m[0]*x, x,m[1]*x, x,m[2]*x, x,m[3]*x, x,m[4]*x)
plt.show()
我认为你的函数没有返回你想要的结果。在返回调用中,您试图使用计算值索引到第一个数组中,这会导致类型错误:只有整数标量数组可以转换为标量索引错误
e、 g.[1,2,3,4][1]
为您提供2
,但[1,2,3,4][1.5]
会引发错误
如果我使用原始数组进行索引,我会得到基于值常量的漂亮、干净的行
import matplotlib.pyplot as plt
import numpy as np
import scipy as s
x = s.linspace(0,2* s.pi, 1000)
m = [1.1, 1.2, 1.3, 1.5, 2.0]
m = np.array(m).reshape(-1,1)
def f(x):
return np.array([m**2 /(4*s.cos(x/2))][0]).T.dot(np.array([ (m*s.cos(x/2) - 1)*(m - s.cos(x/2))] / (1 + m**2 - 2*m*s.cos(x/2))**2)[0])
plt.plot(x,m[0]*x, x,m[1]*x, x,m[2]*x, x,m[3]*x, x,m[4]*x)
plt.show()
如果您想让它以最小的变化工作,请使用单例列表m=[1.1]
如果您想让它以最小的变化工作,请使用单例列表m=[1.1]
这里有问题,它给出的图不正确。它应该看起来像@PMende制作的情节。在-pi/2