Drawnbysmartnotebook。techUsingSageMath 关于SageMath SageMath是一个免费的、开源的数学软件系统,采用GPL协议。它整合了许多开源Python包,采用Python语言编写,但也支持其他语言。它的目标是创造一个可变的开源软件以替代Matlab、Magma、Maple和Mathematica。 为使大家方便的了解、学习并使用SageMath,我们的SmartNotebook(简称:SNB)通过引入SageMath引擎并细致地对兼容性做了优化和完善,充分利用Notebook的特性,不仅减少大量复杂的安装和配置,而且做到可以让用户即开即用。 话不多说,接下来我们就利用SmartNotebook结合SDSUSageTutorial提供的例子来快速了解SageMath的一些语法、函数等特性。 利用SNB探索SageMath 首先,我们用SmartNotebook快速创建一个Sagemath内核的Notebook。像下面这样,输入Notebook的标题,选择Sagemath的内核,点击提交即可。 接下来我们进入Notebook后直接创建CodeCell单元格,便可以编写并执行Sage代码了。 例如:我们对整数20221208进行素数因子分解,新建一个CodeCell单元格,输入下面代码并点击执行:factor(20221208) 237361093 SageMath的帮助系统 Help帮助:使用? 当我们需要准确了解某个函数或命令的作用以及如何使用它,我们可以使用?来调用内置的帮助系统。例如:lcm? 查看源代码:使用?? 有些喜欢研究源码的同学想看看SageMath中某个命令的源码,您只需键入您感兴趣的命令,然后键入??。 例如,查看factor()的源代码(截图节取了部分源码):factor?? SageMathasaCalculator 这里我们介绍一下如何像图形计算器一样使用SageMath的一些算术和函数命令。 基本算术 基础的算术运算符为加、减、乘、除、指数 数字前面的符号表示它是负数。print(11,11)print(103101,103101)print(79,79)print(733711,733711)print(114,114)print(25,25)print(119,119)6 输出: 112 1031012 7963 733711667 114114 2532 1192 6 SageMath遵守标准的操作顺序,即PEMDAS(parenthesis,exponents,multiplication,pision,addition,subtraction):括号、指数、乘法、除法、加法、减法。print(2421)print((24)21)print(24(21))print(32)print((3)2) 输出: 33hr65hr128hr9 9hr当两个整数相除时,有一个微妙之处:SageMath将返回分数或其十进制近似值。与大多数图形计算器不同,SageMath将尝试尽可能精确,除非另有说明,否则将返回分数。print(114)print(114。0)print(114。)print(11。04)print(1141。) 输出: 114 2。75000000000000 2。75000000000000 2。75000000000000 2。75000000000000 整数除法和因式分解 有时当我们使用除法时,除法运算符不会给我们所有想要的信息。比如,我们不仅想知道约化分数是多少,甚至想知道它的十进制近似值,或者想知道唯一商和余数是多少。我们可以使用运算符来计算商,使用运算符用于余数。使用pmod()函数来同时计算获得商和余数。print(144)print(144)print(pmod(14,4)) 输出: 3hr2hr(3,2) 我们知道当两个整数是否能整除,可以采用AB余数是0,说明可以整除,但SageMath整数有一个内置的方法可以专门用来检查一个整数是否整除另一个整数。print(3。pides(15))print(5。pides(17)) 输出: True False 与pides方法相关的还有一个方法pisors(),此方法可以返回指定整数的所有正除数的列表。print(12。pisors())101。pisors() 输出: 〔1,2,3,4,6,12〕 〔1,101〕 我们知道当整数的除数只是1和它本身时,这个数字是素数。为了检查一个数字在SageMath中是否是素数,我们可使用方法isprime()print(153。isprime())(2191)。isprime() 输出: False True factor()可计算整数的素因数分解print(62。factor())63。factor() 输出: 231 327 有兴趣简单地知道哪些素数除以整数,我们可以使用primepisors()或primefactors()方法。print(24。primepisors())print(24。primefactors())print(63。primefactors())print(63。primepisors()) 输出: 〔2,3〕 〔2,3〕 〔3,7〕 〔3,7〕 求最大公约数和最小公倍数。 最大公约数(GCD)是所有这些公约数中最大的一个。 最小公倍数(LCM)是两个整数相除的最小整数。print(gcd(14,63))print(gcd(15,19))print(lcm(4,5))lcm(14,21) 输出: 7hr1hr20hr42hr标准函数和常量 SageMath几乎包含了人们在学习数学时遇到的所有标准函数。接下来我们将介绍一些最常用的函数:maximum、minimum、floor、ceiling、trigonometric、exponential、logarithm函数。我们还将看到许多标准的数学常数,如欧拉常数(e)、和黄金比例()。max最大值print(max(1,5,8))min最小值print(min(12,13))abs绝对值print(abs(10))floor向下取整print(floor(2。1))ceil向上取整print(ceil(2。1)) 输出: 8hr13 10hr2hr3hr当使用floor、ceil时要特别小心,注意计算精度问题print(floor(1(2。12)))print(1(2。12)) 输出: 9hr9。99999999999999 计算机以二进制形式存储实数,而我们习惯于使用十进制表示。十进制表示法非常简单和简短,但是当转换为二进制时,它是: 由于计算机不能存储无限数量的数字,因此这会在某处四舍五入,从而导致我们看到的精度错误。 然而,在SageMath中,有理数(分数)是精确的,所以我们永远不会看到这个舍入误差。因此,尽可能使用有理数(分数)而不是小数通常是一个好主意,尤其是在需要高精度的情况下。floor(1(21102)) 输出: 10hrsqrt()该命令函数计算实数的平方根。正如我们之前在分数中看到的那样,如果我们想要十进制近似值,我们可以通过给出一个十进制数作为输入来获得它。print(sqrt(3))print(sqrt(3。0)) 输出: sqrt(3) 1。73205080756888 为了计算其他根,我们使用有理指数。SageMath可以计算任何有理数指数幂(SageMathcancomputeanyrationalpower)。如果指数或基数是小数,则输出将是小数。print(3(12))print((3。0)(12))print(8(12))print(8(13)) 输出: sqrt(3) 1。73205080756888 2sqrt(2) 2hrSageMath还支持所有标准三角函数,例如:正弦sin()和余弦cos()print(sin(1))print(sin(1。0))print(cos(32))print(cos(32。0)) 输出: sin(1) 0。841470984807897 cos(32) 0。0707372016677029 我们再次看到与SageMath相同的行为,SageMath将给我们一个确切的答案。你可能会想,既然没有办法简化,何必呢?好吧,一些涉及正弦的表达式确实可以简化。例如,几何学中的一个重要恒等式是: SageMath有一个内置的符号,去使用这个恒等式:print(pi)print(sin(pi3)) 输出: pi 12sqrt(3) 在SageMath内,我们完全处理的是,而不是一些数字近似。但是,我们可以使用以下方法调用数值近似:pi。n()print(pi。n())print(sin(pi))print(sin(pi。n())) 输出: 3。14159265358979 0hr1。22464679914735e16 我们看到,当使用符号时,SageMath返回确切的结果。但是,当我们使用近似值时,我们会得到一个近似值。是的10{16}简写,数字应为零,但近似值引入了错误。以下是使用符号、精确与数值近似的几个示例:print(sin(pi6))print(sin(pi。n()6))print(sin(pi4))print(sin(pi。n()4)) 输出: 12 0。500000000000000 12sqrt(2) 0。707106781186547 继续我们的主题,有一些鲜为人知的特殊角度,可以巧妙地简化正弦或余弦的值。print(sin(pi10))print(cos(pi5))print(sin(5pi12)) 输出: 14sqrt(5)14 14sqrt(5)14 14sqrt(6)14sqrt(2) 其他三角函数、反三角函数和双曲函数也可用print(arctan(1。0))print(sinh(9。0)) 输出: 0。785398163397448 4051。54190208279 SageMath内与类似,它有一个内置的数字符号常数e,即自然对数的底数。print(e)print(e。n()) 输出: e 2。71828182845905 虽然有些人可能熟悉使用自然对数和表示对数底10,但在SageMath中两者都表示对数底e。我们可以指定一个不同的基底作为命令的第二个参数:要在SageMath中计算: 我们使用命令:ln(x)、log(x)、log(x,b),幂基e可以使用函数和通过将符号常数提高到指定幂来完成。print(ln(e))print(log(e))print(log(e2))print(log(10))print(log(10。0))print(log(100,10))print(exp(2))print(exp(2。0))print(exp(log(pi)))print(e(log(2))) 输出: 1hr1hr2hrlog(10) 2。30258509299405 2hre2 7。38905609893065 pi 2hr好的,本次我们关于SageMath的探索就先介绍到这里,在后面的文章我们会陆续探索并介绍以下内容,希望感兴趣的朋友可以持续关注: 利用SageMath求解方程和不等式SageMath2D和3D可视化介绍SageMath的数据结构及编程 《新语数据故事汇,数说新语》科普数据科学、讲述数据故事,深层次挖掘数据价值。欢迎各位朋友投稿! 微信号SnbDataStory 《新语数据故事汇,数说新语》