1、MMA概述


1、MMA概述                     返回目录页
一、MMA的使用
二、函数
三、表达式
四、数值计算和符号计算
五、数据的表示
六、程序设计

----------------------------------

MMA能够用两个字归纳:强大。
用四个字归纳:很是强大。
代码短是出名的,MMA的代码n行,其余语言好比C、Java等,要10n行左右。这个有人做过统计。
为啥会这样呢?由于MMA的视角不同。其余语言在搞零售,MMA在搞批发。
代码短显然是个优势,但带来两个问题:代码比较晦涩、影响运行效率。
MMA的代码,通常来讲比较符合人的阅读习惯,个别代码晦涩,多是用了较多的语法糖。
至于效率,如今的硬件已经很发达,稍低的效率彻底能够接受。

---------------------------------
一、MMA的使用
怎么安装破解就不说了,百度上不少。
双击运行。
MMA能够创建多种文件,这里仅关注笔记本文件,即*.nb文件。
启动MMA,会自动建立一个nb文件。右下角能够选择显示的大小。选择一个本身眼睛舒服的大小便可。
代码能够输入进去,或者拷贝进去。文件能够保存。
运行代码有两种方法,Shift+Enter。或者直接按数字小键盘右下解的Enter键。

好比:
1 + 2
运行,得3

1 + 2;
运行,没反应。由于分号的做用是,程序内部运行了,但不输出。

{1 + 2; 1 + 3, 1 + 4}
这里有三个语句。
由于第一个是分号结尾,因此只输出了两句的结果。
最后一个语句,默认为有输出,结尾符号能够没有。

------------------------------------
二、函数
函数由两部分构成,函数名(又叫函数头)与参数。
MMA有数千内置函数(直接拿来可用的)及不少程序包中的函数(必须导入程序包)。
内置函数的函数名,绝大多数用英文全名,可让人一看到就知道函数的功能。并且函数名的第一个字母,是大写的。
MMA是大小写敏感的语言。即N与n是不一样的。
参数个数无限制,中间用逗号隔开。参数包含在[]之中。
好比:
Mod[5, 2]
得1

MMA的内置函数很是多,尽可能用内置函数,优化过的,速度快。
固然,自定义函数也很方便:

f[x_] := x + 1; (*就这么愉快地实现了加1功能的函数*)
f[1]
得2
(* 中间是备注内容 *)
这是MMA中惟一的备注形式。//备注,没有。{}备注,没有。/* */备注,没有。

函数名并不必定要放在前面,也能够放在后面。这里给出第一个语法糖:
2 // f
得3

MMA的帮助文件中,以两种形式呈现:
函数浏览器:以讲函数为主。
虚拟全书:以讲功能为主。

函数能够嵌套使用:
2 // f // f
得4
这与写成:f[f[2]],是同样的。


------------------------------------------
三、表达式
每一个MMA的表达式,都具备一个Head(函数头)。

Head[a + b]
得Plus

通常咱们的习惯是,形式如:a+b的,称之为表达式。形式如:Plus[a+b]的,称之为函数。
却不知,在MMA中,a+b的内部形式,正是Plus[a+b]。
表面上的不少数学符号的链接体,内部均为函数形式。
按照通常的定义,任何语句均可以称为表达式。而函数不能这样说。
表达式包括函数与atom。atom是最基本的数据类型,后面会说。

在MMA中,任何事物都具备表达式这一共同结构。
能够用FullForm函数把表达式的内部表示显示出来:

3*(a+5)//FullForm
得:Times[3,Plus[5,a]]
很容易看清楚,是把5与a加起来,而后乘以3。这是个嵌套函数。

有时候,嵌套很是多时,满眼都是[],就不太容易看清楚了。这时候,能够这样:

Times[3,Plus[5,a]] // TreeForm
获得一个树形图。
就很容易看清楚了。

a + b // FullForm
a - b // FullForm
a*b // FullForm
a/b // FullForm
观察结果,咱们能够看到,在MMA内部,加减都经过加法作,乘除都经过乘法作。
乘号要注意一下,在MMA中,空格能够表示乘号:
a b
即为a*b

2 b
能够写成:2b,中间空格是能够省略的。但不能写成b2,这样的话,b2就会被当成一个符号。
ab中间的空格也不能省,省掉的话同样会被当作符号ab。

2 2
表示2*2,乘号会自动补上。

()的优先级很高。乘除的优先级高于加减。这些优先级通常都不用多说,由于多数符合通常的习惯。
当搞不清楚时,那就宁肯加上()。一点不浪费,反而使代码阅读性提升了。

关系算子与逻辑算子的表面形式与内部函数形式,就上图吧:

html

 

----------------------------------------------
四、数值计算和符号计算
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不光可以快速获得结果,还能提升学习者的理解能力。

-------------------------------------------------
五、数据的表示

MMA的三个基本构造块,即三个atom是:
符号 symbol
数字 number
串 string
符号如:a、List、Plus
数字如:一、3.十二、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}]
当变量有两个时,输出函数的立体图。


--------------------------------------------
六、程序设计
MMA听说是世界上最复杂的软件系统。支持这个又支持那个。。
最近看了MMA老板的一个视频,大有一统天下的架势。

MMA不光支持传统的过程式编程,也支持函数式编程。
不光如此,还有独特的模式匹配与变换规则等等功能。

很多会用MMA的,就会忍不住与其余软件比,好比MatLab、好比Python。。
固然,就是死劲黑人家了。。黑了人家,还说我不是故意的。。
听起来很方的样子,其实学会了就容易了。。到时候,你会加入黑人家的队伍么?
这种可能性很大。。很大。。很大。。

MMA容许程序设计者编写“天然码”的能力。
这种天然码更多依赖于你要处理的问题自己的状况,而较少依赖于你所使用的语言风格和独特性。
至关于说,MMA代码,有一种平易近人的味道。
让咱们一块儿来品尝吧。

23:14 2016-10-24编程

 

+++++++++++++++++++++++++++++++++++++数组

扩展阅读:我为何喜欢Mathematica!(有连接,能够点开)浏览器

 

 

 

                        Top


dom