Используя метод Ньютона в Python, нет сообщений об ошибках, но не печатает / печатает - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь использовать метод Ньютона для аппроксимации корня уравнения Колебрука с помощью Python. В настоящее время код не дает ошибок, но также не печатает / печатает. Я понимаю, что это может быть индивидуальный случай и спасибо за всю помощь заранее! введите описание изображения здесь

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 голосов
/ 10 января 2019

Я вижу несколько вопросов:

  • Как указал mdurant, ваш диапазон нуждается в некоторой корректной переписке.
  • Ваш первый цикл вызывает функцию g(x), которую вы нигде не определили.
  • Даже после этого ваш второй цикл говорит: «Пусть x будет xnew, затем добавьте f (x) к графику и повторите это много раз (не меняя значения x)».
  • Кроме того, я думаю, что plt.plot () просто добавляет данные к графику. Вам нужен plt.show (), чтобы увидеть график. Вы также можете определить оси, цвета и т. Д. Некоторых сценариев, использующих matplotlib, которые могут показать вам синтаксис.
0 голосов
/ 09 января 2019

Самая очевидная проблема:

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

не дает вывода. Вам нужно найти определение range: третий вход - это размер шага, а не количество шагов; и я полагаю, вы хотели использовать «власть», 10**4, 10**7. Символ ^ является побитовым XOR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...