带你用SmartNoteBook探索SageMath
Drawn by smartnotebook.tech Using SageMath
关于SageMath
S ageMath 是一个免费的、开源的数学软件系统,采用GPL协议。它整合了许多开源Python包,采用Python语言编写,但也支持其他语言。它的目标是创造一个可变的开源软件以替代Matlab、Magma、Maple 和 Mathematica。
为使大家方便的了解、学习并使用SageMath,我们的SmartNotebook(简称:SNB)通过引入SageMath引擎并细致地对兼容性做了优化和完善,充分利用Notebook的特性,不仅减少大量复杂的安装和配置,而且做到可以让用户即开即用。
话不多说,接下来我们就利用SmartNotebook 结合SDSU Sage Tutorial 提供的例子来快速了解SageMath的一些语法、函数等特性。
利用 SNB 探索SageMath
首先,我们用SmartNotebook 快速创建一个Sagemath内核的Notebook。像下面这样,输入Notebook的标题,选择Sagemath的内核,点击提交即可。
接下来我们进入Notebook后直接创建Code Cell 单元格,便可以编写并执行Sage代码了。
例如:我们对整数 20221208 进行素数因子分解 ,新建一个Code Cell 单元格 ,输入下面代码并点击执行:factor(20221208)
2^3 * 7 * 361093
SageMath的帮助系统
Help帮助:使用 "?"
当我们需要准确了解某个函数或命令的作用以及如何使用它,我们可以使用 "?"来调用内置的帮助系统。例如:lcm?
查看源代码:使用"??"
有些喜欢研究源码的同学想看看 SageMath 中某个命令的源码,您只需键入您感兴趣的命令,然后键入"??"。
例如,查看factor()的源代码(截图节取了部分源码):factor??
SageMath as a Calculator
这里我们介绍一下如何像图形计算器一样使用 SageMath 的一些算术和函数命令。
基本算术
基础的算术运算符为加 + 、减 -、乘 * 、除 / 、指数 ^
数字前面的符号-表示它是负数。print("1+1=",1+1) print("103-101=",103-101) print("7*9=",7*9) print("7337/11=",7337/11) print("11/4=",11/4) print("2^5=",2^5) print("-11+9=",-11+9) -6
输出:
1+1= 2
103-101= 2
7*9= 63
7337/11= 667
11/4= 11/4
2^5= 32
-11+9= -2
-6
SageMath 遵守标准的操作顺序, 即PEMDAS (parenthesis, exponents, multiplication, pision, addition, subtraction): 括号、指数、乘法、除法、加法、 减法。print(2*4^2+1) print((2*4)^2+1) print(2*4^(2+1)) print(-3^2) print((-3)^2)
输出:
33
65
128
-9
9
当两个整数相除时,有一个微妙之处:SageMath将返回分数或其十进制近似值。与大多数图形计算器不同,SageMath将尝试尽可能精确,除非另有说明,否则将返回分数。print(11/4) print(11/4.0) print(11/4.) print(11.0/4) print(11/4*1.)
输出:
11/4
2.75000000000000
2.75000000000000
2.75000000000000
2.75000000000000
整数除法和因式分解
有时当我们使用除法时,除法运算符不会给我们所有想要的信息。比如,我们不仅想知道约化分数是多少,甚至想知道它的十进制近似值,或者想知道唯一商和余数是多少。我们可以使用运算符// 来计算商,使用运算符 % 用于余数。使用 pmod()函数来同时计算获得商和余数。print( 14 // 4) print( 14 % 4) print( pmod(14,4))
输出:
3
2
(3, 2)
我们知道当两个整数是否能整除,可以采用A/B余数是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中是否是素数,我们可使用方法is_prime()print(153.is_prime()) (2^19-1).is_prime()
输出:
False
True
factor()可计算整数的素因数分解print(62.factor()) 63.factor()
输出:
2 * 31
3^2 * 7
有兴趣简单地知道哪些素数除以整数,我们可以使用prime_pisors() 或 prime_factors()方法。print(24.prime_pisors()) print(24.prime_factors()) print(63.prime_factors()) print(63.prime_pisors())
输出:
[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)
输出:
7
1
20
42
标准函数和常量
SageMath几乎包含了人们在学习数学时遇到的所有标准函数。接下来我们将介绍一些最常用的函数:maximum、minimum、 floor、ceiling、trigonometric、exponential、logarithm 函数。我们还将看到许多标准的数学常数,如欧拉常数(e)、π 和黄金比例( ϕ )。# max 最大值 print(max(1,5,8)) # min 最小值 print(min(1/2,1/3)) # abs 绝对值 print(abs(-10)) # floor 向下取整 print(floor(2.1)) # ceil 向上取整 print(ceil(2.1))
输出:
8
1/3
10
2
3
当使用floor、ceil 时要特别小心,注意计算精度问题 print(floor(1/(2.1-2))) print(1/(2.1-2))
输出:
9
9.99999999999999
计算机以二进制形式存储实数,而我们习惯于使用十进制表示。十进制表示法非常简单和简短,但是当转换为二进制时,它是:
由于计算机不能存储无限数量的数字,因此这会在某处四舍五入,从而导致我们看到的精度错误。
然而,在SageMath中,有理数(分数)是精确的,所以我们永远不会看到这个舍入误差。因此,尽可能使用有理数(分数)而不是小数通常是一个好主意,尤其是在需要高精度的情况下。floor(1/(21/10-2))
输出:
10
sqrt()该命令/函数计算实数的平方根。正如我们之前在分数中看到的那样,如果我们想要十进制近似值,我们可以通过给出一个十进制数作为输入来获得它。print(sqrt(3)) print( sqrt(3.0))
输出:
sqrt(3)
1.73205080756888
为了计算其他根,我们使用有理指数。SageMath可以计算任何有理数指数幂(SageMath can compute any rational power)。如果指数或基数是小数,则输出将是小数。print( 3^(1/2) ) print( (3.0)^(1/2) ) print( 8^(1/2) ) print( 8^(1/3) )
输出:
sqrt(3)
1.73205080756888
2*sqrt(2)
2
SageMath 还支持所有标准三角函数,例如:正弦sin()和余弦 cos()print( sin(1) ) print( sin(1.0) ) print( cos(3/2) ) print( cos(3/2.0) )
输出:
sin(1)
0.841470984807897
cos(3/2)
0.0707372016677029
我们再次看到与SageMath相同的行为,SageMath将给我们一个确切的答案。你可能会想,既然没有办法简化,何必呢?好吧,一些涉及正弦的表达式确实可以简化。例如,几何学中的一个重要恒等式是 :
SageMath有一个内置的符号π,去使用这个恒等式:print(pi) print(sin(pi/3))
输出:
pi
1/2*sqrt(3)
在SageMath内,我们完全处理的是π,而不是一些数字近似。但是,我们可以使用以下方法调用数值近似:pi.n()print(pi.n()) print(sin(pi)) print(sin(pi.n()))
输出:
3.14159265358979
0
1.22464679914735e-16
我们看到,当使用符号时,SageMath 返回确切的结果。但是,当我们使用近似值时,我们会得到一个近似值。是 的10^{-16}简写,数字应为零,但近似值引入了错误。以下是使用符号、精确 π 与数值近似的几个示例:print( sin(pi/6)) print( sin(pi.n()/6)) print( sin(pi/4)) print(sin(pi.n()/4))
输出:
1/2
0.500000000000000
1/2*sqrt(2)
0.707106781186547
继续我们的主题,有一些鲜为人知的特殊角度,可以巧妙地简化正弦或余弦的值。print( sin(pi/10)) print( cos(pi/5) ) print( sin(5*pi/12) )
输出:
1/4*sqrt(5) - 1/4
1/4*sqrt(5) + 1/4
1/4*sqrt(6) + 1/4*sqrt(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(e^2) ) 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)) )
输出:
1
1
2
log(10)
2.30258509299405
2
e^2
7.38905609893065
pi
2
好的,本次我们关于SageMath的探索就先介绍到这里,在后面的文章我们会陆续探索并介绍以下内容,希望感兴趣的朋友可以持续关注:
利用SageMath 求解方程和不等式 SageMath 2D 和3D 可视化介绍 SageMath 的数据结构及编程
《新语数据故事汇,数说新语》 科普数据科学、讲述数据故事,深层次挖掘数据价值。欢迎各位朋友投稿!
微信号|SnbDataStory
《新语数据故事汇,数说新语》
曾与茅台五粮液同获中国名酒称号,今走向破产重整,谁来搭救昔日河南酒王?每经记者可杨每经编辑文多昔日中国名酒之一的宋河酒业,正在等待下一个白衣骑士出现。据全国企业破产重整案件信息网显示,河南省宋河酒业股份有限公司申请破产重整,申请人与被申请人均为河南省
初冬的早晨小城市的夜虽然比不上大城市的喧嚣,但也静得其乐,记的刚到来这个城市的第一感觉便是静,好生喜欢。雨声划破了夜间的沉默,也打扰了树的静,晨间上班的途中看到这一景不由的拿出手机记录。雨滴
全国首例!北京海淀法院对一猥亵儿童教职人员宣告终身禁业中国青年报客户端北京11月15日电(中青报中青网记者韩飏)学校外聘教职人员多次猥亵女童,在女童家人报案后被抓获。记者今天从北京市高级人民法院获悉,北京市海淀区人民法院少年法庭近日对
曾经的北漂人记起北京,一切重新开始我的生活日记每日一悟新人养成计划曾经固执地认为时间会淡忘一切,往事会如烟如梦般云消雾散。也曾以为在京城里渺小如微尘的我和我的往事只是鼓励好强的我挺直腰杆走过冬天走过曲折的一个内心深
白酒有多久保质期?广州男子放30年白酒,行家不能喝,太值钱随着如今的老酒热,现在市面上很多的老酒陈酒稳居喝酒中的天花板。而且因为老酒的火爆,还因此产生了很多回收老酒的职业,如今可以说是高薪职业也不为过,一瓶老酒的价值有些可以上万,还有些甚
川藏南线超详细攻略头条创作挑战赛上期菲夜给大家说过从这期开始,将用九期时间分别介绍进藏的九条线路攻略和注意事项。这期从最容易的川藏南线讲起,不多说,看攻略。路线图第一天在成都出发,行驶227公里来到
儿童保险攻略给宝宝买保险应该怎么买?不管你的收入有多高都别轻易给孩子买保险给孩子买保险前先搞懂这4点先大人后孩子很多家庭想到要买保险都因为有了孩子以后,但是却忽略了自己其实家庭中最需要保障的是我们家长自己哦!家长是整
5位成功的大码超重博主头条创作挑战赛5位成功的大码超重博主当前的美标准在数百万人的思想中根深蒂固。许多人认为模特应该特别长腿和瘦。但是,我们将讨论知名博主,他们使用个人示例表明,无论如何,美丽都不会隐藏
我的生活不过如此,我的生命不过如此疫情静默前后的差别有没有?有,又好像没有。因为,静默之前无非就是想去哪里一按电钮就去了,封控之后,去哪儿都只是想想。其实,小区没封控时你坐在轮椅上晒太阳,封控了你还是只能坐在轮椅上
鱼念七秒,人念七年,如有来生,我愿化作一条鱼鱼的记忆只有7秒,人的记忆又有多少?有人告诉我鱼的记忆只有7秒,7秒之后它就不记得过去的事情,一切又都要从新开始!所以在那小小的鱼缸里它永远不觉得无聊,因为7秒一过,每一个游过的地
当黑夜降临的时候,他们竟然敢头条创作挑战赛如果有百分之二十的利润,资本就会蠢蠢欲动如果有百分之五十的利润,资本就会冒险如果有百分之一百的利润,资本就敢于冒绞首的危险如果有百分之三百的利润,资本就敢于践踏人间一