【转载请注明出处】http://www.cnblogs.com/mashiqi

2017/12/07

0、杂:

Mathematica的自带函数的首字母一定是大写的,参数输入要用中括号[],而不是圆括号()。

一个命令后面加分号“;”表示不输出结果(不加分号就输出结果),这点和Matlab是一样的。最好一行一个命令,不管有没有分号,否则的话结果可能和预期的不一样,这点和Matlab不一样。输入完命令直接按Enter是换行,按Shift+Enter才是执行该命令,至于输不输出结果,那就看有没有加分号。

可以用“Information[x]”来查看x是否被使用了或者怎样定义了。

百分号“%”被用来表示上次的输出结果,有时直接用“%”挺方便的。然后“%%”表示倒数第二次的输出结果,“%%%”表示倒数第三次的输出结果,以此类推。

“/.”这个运算的函数名称是“ReplaceAll”,可以通过键入“ReplaceAll”并选中然后按F1查看文档,“/.”有时可以用来进行变量替换。

“//”这个运算符表示把后面的东西作用到前面。比如“2 // Sin”表示Sin[2]。它也可以接连使用,“2 // Sin // N”就可以计算出Sin[2]的具体值。

comment:(* the things within comment *)

想要清除变量M的值,可以用语句:M=.           另外,Clear[x]是清除变量x的值,Remove[x]是删除x。

1、查询函数:和matlab一样选中函数名然后按F1,或者?Int,?*Int,?Int*,?*Int*,然后Shift+Enter

任何函数,都可以通过在前面加问号?,好查询此函数的使用方法

2、定义函数:f[x_,y_]:=x^2+y^2

指数函数要用Exp[] 或者E^...,圆周率3.1415...是Pi

3、定义分段函数

f[x_] := Piecewise[{{E^(-1/(1 - x^2)), -1 < x < 0}, {E^(-1/(1 - (2*x)^2)), 0 <= x < 1/2}}, 0]
Plot[f[x], {x, -2, 2}]

其中第一句末尾方括号左边的那个0,表示otherwise时,函数$f(x)$的取值。

4、函数画图

Plot[f,{x,-1,1},PlotLegends -> "Expressions", PlotRange -> {{-1, 1}, {-2, 2}}] ;

