# 测试文件

在此对编写的各个函数进行测试，检查是否可以正常运行，首先加载base文件里面定义的各种函数。


```python
%run base.py
```


```python
from sympy import init_printing
init_printing()
from IPython.core.interactiveshell import InteractiveShell 
InteractiveShell.ast_node_interactivity = "all"
```

## 基本梯度功能

在此可以求梯度与Hessian矩阵，例子使用

$$
x_1^2+x_2\times cos(x_2)
$$




```python
xvec = symbols('x1:3')  # 定义变量x1,x2
fexpr = xvec[0]**2+xvec[1]*cos(xvec[1])
gexpr = get_g(fexpr, xvec, display=True)
print('-'*40)
Gexpr = get_G(fexpr, xvec, display=True)
```


```python
g = get_fun(gexpr,xvec)
g.__name__
g(1, 1)
```

## 黄金分割法测试

目标函数为：

$$
1-x\times e^{-x^2}
$$

在$\sqrt{2}/2$取到解析解


```python
%%time
def foo(x): return 1-x*np.exp(-x**2)
print('0.618法', 
    golden_section_search(foo, 0.01, interval=[0, 1], printout=True), 
    '解析解', np.sqrt(0.5))
```

## 修正牛顿法在正定二次函数情况下的测试

函数形式为：

$$
x_1^2+x_2^2+x_1\cdot x_2
$$

在(0,0)取到最小值


```python
%%time
xvec = symbols('x1:3')
fexpr = xvec[0]**2+xvec[1]**2+1*xvec[0]*xvec[1]  # 正定的二次函数
pprint(fexpr)
x = modified_newton(fexpr, xvec, (1, 1), eps=1e-5)
print('结果：', x)
```

## 阻尼牛顿法在正定二次函数上的测试

函数形式同上


```python
%%time
fexpr = xvec[0]**2+xvec[1]**2+1*xvec[0]*xvec[1]  # 正定的二次函数
pprint(fexpr)
x = damped_newton(fexpr, xvec, (1, 1), eps=1e-5)
print('结果：', x)
```

728c8b3a308494b0781ab516e79b5ddd04c6532a
ipynb
Jupyter Notebook
test.ipynb
LingrenKong/Numerical-Optimization-Code
598e2b5099e2ba57ea0aa7ff4a5f5547889828b2
MIT
2021-11-10T09:06:03.000Z
2021-12-07T06:43:45.000Z
test.ipynb
LingrenKong/Numerical-Optimization-Code
598e2b5099e2ba57ea0aa7ff4a5f5547889828b2
MIT
test.ipynb
LingrenKong/Numerical-Optimization-Code
598e2b5099e2ba57ea0aa7ff4a5f5547889828b2
MIT
Qwen/Qwen-72B
1. YES
2. YES