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