【问题标题】:Using Newton's Method in Python, no error messages but does not print/plot在 Python 中使用牛顿法,没有错误消息但不打印/绘图
【发布时间】:2019-01-09 20:17:36
【问题描述】:

我正在尝试使用牛顿法用 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。

【问题讨论】:

  • 不确定这是如何工作的,但您目前只是在返回东西,从未真正在返回的函数之一上调用 print()。这就是为什么。 print(f(x)) 会给你那个值。
  • 您似乎想以相同的方式调用plot() 1000 次

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


【解决方案1】:

最明显的问题:

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

没有输出。你应该查一下range的定义:第三个输入是步长,不是步数;我想你想使用“权力”,10**410**7^ 符号是按位异或。

【讨论】:

  • 感谢您的快速回复!已经改变了,但仍然没有错误/绘图/打印 tho
  • 运行了吗??
  • 使用了jupyter notebook和spider,都跑了,什么也没显示
  • 好的,但是完成了吗? print 语句仅在给定条件下执行,可能未达到该条件。由于与此答案的文本相同的原因,您给出的范围不会发生情节。
【解决方案2】:

我发现了几个问题:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    相关资源
    最近更新 更多