Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Matplotlib和系数系数绘制多项式_Python_Matplotlib - Fatal编程技术网

Python 使用Matplotlib和系数系数绘制多项式

Python 使用Matplotlib和系数系数绘制多项式,python,matplotlib,Python,Matplotlib,我的代码是: import numpy as np import matplotlib as plt polyCoeffiecients = [1,2,3,4,5] plt.plot(PolyCoeffiecients) plt.show() 其结果是描述1,2,3,4,5中点及其之间直线的直线,而不是以1,2,3,4,5为系数的5次多项式(p(x)=1+2x+3x+4x+5x) 我该如何绘制一个只有系数的多项式呢?Eyzuky,看看这是不是你想要的: import numpy as np f

我的代码是:

import numpy as np
import matplotlib as plt
polyCoeffiecients = [1,2,3,4,5]
plt.plot(PolyCoeffiecients)
plt.show()
其结果是描述1,2,3,4,5中点及其之间直线的直线,而不是以1,2,3,4,5为系数的5次多项式(p(x)=1+2x+3x+4x+5x)


我该如何绘制一个只有系数的多项式呢?

Eyzuky,看看这是不是你想要的:

import numpy as np
from matplotlib import pyplot as plt

def PolyCoefficients(x, coeffs):
    """ Returns a polynomial for ``x`` values for the ``coeffs`` provided.

    The coefficients must be in ascending order (``x**0`` to ``x**o``).
    """
    o = len(coeffs)
    print(f'# This is a polynomial of order {ord}.')
    y = 0
    for i in range(o):
        y += coeffs[i]*x**i
    return y

x = np.linspace(0, 9, 10)
coeffs = [1, 2, 3, 4, 5]
plt.plot(x, PolyCoefficients(x, coeffs))
plt.show()

一个非常类似Python的解决方案是使用列表理解来计算函数的值

import numpy as np
from matplotlib import pyplot as plt

x = np.linspace(0, 10, 11)
coeffs = [1, 2, 3, 4, 5]
y = np.array([np.sum(np.array([coeffs[i]*(j**i) for i in range(len(coeffs))])) for j in x])
plt.plot(x, y)
plt.show()

您可以通过获得大量的x值并使用来获得多项式在x值处的y值来近似绘制多项式。然后你可以画出x-vals和y-vals

import numpy as np
import matplotlib.pyplot as plt

curve = np.array([1,2,3,4,5])
x = np.linspace(0,10,100)
y = [np.polyval(curve, i) for i in x]
plt.plot(x,y)

通用的矢量化实现:

from typing import Sequence, Union
import numpy as np
import matplotlib.pyplot as plt


Number = Union[int, float, complex]

def polyval(coefficients: Sequence[Number], x: Sequence[Number]) -> np.ndarray:
    # expand dimensions to allow broadcasting (constant time + inexpensive)
    # axis=-1 allows for arbitrarily shaped x
    x = np.expand_dims(x, axis=-1)
    powers = x ** np.arange(len(coefficients))
    return powers @ coefficients

def polyplot(coefficients: Sequence[Number], x: Sequence[Number]) -> None:
    y = polyval(coefficients, x)
    plt.plot(x, y)

polyplot(np.array([0, 0, -1]), np.linspace(-10, 10, 210))
plt.show()

定义x的值,并使用感谢的答案。我现在明白了我的问题:我有矩阵乘法:(np.linalg.pinv(XXt[I])*X[I]*Yt)现在这段代码返回一个数组:[[X1],[X2],…[Xm]]我想把它转换成[X1,X2,…,Xm]我怎么做?如果你喜欢这个答案,请投赞成票;-)要展开列表,请参见。