这是一次反演课作业,新手编写过程有点繁琐。
"""
最速下降法 中间穿插 割线法
"""
from numpy import *
from sympy import symbols, diff
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import pyplot as plt
import matplotlib as mpl
x1, x2, x3, x4 = symbols('x1, x2, x3, x4')
x_0 = [0, 0]
print('x0=', x_0)
alf = [x4]
f = 100*(x2-x1**2)**2 + (1-x1)**2
k1 = []
k2 = []
k3 = []
F = []
F_X0 = []
df = [diff(f, x1), diff(f, x2)] # 求一阶导
'''
求df(x0) 进入迭代
'''
def steepset(xx1, xx2):
x0 = [xx1, xx2]
# print('x0=', x0)
g_0 = []
for i in range(0, 2): # i 的取值范围与自变量有关 下同
aa = df[i]
# g_0.append(aa.subs({x1: 4, x2: 2, x3: -1}))
g_0.append(aa.subs({
x1: xx1, x2: xx2})) # 不同自变量输入不同
print('g=', g_0)
a2 = []
a1 = mat(x0) - mat(alf)*mat(g_0)<