利用牛顿迭代法求金属壳体爆破压强

利用牛顿迭代法求金属壳体爆破压强_第1张图片

import math

# 定义材料抗拉强度、屈服强度和弹性模量
stress_b = 1544
stress_02 = 1263
E = 200000

# 硬化系数的迭代收敛函数
def fun(n):
    return (math.log(stress_b/stress_02)) / (math.log(n) - math.log(math.e*(stress_02/E+0.002)))-n

# 其上函数的一阶导
def fun1(n):
    return -1 / (n * (math.log(n) - math.log(math.e*(stress_02/E+0.002))) ** 2) - 1

# 迭代,最大迭代次数10000,误差精度1e-10
def get_root(x0, max_iter=10000, tol=1e-10):
    # 浮点化
    p0 = x0 * 1.0
    for i in range(max_iter):
        # 迭代公式
        p = p0 - fun(p0) / fun1(p0)
        # 若结果小于误差精度,输出
        if abs(p - p0) < tol:
            # return "经过{}次迭代,n的值约为{}".format(i + 1, p)
            return p
        # 更新迭代变量
        p0 = p
    # 若达到最大迭代次数还未达到精度,则输出“无法迭代”
    print("无法迭代")


if __name__ == '__main__':
    # 迭代计算硬化指数
    a = get_root(1)
    print("迭代后的硬化指数:{}".format(a))
    # 计算爆破压强
    p_bs = 2*3.4*1544/(math.sqrt(3)**(1+a)*500)
    print("壳体爆破压强:{}".format(p_bs))

# 输出结果
迭代后的硬化指数:0.12020781679499225
壳体爆破压强:11.34876818007919

 

 

你可能感兴趣的:(Python常用标准库详解,算法,迭代,方程,python)