精华内容
下载资源
问答
  • 摘要(Abstract)本文介绍使用Python来做数学计算,在学习和工作中,经常会遇到一些数学计算的问题。一般人会使用计算器软件,不得不说,计算器太难用了。专业人士可能会使用更强大的工具,如Matlab,但这种重量级工具...

    摘要(Abstract)

    本文介绍使用Python来做数学计算,在学习和工作中,经常会遇到一些数学计算的问题。一般人会使用计算器软件,不得不说,计算器太难用了。专业人士可能会使用更强大的工具,如Matlab,但这种重量级工具有时可能并不适用。本文打算使用一个轻量级的工具Python来做计算。准确来说Python并不是一个数学工具,而是一种编程语言。Python提供了很多数学库,利用Python和这些库可以做很多数学计算。

    本文不是编程语言的教程,更像是一个工具的使用教程,阅读本文不需要有程序设计基础,当然,需要一点数学基础(比如加减乘除)。本文适合任何想找一个计算工具的人学习和参考。

    本文将以实例讲解各种用法。

    安装Python(Installation)

    Python官方网站提供下载,完全免费使用。Python目前有Python 2和Python 3两个版本,两个版本有一些语法差别,对于本文来说,几乎没有区别,推荐使用Python 3。在Download界面找到系统对应的版本下载(我的版本是Mac OS X 64-bit/32-bit installer),双击直接安装。安装好后,找到程序IDLE,启动IDLE就可开始写Python程序了。

    提示1:Mac OS和大部分版本Linux系统自带Python运行环境,可以不用安装。当然,也可升级成最新版本。Windows需要自行安装。

    提示2:也可以安装Sublime Text编辑器,再安装Sublime REPL插件。本人现在使用这种方案,写Python程序非常方便。

    提示3:搜狗输入法用户注意,搜狗输入法在IDLE下有点小问题(不能退格),切换到英文输入法即可。

    Python 2 和Python 3的注意事项

    print的语法。python 3的用法为print("hello world!"),python 2的用法为print "hello world!"或者print("hello world!")。

    基本运算

    加法

    >>>1 + 2 //直接输入,回车直接输出结果

    3

    >>>sum = 1 + 2 //计算结果保存在sum中

    >>>print(sum) //输出sum

    3

    >>>a = 1 //变量

    >>>b = 2

    >>>sum = a + b //变量相加

    >>>print(sum)

    3

    减法

    >>>a = 1

    >>>b = 2

    >>>2 - 1

    1

    >>>a - b

    -1

    >>>b - a

    1

    乘法

    >>>1 * 2

    2

    >>>1.5 * 3

    4.5

    >>>a * b

    2

    >>>

    除法

    传统的除法。有编程经验的人一定知道,整型除法的结果也是整型(地板除,舍弃小数部分)。如果有一个数是浮点型,则结果是浮点型(真正的除法,保留小数)。

    >>>1 / 3 //整型除法,商为0,舍弃小数部分

    0

    >>>5 / 2

    2

    >>>1.0 / 3 //浮点数除法,保留小数

    0.3333333333333333

    >>>5.0 / 2.0

    2.5

    真正的除法。在未来的Python版本中,不管是整型还是浮点型除法,结果总是真实地商(保留小数部分),现阶段可以通过执行from __future__ import division指令做到这一点。

    >>>from __future__ import division

    >>>1 / 3

    0.3333333333333333

    >>>5 / 2

    2.5

    >>>1.0 / 3

    0.3333333333333333

    >>>5.0 / 2.0

    2.5

    地板除。Python 2.2新加了一个操作符//,//除法不管操作数为何种数值类型,总是舍弃小数部分。

    >>>1 // 3

    0

    >>>5 // 2

    2

    >>>1.0 // 3

    0.0

    >>>5.0 // 2.0

    2.0

    取余数

    >>>1 % 3

    1

    >>>5 % 2

    1

    >>>5.0 % 2.0

    1.0

    幂运算

    Python有幂运算符**。

    >>>2 ** 3

    8

    >>>2.5 ** 5

    97.65625

    >>>4 ** -1

    0.25

    代码中分别计算23、2.55、4-1。

    复数

    复数的表示。复数的表示如下:

    >>>aComplex = 1 + 2j //申明一个复数

    >>>aComplex

    (1+2j)

    >>>aComplex.real //复数实部

    1.0

    >>>aComplex.imag //复数虚部

    2.0

    >>>aComplex.conjugate() //共轭复数

    (1-2j)

    >>>

    复数的运算。复数的运算与实数一致。

    >>>c = 1 + 2j

    >>>d = 2 - 1j

    >>>c + d

    (3+1j)

    >>>c - d

    (-1+3j)

    >>>c * d

    (4+3j)

    >>>c / d

    1j

    >>>c / 2

    (0.5+1j)

    >>>c * 2

    (2+4j)

    >>>c ** 2

    (-3+4j)

    math标准库

    Python有一个标准库math专门用来做数学运算的。详细介绍可参考Python的官方文档。要使用math库,先要import这个库。

    >>>import math

    一下的例子假设已经执行了import math。

    两个常数

    >>>math.pi //圆周率pi

    3.141592653589793

    >>>math.e

    2.718281828459045 //自然常数e

    数值计算

    math.ceil(x)。向上取整,返回最小的大于或等于x的整数。

    >>>math.ceil(2)

    2.0

    >>>math.ceil(2.2)

    3.0

    >>>math.ceil(2.9)

    3.0

    >>>math.ceil(3.0)

    3.0

    math.floor(x)。向下取整,返回最大的小于或等于x的整数。

    >>>math.floor(2)

    2.0

    >>>math.floor(2.2)

    2.0

    >>>math.floor(2.9)

    2.0

    >>>math.floor(3.0)

    3.0

    math.fabs(x)。取x得绝对值。

    >>>math.fabs(1.0)

    1.0

    >>>math.fabs(-1.0)

    1.0

    math.factorial(x)。求x的阶乘,x必须为整数,否则出现错误。

    >>>math.factorial(5)

    120

    >>>math.factorial(4)

    24

    >>>math.factorial(2.1) //执行错误

    Traceback (most recent call last):

    File "", line 1, in

    ValueError: factorial() only accepts integral values

    >>>

    幂和对数函数(Power and logarithmic functions)

    math.exp(x)。返回e ** x。

    >>>math.exp(2)

    7.38905609893065

    >>>math.e ** 2

    7.3890560989306495 //请忽略后面的不一致,计算机浮点数本身的问题

    math.log(x [,base])。求以base为底的对数。

    >>>math.log(math.e) //值传一个参数,默认以math.e为底

    1.0

    >>>math.log(math.e ** 2)

    2.0

    >>>math.log(8, 2) //两个参数,2为底

    3.0

    >>>math.log(100, 10) //两个参数,10为底s

    2.0

    math.pow(x, y)。幂运算,计算xy,相当于x ** y。

    >>>math.pow(2, 3)

    8.0

    >>>2 ** 3

    8

    math.sqrt(x)**。求x的平方根。

    >>>math.sqrt(4)

    2.0

    >>>math.sqrt(9.0)

    3.0

    开根号。Python的math库中只有开平方根,没有立方根和n次方根,不过可以利用math.pow或者**,只需把根号变成分数。

    >>>math.pow(4, 1.0 / 2) //平方根,相当于math.sqrt(4)

    2.0

    >>>4 ** (1.0 / 2) //平方根,相当于math.sqrt(4)

    2.0

    >>>8 ** (1.0 / 3) //立方根

    2.0

    >>>1024 ** (1.0 / 10) //10次方根

    2.0

    三角函数(Trigonometric functions)

    math库中的三角函数使用的弧度(radians)计算,所以用角度(angle)计算前先要转换成弧度。math也提供了角度和弧度的转换函数。

    方法名

    实现功能

    math.degrees(x)

    把弧度x转换成角度

    math.radians(x)

    把角度x转换成弧度

    >>>math.degrees(math.pi)

    180.0

    >>>math.radians(180.0)

    3.141592653589793

    math.cos(x)。不解释。

    math.sin(x)。不解释。

    math.tan(x)。不解释。

    math.acos(x)。反余弦函数。

    math.asin(x)。反正弦函数。

    math.atan(x)。反正切函数。

    math.hypot(x,y)。欧式范数(Euclidean norm)。相当sqrt(x*x + y*y)。

    >>>math.cos(math.pi)

    -1.0

    >>>math.sin(math.pi / 2)

    1.0

    >>>math.tan(math.pi / 4)

    0.9999999999999999 //结果为1,计算机浮点数固有缺陷

    >>>math.tan(math.pi / 4)

    0.9999999999999999

    >>>math.acos(-1.0)

    3.141592653589793

    >>>math.asin(1.0)

    1.5707963267948966

    >>>math.atan(1)

    0.7853981633974483

    >>>math.pi / 4

    0.7853981633974483

    >>>math.hypot(3, 4)

    5.0

    双曲函数(Hyperbolic functions)

    双曲函数和三角函数类似。

    math.cosh(x)。求x的双曲余弦函数。

    math.sinh(x)。求x的双曲正弦函数。

    math.tanh(x)。求x的双曲正切函数。

    math.acosh(x)。求x的反双曲余弦。

    math.asinh(x)。求x的反双曲正弦。

    math.atanh(x)。求x的反双曲正切。

    >>>math.cosh(1)

    1.5430806348152437

    >>>math.sinh(1)

    1.1752011936438014

    >>>math.tanh(1)

    0.7615941559557649

    >>>math.acosh(1.5430806348152437)

    1.0

    >>>math.asinh(1.1752011936438014)

    1.0

    >>>math.atanh(0.7615941559557649)

    0.9999999999999999 //结果为1,计算机浮点数固有缺陷

    一个复杂的例子

    举一个复杂的例子,计算下面的公式:

    >>>- (4 ** (1.0 / 3)) / 4 * math.log(2 ** (1.0 / 3) - 1) - (math.sqrt(3) * (4 ** (1.0 / 3))) / 6 * math.atan(math.sqrt(3) / (1 + 2 * (2 * (1.0 / 3))))

    0.24209140862733897

    在前面的例子可能已经注意到了,计算机表示浮点数是不准确的,比如1.0成了0.9999999999999999。这是计算机浮点数表示法的固有缺陷。比如会出现如下结果:

    >>>0.05 + 0.01

    0.060000000000000005

    >>>1.0 - 0.12

    0.88

    >>>1.0 - 0.32

    0.6799999999999999

    >>>1.0 - 0.42

    0.5800000000000001

    >>>4.015 * 100

    401.49999999999994

    >>>123.3 / 100

    1.2329999999999999

    浮点数的缺陷不仅仅在Python在存在,在任何语言都存在,它是浮点数表示法本身的缺陷。对于不是非常严格的计算,这种缺陷是可以接受的,而对于过于严格的计算,那么应该用整型数计算(整型计算是精确的)。比如在保留两位小数的计算中,可以把原始数乘以100取整数再计算,约定最后两位为小数即可。

    结语

    本文介绍了Python标准库的数学计算方法,通过使用Python标准数学库,可以应付一些日常的基本计算(比如我就很少使用计算器了,一般的计算都用Python解决)。当然,数学是如此的丰富,仅有标准库是远远不够的。将来如果有需要的话,我会研究下使用其它的数学库来进行更复杂的计算以及数学图像的绘制。比如NumPy、SciPy、Matplotlib、SymPy等。

    展开全文
  • 数学建模中,大多数人都在用MATLAB,但...python中有非常著名的科学计算三剑客库:numpy,scipy和matplotlib,三者基本代替MATLAB的功能,完全能够应对数学建模任务。下面列举几个python解决数学建模的例子:线性...

    数学建模中,大多数人都在用MATLAB,但MATLAB不是一门正统的计算机编程语言,而且速度慢还收费,最不能忍受的就是MATLAB编辑器不支持代码自动补全。python对于数学建模来说,是个非常好的选择。python中有非常著名的科学计算三剑客库:numpy,scipy和matplotlib,三者基本代替MATLAB的功能,完全能够应对数学建模任务。

    5d087b03e138a835.jpg

    下面列举几个python解决数学建模的例子:

    线性规划问题的求最大最小值问题max: z = 4x1 + 3x2

    st: 2x1 + 3x2<=10

    x1 + x2 <=8

    x2 <= 7

    x1,x2 > 0

    from scipy.optimize import linprog

    c = [4,3] #默认linprog求解的是最小值,若求最大值,此处c取反即可得到最大值的相反数。

    A = [[2,3],[1,1]]

    b = [10,8]

    x1_bounds = [0,None]

    x2_bounds =[0,7]

    res = linprog(c,A,b,bounds=(x1_bounds,x2_bounds))

    多项式的最小二乘法曲线拟合import numpy as np

    import matplotlib.pyplot as plt

    x = np.arange(1990,1997,1)

    y = np.array([70 ,122 ,144 ,152, 174, 196, 202])

    z1 = ployfit(x,y,1) #之前画过原始数据,数据走向为ax+b类型。故采用一次多项式拟合

    p1 = np.ploy1d(z1)

    yvalue = p1(x)

    plt.plot(x,y,'*',label = '原始数据')

    plt.plot(z1,yvalue,label = '拟合曲线')

    plt.xlabel('x axis')

    plt.ylabel('y axis')

    plt.legend(loc = 4 )

    plt.tittle('多项式拟合')

    plt.show()

    方程求导from __future__ import print_function

    from __future__ import division

    import numpy as np

    import scipy as sp

    import scipy.misc

    def f(x): return 2*x*x + 3*x + 1

    print(sp.misc.derivative(f, 2))

    求不定积分from __future__ import print_function

    from __future__ import division

    import numpy as np

    import scipy as sp

    import scipy.integrate

    f = lambda x : x**2

    print(sp.integrate.quad(f, 0, 2))

    print(sp.integrate.fixed_quad(f, 0, 2))

    求解非线性方程组from __future__ import print_function

    from __future__ import division

    import numpy as np

    import scipy as sp

    import scipy.optimize

    def f(x):

    return [5*x[1] + 3, 4*x[0]*x[0], x[1]*x[2] - 1.5]

    ans = sp.optimize.fsolve(f, [0, 0, 0])

    print(ans)

    print(f(ans))

    求解线性方程组from __future__ import print_function

    from __future__ import division

    import numpy as np

    import scipy as sp

    import matplotlib.pylab as plt

    import scipy.linalg

    a = np.array([[1, 3, 5], [2, 5, 1], [2, 3, 8]])

    b = np.array([10, 8, 3])

    print(sp.linalg.solve(a, b))

    # print(sp.linalg.inv(a).dot(b))

    以上就是数学建模可以用Python吗的详细内容,更多请关注php中文网其它相关文章!

    article_wechat2021.jpg?1111

    本文原创发布php中文网,转载请注明出处,感谢您的尊重!

    展开全文
  • Python数学计算之基础计算

    万次阅读 2019-06-01 22:18:14
    本文介绍使用Python来做数学计算,在学习和工作中,经常会遇到一些数学计算的问题。一般人会使用计算器软件,不得不说,计算器太难用了。专业人士可能会使用更强大的工具,如Matlab,但这种重量级工具有时可能并不...

    原文链接: http://zh.5long.me/2015/python-math-1/

    摘要(Abstract)

    本文介绍使用Python来做数学计算,在学习和工作中,经常会遇到一些数学计算的问题。一般人会使用计算器软件,不得不说,计算器太难用了。专业人士可能会使用更强大的工具,如Matlab,但这种重量级工具有时可能并不适用。本文打算使用一个轻量级的工具Python来做计算。准确来说Python并不是一个数学工具,而是一种编程语言。Python提供了很多数学库,利用Python和这些库可以做很多数学计算。

    本文不是编程语言的教程,更像是一个工具的使用教程,阅读本文不需要有程序设计基础,当然,需要一点数学基础(比如加减乘除)。本文适合任何想找一个计算工具的人学习和参考。

    本文将以实例讲解各种用法。

     

     

    安装Python(Installation)

    Python官方网站提供下载,完全免费使用。Python目前有Python 2和Python 3两个版本,两个版本有一些语法差别,对于本文来说,几乎没有区别,推荐使用Python 3。在Download界面找到系统对应的版本下载(我的版本是Mac OS X 64-bit/32-bit installer),双击直接安装。安装好后,找到程序IDLE,启动IDLE就可开始写Python程序了。

     


    提示1:Mac OS和大部分版本Linux系统自带Python运行环境,可以不用安装。当然,也可升级成最新版本。Windows需要自行安装。
    提示2:也可以安装Sublime Text编辑器,再安装Sublime REPL插件。本人现在使用这种方案,写Python程序非常方便。 

    提示3:搜狗输入法用户注意,搜狗输入法在IDLE下有点小问题(不能退格),切换到英文输入法即可。


    Python 2 和Python 3的注意事项


    print的语法。python 3的用法为print("hello world!"),python 2的用法为print "hello world!"或者print("hello world!")。

     


    基本运算

     

    加法

     

    >>> 1 +  2      //直接输入,回车直接输出结果
    3
    >>> sum = 1 + 2 //计算结果保存在sum中
    >>> print(sum)      //输出sum
    3
    >>> a = 1       //变量
    >>> b = 2
    >>> sum = a + b     //变量相加
    >>> print(sum)
    312345678910

     

    减法

     

    >>> a = 1
    >>> b = 2
    >>> 2 - 1
    1
    >>> a - b
    -1
    >>> b - a
    112345678

     

    乘法

     

    >>> 1 * 2
    2
    >>> 1.5 * 3
    4.5
    >>> a * b
    2
    >>> 1234567

     

    除法

    传统的除法。有编程经验的人一定知道,整型除法的结果也是整型(地板除,舍弃小数部分)。如果有一个数是浮点型,则结果是浮点型(真正的除法,保留小数)。

     

    >>> 1 / 3           //整型除法,商为0,舍弃小数部分
    0   
    >>> 5 / 2
    2   
    >>> 1.0 / 3         //浮点数除法,保留小数
    0.3333333333333333
    >>> 5.0 / 2.0
    2.512345678

    真正的除法。在未来的Python版本中,不管是整型还是浮点型除法,结果总是真实地商(保留小数部分),现阶段可以通过执行from __future__ import division指令做到这一点。

     

    >>> from __future__ import division
    >>> 1 / 3
    0.3333333333333333
    >>> 5 / 2
    2.5
    >>> 1.0 / 3
    0.3333333333333333
    >>> 5.0 / 2.0
    2.5123456789

    地板除。Python 2.2新加了一个操作符//,//除法不管操作数为何种数值类型,总是舍弃小数部分。

     

    >>> 1 // 3
    0
    >>> 5 // 2
    2
    >>> 1.0 // 3
    0.0
    >>> 5.0 // 2.0
    2.012345678

     

    取余数

     

    >>> 1 % 3
    1
    >>> 5 % 2
    1
    >>> 5.0 % 2.0
    1.0123456

     

    幂运算

    Python有幂运算符**。

     

    >>> 2 ** 3
    8
    >>> 2.5 ** 5
    97.65625
    >>> 4 ** -1
    0.25123456

    代码中分别计算23、2.55、4-1。

     

    复数

    复数的表示。复数的表示如下:

     

    >>> aComplex = 1 + 2j       //申明一个复数
    >>> aComplex
    (1+2j)
    >>> aComplex.real           //复数实部
    1.0
    >>> aComplex.imag           //复数虚部
    2.0
    >>> aComplex.conjugate()        //共轭复数
    (1-2j)
    >>> 12345678910

    复数的运算。复数的运算与实数一致。

     

    >>> c = 1 + 2j
    >>> d = 2 - 1j
    >>> c + d
    (3+1j)
    >>> c - d
    (-1+3j)
    >>> c * d
    (4+3j)
    >>> c / d
    1j
    >>> c / 2
    (0.5+1j)
    >>> c * 2
    (2+4j)
    >>> c ** 2
    (-3+4j)12345678910111213141516

     

    math标准库

    Python有一个标准库math专门用来做数学运算的。详细介绍可参考Python的官方文档。要使用math库,先要import这个库。

     

    >>> import math1

    一下的例子假设已经执行了import math。

     

    两个常数

     

    >>> math.pi             //圆周率pi
    3.141592653589793
    >>> math.e
    2.718281828459045       //自然常数e1234

     

    数值计算


    math.ceil(x)。向上取整,返回最小的大于或等于x的整数。

     


    >>> math.ceil(2)
    2.0
    >>> math.ceil(2.2)
    3.0
    >>> math.ceil(2.9)
    3.0
    >>> math.ceil(3.0)
    3.012345678


    math.floor(x)。向下取整,返回最大的小于或等于x的整数。

     


    >>> math.floor(2)
    2.0
    >>> math.floor(2.2)
    2.0
    >>> math.floor(2.9)
    2.0
    >>> math.floor(3.0)
    3.012345678


    math.fabs(x)。取x得绝对值。

     


    >>> math.fabs(1.0)
    1.0
    >>> math.fabs(-1.0)
    1.01234


    math.factorial(x)。求x的阶乘,x必须为整数,否则出现错误。

     


    >>> math.factorial(5)
    120
    >>> math.factorial(4)
    24
    >>> math.factorial(2.1)     //执行错误
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: factorial() only accepts integral values
    >>> 123456789

     

    幂和对数函数(Power and logarithmic functions)


    math.exp(x)。返回e ** x。

     


    >>> math.exp(2)
    7.38905609893065
    >>> math.e ** 2
    7.3890560989306495  //请忽略后面的不一致,计算机浮点数本身的问题1234


    math.log(x [,base])。求以base为底的对数。

     


    >>> math.log(math.e)        //值传一个参数,默认以math.e为底
    1.0
    >>> math.log(math.e ** 2)
    2.0
    >>> math.log(8, 2)      //两个参数,2为底
    3.0
    >>> math.log(100, 10)   //两个参数,10为底s
    2.012345678


    math.pow(x, y)。幂运算,计算xy,相当于x ** y。

     


    >>> math.pow(2, 3)
    8.0
    >>> 2 ** 3
    81234


    math.sqrt(x)**。求x的平方根。

     


    >>> math.sqrt(4)
    2.0
    >>> math.sqrt(9.0)
    3.01234


    开根号。Python的math库中只有开平方根,没有立方根和n次方根,不过可以利用math.pow或者**,只需把根号变成分数。

     


    >>> math.pow(4, 1.0 / 2)        //平方根,相当于math.sqrt(4)
    2.0
    >>> 4 ** (1.0 / 2)          //平方根,相当于math.sqrt(4)
    2.0
    >>> 8 ** (1.0 / 3)          //立方根
    2.0
    >>> 1024 ** (1.0 / 10)          //10次方根
    2.012345678

     

    三角函数(Trigonometric functions)

    math库中的三角函数使用的弧度(radians)计算,所以用角度(angle)计算前先要转换成弧度。math也提供了角度和弧度的转换函数。

     


      方法名
      实现功能

     

      math.degrees(x)
      把弧度x转换成角度


      math.radians(x)
      把角度x转换成弧度

     

     


    >>> math.degrees(math.pi)
    180.0
    >>> math.radians(180.0)
    3.1415926535897931234


    math.cos(x)。不解释。
    math.sin(x)。不解释。
    math.tan(x)。不解释。
    math.acos(x)。反余弦函数。
    math.asin(x)。反正弦函数。
    math.atan(x)。反正切函数。
    math.hypot(x,y)。欧式范数(Euclidean norm)。相当sqrt(x*x + y*y)。

     


    >>> math.cos(math.pi)
    -1.0
    >>> math.sin(math.pi / 2)
    1.0
    >>> math.tan(math.pi / 4)
    0.9999999999999999      //结果为1,计算机浮点数固有缺陷
    >>> math.tan(math.pi / 4)
    0.9999999999999999
    >>> math.acos(-1.0)
    3.141592653589793
    >>> math.asin(1.0)
    1.5707963267948966
    >>> math.atan(1)
    0.7853981633974483
    >>> math.pi / 4
    0.7853981633974483
    >>> math.hypot(3, 4)
    5.0123456789101112131415161718

     

    双曲函数(Hyperbolic functions)

    双曲函数和三角函数类似。


    math.cosh(x)。求x的双曲余弦函数。
    math.sinh(x)。求x的双曲正弦函数。
    math.tanh(x)。求x的双曲正切函数。
    math.acosh(x)。求x的反双曲余弦。
    math.asinh(x)。求x的反双曲正弦。
    math.atanh(x)。求x的反双曲正切。

     


    >>> math.cosh(1)
    1.5430806348152437
    >>> math.sinh(1)
    1.1752011936438014
    >>> math.tanh(1)
    0.7615941559557649
    >>> math.acosh(1.5430806348152437)
    1.0
    >>> math.asinh(1.1752011936438014)
    1.0
    >>> math.atanh(0.7615941559557649)
    0.9999999999999999          //结果为1,计算机浮点数固有缺陷123456789101112

     

    一个复杂的例子

    举一个复杂的例子,计算下面的公式: 


    >>> - (4 ** (1.0 / 3)) / 4 * math.log(2 ** (1.0 / 3) - 1) - (math.sqrt(3) * (4 ** (1.0 / 3))) / 6 * math.atan(math.sqrt(3) / (1 + 2 * (2 * (1.0 / 3))))
    0.2420914086273389712

     

    在前面的例子可能已经注意到了,计算机表示浮点数是不准确的,比如1.0成了0.9999999999999999。这是计算机浮点数表示法的固有缺陷。比如会出现如下结果:

     

    >>> 0.05 + 0.01
    0.060000000000000005
    >>> 1.0 - 0.12
    0.88
    >>> 1.0 - 0.32
    0.6799999999999999
    >>> 1.0 - 0.42
    0.5800000000000001
    >>> 4.015 * 100
    401.49999999999994
    >>> 123.3 / 100
    1.2329999999999999123456789101112

    浮点数的缺陷不仅仅在Python在存在,在任何语言都存在,它是浮点数表示法本身的缺陷。对于不是非常严格的计算,这种缺陷是可以接受的,而对于过于严格的计算,那么应该用整型数计算(整型计算是精确的)。比如在保留两位小数的计算中,可以把原始数乘以100取整数再计算,约定最后两位为小数即可。

     

    结语

    本文介绍了Python标准库的数学计算方法,通过使用Python标准数学库,可以应付一些日常的基本计算(比如我就很少使用计算器了,一般的计算都用Python解决)。当然,数学是如此的丰富,仅有标准库是远远不够的。将来如果有需要的话,我会研究下使用其它的数学库来进行更复杂的计算以及数学图像的绘制。比如NumPy、SciPy、Matplotlib、SymPy等。

     

    函数定义


    在python中函数的定义以及调用如下代码所示:

    def test(x):
        y = x+1
        return y
    
    result = test(2)
    print(result)

    多个返回值的情况


    如果在函数中return多个值,会将那多个值打包成一个元组传出,如下代码所示

    复制代码

    def test(x):
        y1 = x+1
        y2 = x+2
        return y1,y2
    
    result = test(2)
    print(result) #打印结果为(3, 4)

    复制代码

    使用关键字参数的情况


     

    使用关键字参数,则传参的位置可以不固定,但是个数还是要相匹配,此外在调用的时候关键字参数一定要在普通参数的右边,如下代码所示

    def test(x,y,z):
        res = x - y - z
        return res
    
    result = test(y=1,x=5,z=2)
    print(result) #打印结果为2

    使用默认参数的情况


     

    使用默认参数,传参的个数可以不匹配,如果默认参数的位置没有传,则使用默认值,这个是在定义的时候定义的,定义默认参数要写在最右边,如下代码所示

    复制代码

    def test(name,sex = "man"):
        print(name)
        print(sex)
    
    test("CodeScrew")
    #打印结果为CodeScrew  man
    test("CodeScrew","women")
    #打印结果为CodeScrew  women

    复制代码

    使用参数组的情况


     

    参数组中指的是可以传任意参数,一般**对应字典,*对应列表,如下代码所示

    • 传入列表
    def test(name,*args):
        print(name)
        print(args)
    
    test("CodeScrew",*[1,2,3,4])
    #打印结果为CodeScrew   (1, 2, 3, 4)
    • 传入字典

    复制代码

    def test(name,**kwargs):
        print(name)
        print(kwargs)
    
    test("CodeScrew",x=1,y=2)
    #打印结果为CodeScrew   {'x': 1, 'y': 2}
    test("CodeScrew",**{"x":1,"y":2})
    #打印结果为CodeScrew   {'x': 1, 'y': 2}

    复制代码

     

     

    def test(x,y,z):
        res = x - y - z
        return res
    
    result = test(y=1,x=5,z=2)
    print(result) #打印结果为2

    方法一: 使用内置模块

    >>> import math >>> math.pow(12, 2)     # 求平方144.0 >>> math.sqrt(144)      # 求平方根12.0 >>>

    方法二: 使用表达式

    >>> 12 ** 2             # 求平方144 >>> 144 ** 0.5          # 求平方根12.0 >>> 

    方法三: 使用内置函数

    >>> pow(12, 2)          # 求平方144 >>> pow(144, .5)        # 求平方根12.0 
     

     

    展开全文
  • 摘要(Abstract)本文介绍使用Python来做数学计算,在学习和工作中,经常会遇到一些数学计算的问题。一般人会使用计算器软件,不得不说,计算器太难用了。专业人士可能会使用更强大的工具,如Matlab,但这种重量级工具...

    摘要(Abstract)

    本文介绍使用Python来做数学计算,在学习和工作中,经常会遇到一些数学计算的问题。一般人会使用计算器软件,不得不说,计算器太难用了。专业人士可能会使用更强大的工具,如Matlab,但这种重量级工具有时可能并不适用。本文打算使用一个轻量级的工具Python来做计算。准确来说Python并不是一个数学工具,而是一种编程语言。Python提供了很多数学库,利用Python和这些库可以做很多数学计算。

    本文不是编程语言的教程,更像是一个工具的使用教程,阅读本文不需要有程序设计基础,当然,需要一点数学基础(比如加减乘除)。本文适合任何想找一个计算工具的人学习和参考。

    本文将以实例讲解各种用法。

    安装Python(Installation)

    Python官方网站提供下载,完全免费使用。Python目前有Python 2和Python 3两个版本,两个版本有一些语法差别,对于本文来说,几乎没有区别,推荐使用Python 3。在Download界面找到系统对应的版本下载(我的版本是Mac OS X 64-bit/32-bit installer),双击直接安装。安装好后,找到程序IDLE,启动IDLE就可开始写Python程序了。

    提示1:Mac OS和大部分版本Linux系统自带Python运行环境,可以不用安装。当然,也可升级成最新版本。Windows需要自行安装。

    提示2:也可以安装Sublime Text编辑器,再安装Sublime REPL插件。本人现在使用这种方案,写Python程序非常方便。

    提示3:搜狗输入法用户注意,搜狗输入法在IDLE下有点小问题(不能退格),切换到英文输入法即可。

    Python 2 和Python 3的注意事项

    print的语法。python 3的用法为print("hello world!"),python 2的用法为print "hello world!"或者print("hello world!")。

    基本运算

    加法

    >>>1 + 2 //直接输入,回车直接输出结果

    3

    >>>sum = 1 + 2 //计算结果保存在sum中

    >>>print(sum) //输出sum

    3

    >>>a = 1 //变量

    >>>b = 2

    >>>sum = a + b //变量相加

    >>>print(sum)

    3

    减法

    >>>a = 1

    >>>b = 2

    >>>2 - 1

    1

    >>>a - b

    -1

    >>>b - a

    1

    乘法

    >>>1 * 2

    2

    >>>1.5 * 3

    4.5

    >>>a * b

    2

    >>>

    除法

    传统的除法。有编程经验的人一定知道,整型除法的结果也是整型(地板除,舍弃小数部分)。如果有一个数是浮点型,则结果是浮点型(真正的除法,保留小数)。

    >>>1 / 3 //整型除法,商为0,舍弃小数部分

    0

    >>>5 / 2

    2

    >>>1.0 / 3 //浮点数除法,保留小数

    0.3333333333333333

    >>>5.0 / 2.0

    2.5

    真正的除法。在未来的Python版本中,不管是整型还是浮点型除法,结果总是真实地商(保留小数部分),现阶段可以通过执行from __future__ import division指令做到这一点。

    >>>from __future__ import division

    >>>1 / 3

    0.3333333333333333

    >>>5 / 2

    2.5

    >>>1.0 / 3

    0.3333333333333333

    >>>5.0 / 2.0

    2.5

    地板除。Python 2.2新加了一个操作符//,//除法不管操作数为何种数值类型,总是舍弃小数部分。

    >>>1 // 3

    0

    >>>5 // 2

    2

    >>>1.0 // 3

    0.0

    >>>5.0 // 2.0

    2.0

    取余数

    >>>1 % 3

    1

    >>>5 % 2

    1

    >>>5.0 % 2.0

    1.0

    幂运算

    Python有幂运算符**。

    >>>2 ** 3

    8

    >>>2.5 ** 5

    97.65625

    >>>4 ** -1

    0.25

    代码中分别计算23、2.55、4-1。

    复数

    复数的表示。复数的表示如下:

    >>>aComplex = 1 + 2j //申明一个复数

    >>>aComplex

    (1+2j)

    >>>aComplex.real //复数实部

    1.0

    >>>aComplex.imag //复数虚部

    2.0

    >>>aComplex.conjugate() //共轭复数

    (1-2j)

    >>>

    复数的运算。复数的运算与实数一致。

    >>>c = 1 + 2j

    >>>d = 2 - 1j

    >>>c + d

    (3+1j)

    >>>c - d

    (-1+3j)

    >>>c * d

    (4+3j)

    >>>c / d

    1j

    >>>c / 2

    (0.5+1j)

    >>>c * 2

    (2+4j)

    >>>c ** 2

    (-3+4j)

    math标准库

    Python有一个标准库math专门用来做数学运算的。详细介绍可参考Python的官方文档。要使用math库,先要import这个库。

    >>>import math

    一下的例子假设已经执行了import math。

    两个常数

    >>>math.pi //圆周率pi

    3.141592653589793

    >>>math.e

    2.718281828459045 //自然常数e

    数值计算

    math.ceil(x)。向上取整,返回最小的大于或等于x的整数。

    >>>math.ceil(2)

    2.0

    >>>math.ceil(2.2)

    3.0

    >>>math.ceil(2.9)

    3.0

    >>>math.ceil(3.0)

    3.0

    math.floor(x)。向下取整,返回最大的小于或等于x的整数。

    >>>math.floor(2)

    2.0

    >>>math.floor(2.2)

    2.0

    >>>math.floor(2.9)

    2.0

    >>>math.floor(3.0)

    3.0

    math.fabs(x)。取x得绝对值。

    >>>math.fabs(1.0)

    1.0

    >>>math.fabs(-1.0)

    1.0

    math.factorial(x)。求x的阶乘,x必须为整数,否则出现错误。

    >>>math.factorial(5)

    120

    >>>math.factorial(4)

    24

    >>>math.factorial(2.1) //执行错误

    Traceback (most recent call last):

    File "", line 1, in

    ValueError: factorial() only accepts integral values

    >>>

    幂和对数函数(Power and logarithmic functions)

    math.exp(x)。返回e ** x。

    >>>math.exp(2)

    7.38905609893065

    >>>math.e ** 2

    7.3890560989306495 //请忽略后面的不一致,计算机浮点数本身的问题

    math.log(x [,base])。求以base为底的对数。

    >>>math.log(math.e) //值传一个参数,默认以math.e为底

    1.0

    >>>math.log(math.e ** 2)

    2.0

    >>>math.log(8, 2) //两个参数,2为底

    3.0

    >>>math.log(100, 10) //两个参数,10为底s

    2.0

    math.pow(x, y)。幂运算,计算xy,相当于x ** y。

    >>>math.pow(2, 3)

    8.0

    >>>2 ** 3

    8

    math.sqrt(x)**。求x的平方根。

    >>>math.sqrt(4)

    2.0

    >>>math.sqrt(9.0)

    3.0

    开根号。Python的math库中只有开平方根,没有立方根和n次方根,不过可以利用math.pow或者**,只需把根号变成分数。

    >>>math.pow(4, 1.0 / 2) //平方根,相当于math.sqrt(4)

    2.0

    >>>4 ** (1.0 / 2) //平方根,相当于math.sqrt(4)

    2.0

    >>>8 ** (1.0 / 3) //立方根

    2.0

    >>>1024 ** (1.0 / 10) //10次方根

    2.0

    三角函数(Trigonometric functions)

    math库中的三角函数使用的弧度(radians)计算,所以用角度(angle)计算前先要转换成弧度。math也提供了角度和弧度的转换函数。

    方法名

    实现功能

    math.degrees(x)

    把弧度x转换成角度

    math.radians(x)

    把角度x转换成弧度

    >>>math.degrees(math.pi)

    180.0

    >>>math.radians(180.0)

    3.141592653589793

    math.cos(x)。不解释。

    math.sin(x)。不解释。

    math.tan(x)。不解释。

    math.acos(x)。反余弦函数。

    math.asin(x)。反正弦函数。

    math.atan(x)。反正切函数。

    math.hypot(x,y)。欧式范数(Euclidean norm)。相当sqrt(x*x + y*y)。

    >>>math.cos(math.pi)

    -1.0

    >>>math.sin(math.pi / 2)

    1.0

    >>>math.tan(math.pi / 4)

    0.9999999999999999 //结果为1,计算机浮点数固有缺陷

    >>>math.tan(math.pi / 4)

    0.9999999999999999

    >>>math.acos(-1.0)

    3.141592653589793

    >>>math.asin(1.0)

    1.5707963267948966

    >>>math.atan(1)

    0.7853981633974483

    >>>math.pi / 4

    0.7853981633974483

    >>>math.hypot(3, 4)

    5.0

    双曲函数(Hyperbolic functions)

    双曲函数和三角函数类似。

    math.cosh(x)。求x的双曲余弦函数。

    math.sinh(x)。求x的双曲正弦函数。

    math.tanh(x)。求x的双曲正切函数。

    math.acosh(x)。求x的反双曲余弦。

    math.asinh(x)。求x的反双曲正弦。

    math.atanh(x)。求x的反双曲正切。

    >>>math.cosh(1)

    1.5430806348152437

    >>>math.sinh(1)

    1.1752011936438014

    >>>math.tanh(1)

    0.7615941559557649

    >>>math.acosh(1.5430806348152437)

    1.0

    >>>math.asinh(1.1752011936438014)

    1.0

    >>>math.atanh(0.7615941559557649)

    0.9999999999999999 //结果为1,计算机浮点数固有缺陷

    一个复杂的例子

    举一个复杂的例子,计算下面的公式:

    >>>- (4 ** (1.0 / 3)) / 4 * math.log(2 ** (1.0 / 3) - 1) - (math.sqrt(3) * (4 ** (1.0 / 3))) / 6 * math.atan(math.sqrt(3) / (1 + 2 * (2 * (1.0 / 3))))

    0.24209140862733897

    在前面的例子可能已经注意到了,计算机表示浮点数是不准确的,比如1.0成了0.9999999999999999。这是计算机浮点数表示法的固有缺陷。比如会出现如下结果:

    >>>0.05 + 0.01

    0.060000000000000005

    >>>1.0 - 0.12

    0.88

    >>>1.0 - 0.32

    0.6799999999999999

    >>>1.0 - 0.42

    0.5800000000000001

    >>>4.015 * 100

    401.49999999999994

    >>>123.3 / 100

    1.2329999999999999

    浮点数的缺陷不仅仅在Python在存在,在任何语言都存在,它是浮点数表示法本身的缺陷。对于不是非常严格的计算,这种缺陷是可以接受的,而对于过于严格的计算,那么应该用整型数计算(整型计算是精确的)。比如在保留两位小数的计算中,可以把原始数乘以100取整数再计算,约定最后两位为小数即可。

    结语

    本文介绍了Python标准库的数学计算方法,通过使用Python标准数学库,可以应付一些日常的基本计算(比如我就很少使用计算器了,一般的计算都用Python解决)。当然,数学是如此的丰富,仅有标准库是远远不够的。将来如果有需要的话,我会研究下使用其它的数学库来进行更复杂的计算以及数学图像的绘制。比如NumPy、SciPy、Matplotlib、SymPy等。

    展开全文
  • 本文章对应的数学建模教材是高教版《数学模型》第五版(姜启源、谢金星、叶俊 编),在系列文本中将使用python代替matlab,其中用到的python库有Nump(用于数组运算)、Matplotlib(用于2维数据可视化)、Scipy...
  • 学控制=计算机+数学,最近搞论文要自己建模,抛弃simulink后从最简单的学起 建模分5个步骤: 1、提出问题 2、选择建模方法 3、推导模型的数学表达式 4、求解模型 5、回答问题 一 MATLAB工具 线性规划属于优化问题,...
  • python更“计算机”,而MATLAB更“数学”,而他们都能解决“数学建模”这个即计算机又数学的问题。如果你们队伍中的编程位同学,平时代码写的不多,他可能更倾向于用MATLAB数学运算,矩阵运算,把公式一套就能跑出...
  • matlab作为数学计算工具,在矩阵计算,图形化界面等方面让C语言,JAVA和Python都相形见绌。而且matlab现在退出了很多的工具包,比如机器学习工具包,机器人工具包,无人驾驶工具包。matlab也可以编程,用于机器视觉...
  • MATLAB为工程师和科学家打造的最简便高效的计算环境MATLAB 语言专用于数学和科学计算的唯一高级编程语言◆◆◆◆基于矩阵的 MATLAB 语言让数学直观易读。工程师和科学家需要能够直观表达矩阵和数组数学运算的编程...
  • 作者:金良(golden1314521@gmail.com) csdn博客:http://blog.csdn.net/u0121765911.数值模拟的意义数学模型中,往往需要用到数值模拟,一方面是因为想考察模型未来一段时间可能会出现的情况,比如衰减、震荡或混沌...
  • pythonmatlab的优缺点比较matlab主要是用来做数值计算的(矩阵,向量是强项),当然还加入了其他的许许多多的库。主要用来模拟一些东西。 python是一门语言,现在也有模拟matlab的库,不过功能显然还是很弱的。...
  • matlab虽然很强大,可以很容易的处理大量的大矩阵,但是求解我们的模型(有时可能是几万个方程,而且需要演化很长时间才能到达稳态)使用matlab计算是很慢的。Python相对matlab来说,在速度上处于Fortran与matlab中间...
  • Python Vs MATLAB——从一次数模美赛的亲身经历谈python数学建模竞赛中的应用说起数学建模中的编程软件,大部分人都会想到MatlabMatlab应该是史上功能最强大的一门编程与数学仿真软件,许多复杂的数学问题对它来...
  • 用代码的话,C语言、JAVA、PHP、PythonMatlab,甚至是Excel都能做。但是论简单程度,肯定是MATLAB最简单,大概一两行代码吧。所以我的意思是:数学建模,本质上是一个数学问题的求解过程。代码只不过是其中的一个...
  • python中也有类似的功能,SymPy是Python强大的数学符号计算库。在下面的例子中,我们定义函数 MATLAB符号变量>> syms x y; % 定义符号变量>> f = x^2 + 2*y;>> ff =x^2 + 2*y分别对x 和y 求导&...
  • Python科学计算

    2021-03-26 17:15:28
    Python 科学计算 NumPy(MatLab 替代品之一) 数组的算数和逻辑运算 傅立叶变换和用于图形操作的例程 与线性代数有关的操作。 NumPy 拥有线性代数和随机数生成的内置函数 frmemeta SciPy(科学计算) SciPy是一个...
  • Matlab Mathematica MathCAD Maple比较2008-03-02版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://chaos-nova.blogbus.com/logs/16301100.html发信人: agui (OK), 信区: MathTools标 题: ...
  • python计算生态

    2020-05-06 20:25:56
    python库之数据分析 numpy:表达N维数组的最基础库 ~python接口使用,C语言实现,计算...~SciPy 提供数学、科学工程计算库的使用,类似MATLAB python库之数据可视化 Matplotlib:高质量的二维数据可视化功能库 Seabor...
  • MATLAB 使用python代码

    千次阅读 2018-12-24 11:21:05
    matlab是一个非常强大的数学处理工具,python中很多工具库封装得非常好,对于高版本的MATLAB来说,可以直接使用python以及这些库,我这里使用的R2017a版本,网上说2015版开始就可以,没有测试,步骤如下: ...
  • Python 科学计算-Numpy

    2021-01-04 08:31:56
    NumPy(Numerical Python)是Python的一种开源的数值计算扩展,可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多,支持大量的维度数组与矩阵运算,此外也针对数组运算提供...
  • SymPy是符号数学Python库,旨在用一套强大的符号计算体系完成诸如多项式求值、求极限、解方程、求积分、微分方程、级数展开、矩阵运算等等计算问题。虽然Matlab的类似科学计算能力也很强大,但是Python以其语法...
  • mathematica作为数学三巨头(matlab、mathematica和maple)之一,功能涵盖数据可视化、机器学习、图论、符号计算、数值计算、图像处理和自然语言识别等。从mathematica官方帮助文档可以看出其强大之处。在解决数学问题...
  • 1.Matlab[1]Matlab是一款商业数学软件,用于算法开发,数据可视化,数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括Matlab和simulink两大部分。可以进行矩阵运算,绘制函数和数据,实现算法。创建...
  • Fedora系统默认安装了Pyhton,现在Fedora25默认安装的是Python3.5,在终端...Pyhton由于其解释性语言的特性,与Matlab类似,安装一些数学运算库后,可以媲美Matlab的一般数学运算以及数学编程。今记录下在Fedroa中安...
  • 内容简介相对于传统的Matlab和Mathematica等昂贵的商业软件包,Python科学计算软件包以其开源、免费、库资源丰富的特点,赢得了广大科技工作者和理工科学生的青睐。本书讲解如何使用Python科学计算软件包来实现和...
  • 答案是不会,井水不犯河水,各是各的。从工程角度来说,matlab是一...一定要把matlabpython做比较,那么我会把matlab比喻成科学计算界的宝马轿车。对于大多数人来说,想利用它代价高昂,而且我还不提它的那些配件...
  • 数学建模中,大多数人都在用MATLAB,但...python中有非常著名的科学计算三剑客库:numpy,scipy和matplotlib,三者基本代替MATLAB的功能,完全能够应对数学建模任务。下面列举几个python解决数学建模的例子:线性...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 322
精华内容 128
关键字:

matlabpython数学计算

python 订阅
matlab 订阅