from sympy import *
import math
def f_fa1(alpha):
return math.sqrt(1 + alpha * alpha - alpha)
def f_rho1(alpha):
return (2 * alpha - 1) / (2 - alpha)
def f_beta1(alpha):
return 2 * f_fa1(alpha) / (2 - alpha)
def f_epsilong2a(epsilong1a, alpha):
return epsilong1a * f_rho1(alpha)
def f_epsilonga(epsilong1a, alpha):
return epsilong1a * f_beta1(alpha)
def f_epsilong1b(epsilong1a, alpha2):
return epsilong1a * (2 - alpha2) / (2 * alpha - 1)
def f_epsilong3b(epsilong1b, epsilong2a):
return 0 - epsilong1b - epsilong2a
def f_epsilongb(epsilong1b, fa2, alpha2):
return epsilong1b * (2 * fa2) / (2 - alpha2)
def f_epsilong3a(epsilong1a, epsilong2a):
return 0 - epsilong1a - epsilong2a
def f(x, args1):
f = (args1[0] + args1[1]) ** args1[2] * (args1[3] * args1[4]) ** args1[5] / args1[6] - args1[7] * (
args1[8] + args1[9] * (2 * math.sqrt(1 + x * x - x)) / (2 - x)) ** args1[10] * (
(2 * math.sqrt(1 + x * x - x)) / (2 * x - 1) * args1[11]) ** args1[12] / math.sqrt(1 + x * x - x) * (
math.e ** ((args1[13] + (-args1[14] * (2 - args1[15]) / (2 * args1[16] - 1) - args1[17])) - (args1[18] + args1[19])))
return f
# 牛顿迭代法
def niu(args1):
x = symbols('x')
x0 = 0.01
x_list = [x0]
i = 0
while True:
if diff(f(x, args1), x).subs(x, x0) == 0:
print('极值点:', x0)
break
else:
x0 = x0 - f(x0, args1) / diff(f(x, args1), x).subs(x, x0)
x_list.append(x0)
if len(x_list) > 1:
i += 1
error = abs((x_list[-1] - x_list[-2]) / x_list[-1])
if error == 0:
return x_list[-1]
else:
pass
if __name__ == '__main__':
f0 = 0.98
alpha = 0.3
epsilong1a = 0.005
epsilong3A = 0
epsilong3B = 0
epsilongA = 0
epsilongB = 0
n = -0.033
m = 0.172
epsilonga = f_epsilonga(epsilong1a, alpha)
beta1 = f_beta1(alpha)
fa1 = f_fa1(alpha)
epsilong2a = f_epsilong2a(epsilong1a, alpha)
epsilong3a = f_epsilong3a(epsilong1a, epsilong2a)
args1 = [epsilongA, epsilonga, n, beta1, epsilong1a, m, fa1, f0, epsilongB, epsilong1a, n, epsilong2a, m, epsilong3B,
epsilong2a, alpha, alpha, epsilong2a, epsilong3A, epsilong3a]
alpha2 = niu(args1)
fa2 = f_fa1(alpha2)
epsilong1b = f_epsilong1b(epsilong1a, alpha2)
epsilongb = f_epsilongb(epsilong1b, fa2, alpha2)
iter = 0
while epsilongb / epsilonga < 10:
iter += 1
epsilongA = epsilongA + epsilonga
epsilongB = epsilongB + epsilongb
epsilong3B = epsilong3B + f_epsilong3b(epsilong1b, epsilong2a)
epsilong3A = epsilong3A + epsilong3a
args1[0] = epsilongA
args1[8] = epsilongB
args1[13] = epsilong3B
args1[18] = epsilong3A
alpha2 = niu(args1)
fa2 = f_fa1(alpha2)
epsilong1b = f_epsilong1b(epsilong1a, alpha2)
epsilongb = f_epsilongb(epsilong1b, fa2, alpha2)
print("epsilong1a * 迭代次数为:" + str(iter * epsilong1a))
print("epsilong2a * 迭代次数为:" + str(iter * epsilong2a))
先把最后两句改为
print("epsilong1a * 迭代次数为:" , (iter * epsilong1a))
print("epsilong2a * 迭代次数为:" , (iter * epsilong2a))
看看有啥提示