# 求值

符号运算一种输出自然是带入符号求值了,我们推导了半天,很多时候是为了最终计算出数值解的.

求值有3种方式:

+ 求符号的值
+ 带入符号求算式的值
+ 将算式转化为python函数

## 符号求值

符号求值使用`evalf`方法,默认的精度是小数点后15位


```python
import sympy as sp
```


```python
sp.pi.evalf()
```




    3.14159265358979



也可以带上精度


```python
sp.pi.evalf(5)
```




    3.1416




```python
sp.sin(2).evalf(3)
```




    0.909



## 带入符号求值

符号运算一种输出自然是带入符号求值了,我们推导了半天,很多时候是为了最终计算出数值解的.

我们可以使用算式对象的`subs`方法为自变量符号代入具体数值以求解


```python
x,y,z = sp.symbols("x,y,z")
```


```python
f = x+2*y+z
```


```python
f.subs([(x,1),(y,2),(z,3)])
```




$\displaystyle 8$



## 将算式转换为python函数

另一种用处是使用函数`lambdify(params:Tuple[symbols],exp,package:str)=>Callable`把算式转换成python函数,末位参数表示一些用到的运算使用哪个包,支持的有:

+ `sympy`,自带的运算库
+ `math`标准库math
+ `numnpy`
+ `scipy`
+ `numexpr`
+ `mpmath`,sympy依赖的运算库
+ `tensorflow`

默认是:
+ 如果装了scipy就是`["scipy", "numpy"]`
+ 如果装了numpy就是`["numpy"]`
+ 如果都没装就是`["math", "mpmath", "sympy"]`

构造好之后再直接调用这个函数就可以求出数值解.


```python
f_python = sp.lambdify((x,y,z),f,'numpy')
```


```python
f_python(x=1,y=2,z=3)
```




    8



c870dd749a528b95b1dfe8790be2fdc101140466
ipynb
Jupyter Notebook
src/数据分析篇/工具介绍/SymPy/输出/求值.ipynb
hsz1273327/TutorialForDataScience
1d8e72c033a264297e80f43612cd44765365b09e
MIT
src/数据分析篇/工具介绍/SymPy/输出/求值.ipynb
hsz1273327/TutorialForDataScience
1d8e72c033a264297e80f43612cd44765365b09e
MIT
2020-03-31T03:36:05.000Z
2020-03-31T03:36:21.000Z
src/数据分析篇/工具介绍/SymPy/输出/求值.ipynb
hsz1273327/TutorialForDataScience
1d8e72c033a264297e80f43612cd44765365b09e
MIT
Qwen/Qwen-72B
1. YES
2. YES