绘制受约束条件影响的等式

时间:2016-04-03 22:29:56

标签: python matplotlib

Here is an image of the formula I am supposed to use, and some sample graphs that it should look like.

Here is an image that states the question I am working on.

到目前为止我所拥有的:

import numpy as np
import matplotlib.pyplot asplt
import math

def graph (formula):
x = np.arrange(-4,4,0.1)
y = formula(x)
plt.plot(x,y)
plt.show()

def my_formula(x):
return ((n**(n-.5))/(math.factorial(n-1)))*((1+x/(math.sqrt(n)))**(n-1))*
  (math.e**(-n*(1+x/(math.sqrt(n)))))
n=1

graph(my_formula)

我无法弄清楚如何将x> -sqrt(n)约束包含在等式中。任何帮助都将非常感谢!!

- 这是一个甚至不是编程的课程,但我们还是要做这种事情,所以我真的不是那么棒

1 个答案:

答案 0 :(得分:0)

x > sqrt(n)约束限制了x值的范围,您可以在创建x数组时轻松执行此操作。

以下是一种方法(请参阅max行和后续行),但我也将图表的xlim设置为-4到4范围,以便轻松实现比较不同的n值:

import numpy as np
import matplotlib.pyplot as plt
from math import factorial, sqrt

def graph(formula, n):
    xmin = max(-sqrt(n), -4) # set the lower x limit for the calculation
    x = np.arange(xmin,4,0.1)
    y = formula(x, n)
    plt.plot(x,y)
    plt.xlim(-4, 4)  # set the graph limits to the full range
    plt.show()

def my_formula(x, n):
    z = 1 + x/sqrt(n)
    a = n**(n-.5)/factorial(n-1)
    b = z**(n-1)
    c = np.exp(-n*z)
    return  a*b*c

n = 4
graph(my_formula, n)

下图中有n=4所以xmin=-2enter image description here

此外,我在这里重写了一些代码,尽管这些代码主要是为了清晰起见。首先,我将n作为变量传递,因为多个图表正在更改n(如果您想将n视为常量,请在导入后直接放置,以便人们可以找到它)。其次,我将数学函数导入全局命名空间,因为用代码编写的数学方程很复杂,没有命名空间的所有权重。第三,我把等式的三个术语分成了一小块。总的来说,可读性很重要。