在写论文或者做ppt的时候经常需要进行很多的公式推导,通常一些简单的公式我们希望可以通过程序编码直接地实现,并可以导出为pdf供更多的应用。
我个人通常的做法是到一些Latex公式编辑网站进行在线编辑,当然也可以使用mathtype,除此之外使用mathematica也可以生成一些比较合适的公式图片。常用的在线编辑网址如下:
今天介绍的不是这些公式生成器,而是python的一个工具包,其通过简单的几行代码就能够生成一些公式,对于习惯于使用python的同学来说,可以极大地提高公式推导和论文写作的效率了。
在正式介绍之前先说这个工具包的几个优点(个人见解):
非常简单的安装:
pip install handcalcs
这个工具包在github上开源共享了,想要深入研究的人可以看看handcalcs
因为是开源文件,我这里提供一个下载地址给那些懒得登录githug的同学,其中包括了handcalcs的github源代码和我自己练习的demo,可以用作练习的demo和测试。特别建议大家仔细阅读README.md文件哦,基本功能和拓展操作都在这个文档中说地很明白了。
传送:csdn的handcalcs资源_jerry_liufeng
我使用的是jupyter notebook编辑器,在jupyter中使用handcalcs库个人感觉可能更方便。
import handcalcs.render
%%render
a = 2
b = 3
c = 2*a+b/3
注意:
%%render
这种magic方法,通常其必须在第一行中显示,所以尽量在%%render的后面进行注释,而且导入函数库也只有在上方的cell导入结果:
# 基础用法2——在方程中进行显示
from handcalcs.decorator import handcalc
@handcalc(left="",right="",jupyter_display=True)
def my_calc(x,y,z):
a = 2*x/y
b = 3*a
c = (a+b)/z
return locals()
my_calc(1,1,1)
注意:
@handcalc
,在函数末尾返回return locals()
结果:
为了避免忘记%%render这类magic方法只能在第一行定义的特点,我将每一个jupyter文件中的cell单独形成一段代码:
from math import sqrt,asin,sin
import handcalcs.render
第一个较为复杂函数的demo:
%%render
#symbolic
a = 1
b = 4
c = 3
x = (-b+sqrt(b**2-4*a*c))/(2*a)
结果:
第二个较为复杂函数的demo:
%%render
#symbolic
f = c/a + b #Comment
g = c*f / a # Comment
d = sqrt(a / b) + asin(sin(b / c)) + (a/b)**(0.5) + sqrt((a*b + b*c)/(b**2)) + sin(a/b) #Comment
结果:
%%render
#Symbolic
Mag_1 = 100
if Mag_1< 10000:Mag = Mag_1+100
else:Mag = Mag_1-100
结果:
%%render
x = 2
if x < 1: b = x
elif x > 1: b = x*1; c = b
else: b = x*1; c = b #Comment
结果:
注意:
_
后面的字符都是角标#symbolic
的话会报错from scipy import integrate
import handcalcs.render
%%render
#parameters
a = 0.1
b = 0.2
def F(x):
return x**2 + 10**x
%%render
g = integrate.quad(F,a,b)
结果视图:
#parameter
按照三列的格式显示结果,不显示过程公式%%render
a = 1
b = 4
c = 3
x = (-b+sqrt(b**2-4*a*c))/(2*a)
不使用#parameter
:
使用#parameter
之后:
%%render
#symbolic
a = 1
b = 4
c = 3
x = (-b+sqrt(b**2-4*a*c))/(2*a)
不使用#symbolic
:
使用#symbolic
:
#Long
和 #short
使用上面积分的公式表达:
使用#Long
:
使用·#short`
%%tex
而非%%render
就行了%%tex
a = 2
b = 3
c = 2*a + b/3
结果:
\begin{aligned} a &= 2\; \\[10pt] b &= 3\; \\[10pt] c &= 2 \cdot a + \frac{ b }{ 3 } = 2 \cdot 2 + \frac{ 3 }{ 3 } &= 5.0 \end{aligned} \]
import handcalcs.render
import forallpeople
%%render
alpha = 0.9 #α
beta_x = 1.6 #β加上下标x
theta_2 = 1 #θ加加下标2
编写不易,如果有用请各位点个赞支持一下呗^^,也欢迎各位留言讨论啊!!!