使用不同颜色绘制多个函数,包括导数

Ric*_* P. 3 python numpy matplotlib sympy

我的 Python 程序有一个非常简单的问题——它根本没有完成。现在它正在做我想做的一切,但不是我想要的。

阴谋

我一直在努力改变三件事:

  1. 所有函数都使用相同的颜色绘制,我希望程序在向绘图中添加新函数时自动切换到新颜色(它将超过 2 个,都在同一个绘图上)。
  2. f(x) 的范围是 140。我怎样才能减少它?也许到 20/40。
  3. (最重要)我的代码效率不高。f1并且derivative根本没有关联。我在 中声明了函数的模型f1,但我必须在derivative. 每次我尝试这样做时,我最终都会遇到该main功能的一些问题。我最终会添加更多功能,例如集成和诸如此类的东西,如果每次我想对f1程序做某事时都从头开始声明所有内容,那将有点失去其目的。

我应该使用x = Symbol('x') inside f1吗?

import numpy as np
import matplotlib.pyplot as plt
from sympy import *

x = Symbol('x')

def f1(a, b, c, d):
    y = a*x**3 + b*x**2 + x*c + d
    return y
    ###yprime = y.diff(x) 
    ###return yprime

def derivative(a, b, c, d):
    y = a*x**3 + b*x**2 + x*c + d
    yprime = y.diff(x)
    return yprime

def factorail(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

###colors = iter(cm.rainbow(np.linspace(0, 1, len(ys))))
###for y in ys:
    ###plt.scatter(x, y, color=next(colors))
def main():
    ###colors = itertools.cycle(["r", "b", "g"])
    y = f1(0,1,2,1)
    yp = derivative(0,1,2,1)
    print(y)
    plot(y, yp)
    plot(yp)
    plt.show()


if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

小智 8

垂直窗口由ylim选项设置。我建议对 也使用一些明确的限制x,默认的 -10 到 10 不一定最适合您。我确实建议阅读有关 SymPy plotting 的页面

颜色由line_color选项设置。不同的颜色需要不同的 调用plot,但可以组合使用。例子:

p = plot(y, (x, -5, 5), ylim=(-20, 20), line_color='b', show=False)
p.extend(plot(yp, (x, -5, 5), ylim=(-20, 20), line_color='r', show=False))
p.show()
Run Code Online (Sandbox Code Playgroud)

结果是

合并

函数重用很简单:

def derivative(a, b, c, d):
    y = f1(a, b, c, d)
    yprime = y.diff(x)
    return yprime
Run Code Online (Sandbox Code Playgroud)

旁白:如果我们尝试 会发生什么line_color=['b', 'r'],例如plot(y, yp, ylim=(-20, 20), line_color=['b', 'r'])?有趣的事情发生了:

有趣的