----------------------------------------------
4、数值计算和符号计算
MMA的数值计算,有两个特点:精确的结果、任意精确度。
1/2 + 1
得3/2
能用分数表达的,就不会输出小数。
Sqrt[2]
得根号2。能用根号表示的,不会输出小数。
那想要小数咋办?用N函数:
Sqrt[2] // N
得:1.41421
一般输出的是六位有效数字。这并不意味着MMA内部在偷懒,其实内部已经算了很多了。
可以指定输出多位:
N[Sqrt[2], 100]
又比如:
N[Pi, 100]
MMA可以有任意精确度的意思是说,只要你的电脑内存够大,有足够的时间等待输出,那么可以输出任意位。
N[Pi, 1000000]
可以试一下。
Timing[FactorInteger[10000!];]
Timing函数可以用来计时。只计计算的时间,输出的时间不算的。分号是表示不输出运算结果。
质因数分解一般认为很化时间的。但这里似乎没有化时间。。自己去观察结果。
Log[E]
得1
这是自然对数。Pi、E等,是内置的数学常数,不要理解为没有参数的函数。
Log[2,8]
得3
任意数作底数,都可以。
符号计算相当好玩了,不给出具体数字,也一样可以解出方程。
Solve[a x^2 + b x + c == 0, x]
注意,a和b之后,都有个空格。
那解方程组咋办?
这样写就可以了:
Solve[a x + y == 7 && b x - y == 1, {x, y}]
Solve[Cos[x] == x, x]
MMA对这个方程,无能为力。嘿嘿,你也有解决不了的时候。
当然喽,MMA不是万能的。但是呢,MMA可以用牛顿求根法,来得到一个近似值:
FindRoot[Cos[x] == x, {x, 1.0}]
初始猜测为1.0。
得:{x -> 0.739085}
不定积分,可以这样:
Integrate[1/(1 - x^3), x]
求导函数,用D:
D[%, x]
%表示上一个输出结果。
化简:
Simplify[%]
积分微分是互逆的,这里可以看到结果回到了原来。
可以计算定积分:
Integrate[Sin[x], {x, 0, Pi}]
可以计算二重积分:
Integrate[Sqrt[x^2 + y^2], {x, 0, 1}, {y, 0, x}]
可以解微分方程:
DSolve[y''[x] == a y[x], y[x], x]
可以解常微分方程组:
NDSolve[{x'[t] == -y[t] - x[t]^2, y'[t] == 2 x[t] - y[t]^3,
x[0] == y[0] == 1}, {x, y}, {t, 20}]
有人说,玩上MMA,学高数的人,笔算能力没有了。
并不都是如此吧?MMA不光能够快速得到结果,还能提高学习者的理解能力。
-------------------------------------------------
5、数据的表示
MMA的三个基本构造块,即三个atom是:
符号 symbol
数字 number
串 string
符号如:a、List、Plus
数字如:1、3.12、3+4I、5/7,分别是整数、实数、复数、分数
串如:"Hello, Hi"
atom没有组成部分,即基本数据类型。
这里要注意的是,串指字符串,不再是字符数组(如C、Pascal语言中)。
至于常用数据,在MMA中,是经常用表(list)来表示的,用{}括起来。
{1, 2, 3}
就是一个表。
MMA中,表的强劲之处在于,表中元素不必同一类型,而且,可以是任意类型。
就是说,啥都可以放在表中。一般的数啊、函数啊、表达式啊,图形啊,可以一起放到表中。
当然,你可以放入一杯咖啡试一下 :)
数据的可视化,在所有的学科中,都是极为重要的。
我们学习数学时,一直强调数图合一。
MMA的编制人员,化了近乎三分之一的精力,用在实现数据的图形呈现上。
这里只举两个例子:
ListLinePlot[Table[RandomInteger[{1, 10}], {10}]]
先产生十个一到十之间的随机整数,放到表中。然后画出拆线图。
Plot3D[Sin[x + y], {x, -3, 3}, {y, -2, 2}]
当变量有两个时,输出函数的立体图。
--------------------------------------------
6、程序设计
MMA据说是世界上最复杂的软件系统。支持这个又支持那个。。
最近看了MMA老板的一个视频,大有一统天下的架势。
MMA不光支持传统的过程式编程,也支持函数式编程。
不光如此,还有独特的模式匹配与变换规则等等功能。
不少会用MMA的,就会忍不住与其他软件比,比如MatLab、比如Python。。
当然,就是死劲黑人家了。。黑了人家,还说我不是故意的。。
听起来很方的样子,其实学会了就容易了。。到时候,你会加入黑人家的队伍么?
这种可能性很大。。很大。。很大。。
MMA允许程序设计者编写“自然码”的能力。
这种自然码更多依赖于你要处理的问题本身的情况,而较少依赖于你所使用的语言风格和独特性。
相当于说,MMA代码,有一种平易近人的味道。
让我们一起来品尝吧。
23:14 2016-10-24