在Python中使用牛顿方法,没有错误消息,但不打印/绘图

时间:2019-01-09 20:17:36

标签: python python-3.x jupyter-notebook

我正在尝试使用牛顿方法通过Python近似计算Colebrook方程的根。目前,该代码没有给出错误,但也没有打印/绘图。我了解这可能是个案,感谢您提前提供的所有帮助! enter image description here

numpy as np
import random
import matplotlib.pyplot as plt

#Define Variables, k=e/D, E+04<=x=Re<=E+07
k=0.0001

#Define Colebrook function, f=x=independent variable
def f(x):
    return -0.86*(np.log(( 2.51/(Re*np.sqrt(x))) + ( k/3.7))) - (1/np.sqrt(x))

#Define derivative function by definition & approximation
def derivative(f,x,h):
    return (f(x + h) - f(x))/h

#Newton's method approximation with initial gussed x value
x=0.01
for Re in range (10^4,10^7, 10000):
    m=derivative(f,x,h=0.01)
    b=f(x)-m*x #y=mx+b
    newx=-b/m #new x value determined by the tangent line
    if abs(g(newx))<= (1/10000000000):
        print ('root =' + newx)
    else:
        x=newx

#plot
for Re in range (10^4, 10^7,10000):
    x=newx
    plt.plot (f(x))   

我已经知道我要寻找的根大约是。 0.03。

2 个答案:

答案 0 :(得分:2)

最明显的问题:

range (10^4,10^7, 10000)

不提供任何输出。您应该查看range的定义:第三个输入是步长,而不是步数;我想您想使用“ power”,10**410**7^符号是按位XOR。

答案 1 :(得分:0)

我看到了几个问题:

  • 正如mdurant所指出的,您的范围需要进行一些适当的重写。
  • 您的第一个循环会调用您尚未在任何地方定义的g(x)函数。
  • 即使在那之后,您的第二个循环仍在说:“让x为xnew,然后将f(x)添加到绘图中,并重复多次(无需更改x的值)”。
  • 此外,我认为plt.plot()只会将数据添加到绘图中。您需要plt.show()才能查看图表。您可能还需要定义绘图轴,颜色等。一些使用matplotlib的示例脚本可以向您显示语法。