- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试在 python 中求解摩擦系数的科尔布鲁克(非线性)方程,但我不断收到此错误:
ZeroDivisionError: float 除以零
这是完整的回溯:
Traceback (most recent call last):
File "c:/Users/BDG/Desktop/kkk/www/Plots/jjj/Code.py", line 49, in <module>
f = Newton(f0,re)
File "c:/Users/BDG/Desktop/kkk/www/Plots/jjj/Code.py", line 20, in Newton
eps_new = func(f, Re)/dydf(f, Re)
File "c:/Users/BDG/Desktop/kkk/www/Plots/jjj/Code.py", line 13, in func
return -0.86*np.log((e_D/3.7)+((2.51/Re))*f**(-0.5))-f**(-0.5)
ZeroDivisionError: float division by zero
我正在尝试找到此 equation 的摩擦系数 (f) :
-0.86 * log(2.51/(Re * sqrt(f)) + e/D/3.7) = 1/sqrt(f)
在不同的雷诺数 (Re) 值下并绘制 f 与 Re 的关系图。
这是下面的代码,请帮忙。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import time
#Parameters
e_D = 1e-4
eps=1e-7
def func(f, Re):
return -0.86*np.log((e_D/3.7)+((2.51/Re))*f**(-0.5))-f**(-0.5)
def dydf(f, Re):
return (1.0793/(Re*((251*f**-0.5)/(100*Re)+(10*e_D)/37)*(f**1.5)))+(1/(2*(f**1.5)))
def Newton(f0, Re, conv_hist=True):
f = f0
eps_new = func(f, Re)/dydf(f, Re)
iteration_counter = 0
history = []
while abs(eps_new) >= eps and iteration_counter <= 100:
eps_new = func(f, Re)/dydf(f, Re)
f = f - eps_new
iteration_counter += 1
history.append([iteration_counter, f, func(f,Re), eps_new])
if abs(dydf(f, Re)) <= eps:
print('derivative near zero!, dydf =', dydf(f,re))
print(dydf(f,re), 'iter# =', iteration_counter, 'eps =', eps_new)
break
if iteration_counter == 99:
print('maximum iterations reached!')
print(f, 'iter# = ', iteration_counter)
break
if conv_hist:
hist_dataframe = pd.DataFrame(history, columns=['Iteration #', 'Re','f', 'eps'])
hist_dataframe.style.hide_index()
return f
startTime = time.time()
Re = np.linspace(10**4,10**7,100)
f0 = 0.001
for re in range(len(Re)):
f = Newton(f0,re)
endTime = time.time()
print('Total process took %f seconds!' % (endTime - startTime))
plt.loglog(Re, f, marker='o')
plt.title('f vs Re')
plt.grid(b=True, which='minor')
plt.grid(b=True, which='major')
plt.xlabel('Re')
plt.ylabel('f')
plt.savefig('fvsRe.png')
plt.show()
最佳答案
您的问题在这一行:
return -0.86*np.log((e_D/3.7)+((2.51/Re))*f**(-0.5))-f**(-0.5)
当Re
为0时,此操作失败。发生这种情况的原因是:
for re in range(len(Re)):
f = Newton(f0,re)
我认为你想做的是:
for re in Re:
f = Newton(f0,re)
但是,这不起作用,因为您希望绘制 f
与 Re
的图。因此,您应该创建一个列表并附加结果:
f = []
for re in Re:
f.append(Newton(f0,re))
关于python - 零除法错误: float division by zero (Solving colebrook (nonlinear) equation with Newton Raphson method in python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59859154/
我有以下代码将尝试求解多项式系统: require "bigdecimal" require "bigdecimal/newton" include Newton class Function a
我的任务是在10E-7的误差范围内使用Newton Raphson和二分法找到函数的根。 总而言之,我们了解到牛顿拉夫森法更快,更有效。 现在由于某种原因,我得出相反的结果。尽管我知道这两种方法中对根
好的,这段代码在另一个问题中,但我不知道如何添加更新的代码。我让这段代码正常工作并给出了正确的答案,但根据我的 while 循环条件它并没有停止。我不确定我在那里做错了什么?答案明显收敛,所有值都是正
我是这个主题的新手,找不到原因:程序有时有效,有时无效(问完问题后,它根本不想接受我的答案,而我可以我想写多少就写多少,它没有反应,只是列出数字,我给了小费) #include float ab
我警告你,这可能会造成混淆,而且我编写的代码与其说是完成的代码,不如说是思维导图。 我正在尝试实现 Newton-Raphson 方法来求解方程。我想不通的是如何写这个 Python 中的方程,用于根
在下面的代码中,当我选择例如“max_n_iterations”等于 1 时,列表“approximations”在打印时显示两个元素,而它应该只显示一个元素(初始 x)。 这是什么原因? #This
我正在尝试使用 Newton Raphson 方法找到 N 个根。这是我对相同的实现... double derive(int guess, int m, int n) { return gues
我有一个大问题。我需要用 C++ 函数或类求解 3 个变量的 3 个方程的非线性系统。我考虑过使用 Newton-Raphson 方法来执行解决方案。不幸的是,我没有找到可以为我做到这一点的源代码。会
问题的简要说明:我使用 Newton Raphson 算法在多项式中求根,但在某些情况下不起作用。为什么? 我从“c++ 中的数值食谱”中获取了一种 Newton Raphson 混合算法,该算法会在
我编写了牛顿拉夫森求根算法的简单实现,它采用初始猜测 init、一元函数 f 和公差 tol 作为参数,如下所示: bool newton_raphson(double& init,
我正在尝试在 R 中使用 Newton-Raphson 算法来最小化我为一个非常具体的问题编写的对数似然函数。老实说,估计方法超出了我的能力范围,但我知道我的领域(心理测量学)中有很多人使用 NR 算
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
public class Sqrt { public static void main(String[] args) { double EPS = 1
实际上,我正在使用用于 Android 的 xamarin studio 和用于 webService 的 IOS 开发我的应用程序,我在 Android 和 IOS 中分别包含了一个单独的项目。 我
我在一个简单的程序中工作,该程序使用 Newton-Raphson 方法计算任何给定函数的根。在这个程序中,我必须打印找到的根和进行的迭代次数。程序本身很好,我可以找到任何给定函数的根,但我无法正确计
x=float(raw_input('Enter a number to show its square root')) precise = 0.01 g=x/2.0 while abs(g**2-x
我正在尝试使用 scipy.optimize.newton_krylov() 来解决最小二乘优化问题,即找到 x 使得 (Ax - b)**2 = 0。我的理解是 A 必须是 mxn m>n,b 必须
我注意到,当我序列化具有 HTTP_VERB 键的 C# 字典时,它在 JSON 结构中变成了 httP_VERB 而不是 hTTP_VERB 或 http_verb 我希望驼峰式大小写能够成功。 这
我在 Newton-Raphson 迭代的脚本中收到 'float' object is not Iterable 错误。我将迭代应用于函数 f(x) = sin(x),并将 x0 = 3 应用于迭代
string result ="{"AppointmentID":463236,"Message":"Successfully Appointment Booked","Success":true,
我是一名优秀的程序员,十分优秀!