Plot[D[f[x], {x, 1}], {x, -2, 2}]会出错,但是Plot[f'[x], {x, -2, 2}]不会。对,是的!求导可以直接用“'”符号!

Plot3D[f,{x,-1,1},{y,-1,1}] ;

ContourPlot[y^2 == x (x - 1) (x + 1), {x, -2, 2}, {y, -2, 2}] ;

PlotLegends -> "Expressions"表示用函数表达式作为图像曲线的legend;

PlotRange -> {{-1, 1}, {-2, 2}}表示显示范围(横轴-1到1,纵轴-2到2)。

ContourPlot的作用和GrafEq比较像,可以直接根据x和y的隐式关系画图,而不用一定把y写成x的函数。但是我对比过了,同样的图像,GrafEq画的慢但最终结果清晰,Mathematica的ContourPlot画的快但没那么清晰。

Mathematica的Manipulate功能:Clear[f]; f[x_,a_]=Sin[a*x]; Manipulate[Plot[f[x,a],{x,-1,1}],{a,1,2}]

5、Manipulate 动态参数离散化

Manipulate[ Sum[(2 I*R)^j/((j!)*(t + j + 1))*k^j, {j, 0, Infinity}], {t, 0, 20, 1, Appearance -> "Labeled"}]

{t, 0, 20, 1, ...}中的最后一个“1”是用来指定步长的。指定了之后,Manipulate就会对t进行离散显示了(不指定,就是连续显示)。Appearance -> "Labeled"的作用是将动态参数的具体数值在操作框旁边显示出来。

6、Range产生数组:“x={5,2,1,E^I};”命令可以产生数组。也可以通过“y=Range[1,20];”的方式来产生数组,引用第n个元素是“y[[n]]”。“y[[-1]]”表示引用最后一个元素,“y[[-2]]”表示引用倒数第二个元素。“;;”可实现切面操作,x[[2;;4]]={2,1,E^I}。当x和y都是同样长度的List的时候,“x*y”的作用和Matlab中的点乘“.*”效果一样。

7、Refine,Element, 使用假定:“Refine[Im[I*x], Element[x, Reals]]”命令可得到“x”。但是Refine只能给出一个假定。

我们可以用Assuming来给出多个假定。将多个假定,放在Assuming参数的最前,然后后面是一个具有Refine的表达式:“Assuming[(a>0)&&(b>0),......]”。

Element[x,Reals]表示$x \in \mathbb{R}$,即变量x的取值都将会是实数,所以变量x按照实数处理。

8、求导链式法则:直接输入$Dt[f[g],x]$即可得到$\frac{\text{d}}{\text{d}x} \big( f \circ g \big) (x)$的输出。但是输出结果不是LaTeX格式的,所以可以紧接着用局语句“TeXForm[%]”得到结果的LaTeX表达式。

有时我们需要对PDEs中的各项进行变量替换,比如把$\frac{\text{d}}{\text{d}x} f(x)$换成$\frac{\text{d}}{\text{d}y}g(y)$(其中$f(x)=g(y)$)。比如我想把$x$换成$\frac{1}{x}$,那么我可以令$y = \frac{1}{x}$、令$g(y) = f(x)$,然后用$g$对$y$的各阶导数$g^{(n)}(y)$来表示$f^{(n)}(x)$。那么我们可以使用以下语句:

(* Example 1 *)
y[x_] = 1/x;
Dt[g[y[x]], {x, 2}];
% /. x -> InverseFunction[y][y];
Refine[%,y!=0]
(* Example 2 *)
y[x_] = 1/Sqrt[x];
Dt[g[y[x]], {x, 3}];
% /. x -> InverseFunction[y][y];
Refine[%, y > 0]

 9、纯函数(pure function)和Map

纯函数的作用的在不给函数命名的情况下直接带变量进入一个表达式。具体例子如下:

(* pure function *)
(#^) & [a + b] (* 结果是:(a+b)^2 *)
(# + # + ##) & [a, b, c, d, e] (* 结果是:a+b+c+d+e *)

后面的方括号就是这个纯函数的参数列表。必须用方括号框起来,这和函数的参数是一样的。

当纯函数只有一个参数值时,可以用Map函数将多个参数组送入纯函数进行计算:

(* single-slot pure function apply to multiple argument *)
(#^) & /@ {a, b, c} (* 结果是:{a^2,b^2,c^2} *)
(#^) & /@ {a + b, c} (* 结果是:{(a+b)^2,c^2} *)

当想讲多组参数组送入一个具有多个参数的纯函数时,可以使用MapThread (MapThread好像没有简写),或者使用Apply (可以简写为@@或者@@@):

{x, y} = {{, , }, {, , }};
(* multi-slot pure function apply to multiple argument sets, usingMapThread *)
MapThread[#^ + #^ & , {x, y}] (* 结果是:{10,20,52} *)
(* multi-slot pure function apply to multiple argument sets, Apply (@@@) *)
(#^ + #^) & @@@ Transpose[{x, y}] (* 结果是:{10,20,52} *)

以下几个操作均看不明白为什么。不明白为什么:

Map[(#^) & , a + b + c]  (* 结果是:a^2+b^2+c^2 *)
(#^) & /@ (a + b + c) (* 结果是:a^2+b^2+c^2 *)
Map[(#^) & , + + ] (* 结果是:6 *)
(#^) & /@ ( + + ) (* 结果是:6 *)

 10、算置信区间和分位数

data = {, , , , , , , , , , , , , , , };
n := ;
alpha := 0.25;
muMin = Mean[data] - Variance[data] / Sqrt[n]* Quantile[StudentTDistribution[n - ], - alpha/] %% Quan...部分是计算student分布的概率为1-alpha/2的分位数
muMax = Mean[data] - Variance[data] / Sqrt[n]* Quantile[StudentTDistribution[n - ], alpha/]
sigma2Min = (n - ) Variance[data] / Quantile[ChiSquareDistribution[n - ], - alpha/]
sigma2Max = (n - ) Variance[data] / Quantile[ChiSquareDistribution[n - ], alpha/]

 11、everything is an expression:

其实在Mathematica的世界里,一切都是“表达式”。可以看这篇官方的tutorial:http://reference.wolfram.com/language/tutorial/EverythingIsAnExpression.html

 12、patterns:

关于下划线(在Mathematica中,下划线叫Blank)在Mathematica中的意义,看这篇:http://reference.wolfram.com/language/ref/Blank.html

关于Patterns,看这篇:http://reference.wolfram.com/language/tutorial/Introduction-Patterns.html

我们可以具体指定某个patterns中的某个expression的具体Types。比如g[x_]是一个pattern,如果我们想让x_这个expression只能是整数,我们可以用x_Integer,所以整个expression就变为了g[x_Integer],这时,只有Head是Integer的expression才能匹配上这个x_Integer了。看这篇:http://reference.wolfram.com/language/tutorial/SpecifyingTypesOfExpressionInPatterns.html

学习Mathematica的更多相关文章

  1. Mathematica 迭代函数

    学习Mathematica迭代函数的几个画图例子: 1.三角形沿着某一点旋转 verticse = {{0, 0}, {1, 0}, {1/2, Sqrt[3]/2}}; tri = Line[ver ...

  2. 【值得收藏】Mathematica数值计算工具的学习资料汇编【可免费下载】

    Mathematica学习教程 Mathematica是一款科学计算软件,很好地结合了数值和符号计算引擎.图形系统.编程语言.文本系统.和与其他应用程序的高级连接.Mathematica与Matlab ...

  3. Mathematica学习笔记2

    导入文件中的矩阵 mat = Import["...", "Table"] 转化为向量矩阵(元素为数对) data = Table[{mat[[i, j]], ...

  4. Mathematica学习笔记1

    非常喜欢Mathematica的"自动草稿纸"的理念,Magic Paper, 唔哈~ Mathematica的矩阵操作和Matlab的风格十分不同. [ ] 是一个Part运算符 ...

  5. mathematica入门学习记录:

    http://v.qq.com/vplus/4bc1736725fc7c3567d5bd9617482a49/foldervideos/m8k0000011aqj4k mathematica的数据 简 ...

  6. 离散数学及其应用(Discrete Mathematica With Application 7th)学习笔记 第一章

    目前本人只进行到了第五章的章末补充练习,应该是从4月6号开始学习的,又是英文版,而且基本就下班回家抽2个小时左右去学,所以进度较慢. 由于本质是数学,除了一些程序处理和大计算量的问题,基本上一本草稿本 ...

  7. Mathematica(MMA)闪电入门系列 目录与说明

    Mathematica(MMA)闪电入门系列  入口 本文起到目录作用,点击以下链接,可以打开各章: 一.MMA概述二.表操作三.函数与递归四.表达式的计算五.过程式编程和调试技巧六.图形七.程序包 ...

  8. Mathematica

    Mathematica是一款科学计算软件,很好地结合了数值和符号计算引擎.图形系统.编程语言.文本系统.和与其他应用程序的高级连接.很多功能在相应领域内处于世界领先地位,它也是使用最广泛的数学软件之一 ...

  9. 【值得收藏】符号计算软件Maple的学习资料汇编【可免费下载】

    Maple学习教程 Maple是目前世界上最为通用的数学和工程计算软件之一,在数学和科学领域享有盛誉,有“数学家的软件”之称.Maple在全球拥有数百万用户,被广泛地应用于科学.工程和教育等领域,用户 ...

随机推荐

  1. ceph使用对象网关

    1.   介绍 三种验证客户端的方式选一种就行了 2.    安装 2.1 创建对象存储网关系统 步骤1:安装文档安装ceph 步骤2:初始化缓存网关 [root@node1 my-cluster]# ...

  2. js 快速生成数组的方法

    //实现方法一:循环赋值var arr1 = new Array(100);for(var i=0;i<arr1.length;i++){ arr1[i] = i;}console.log(ar ...

  3. cocos2dx 实现gpu instancing

    所有的gpu instancing都是在unity3d上实现的,ue4实现起来应该压力也不大相关链接见下:https://www.cnblogs.com/hont/p/7143626.htmlhttp ...

  4. learning mqtt protocol

    reference: http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html

  5. java基础概念

    jre是java运行环境 jdk是java开发工具包 java源文件←编译class字节码文件←运行结构

  6. Python_Mix*re模块基础方法,进阶,正则表达式的使用

    re模块import re 基础方法 findall:匹配所有 ,每一项都是列表中的一个元素,返回的是列表 search只匹配从左到右的第一个,得到的不是直接的结果,而是一个变量,通过这个变量的gro ...

  7. python修炼第三天

    今天主要讲了文件操作,函数与装饰器,装饰器比较烧脑,需要多做练习,逐步分解来进行理解!    加油! 一 文件操作 操作系统 提供文件的概念可以操作磁盘. 文件的只读模式: 注意如果是windows ...

  8. INSERT INTO SELECT

    今天遇到一个问题在写把查询的数据添加到一个表里时出现问题 sql  INSERT INTO db1_name(field1,field2) VALUES SELECT field1,field2 FR ...

  9. Android向通讯录添加联系人的一般方法

    Android向通讯录添加联系人的一般方法 以一个简单的例子加以说明,记得需要相应的权限: 测试代码,关键的内容就在add函数里面. package zhangphil.demo; import an ...

  10. canal-client无法获取数据

    在虚拟机单cpu环境下 canal.properties配置中 #canal.instance.parser.parallelThreadSize = 16 那么,MysqlMultiStageCop ...