【转载请注明出处】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、定义分段函数

  1. f[x_] := Piecewise[{{E^(-1/(1 - x^2)), -1 < x < 0}, {E^(-1/(1 - (2*x)^2)), 0 <= x < 1/2}}, 0]
  2. 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)$。那么我们可以使用以下语句:

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

 9、纯函数(pure function)和Map

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

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

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

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

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

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

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

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

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

 10、算置信区间和分位数

  1. data = {, , , , , , , , , , , , , , , };
  2. n := ;
  3. alpha := 0.25;
  4. muMin = Mean[data] - Variance[data] / Sqrt[n]* Quantile[StudentTDistribution[n - ], - alpha/] %% Quan...部分是计算student分布的概率为1-alpha/2的分位数
  5. muMax = Mean[data] - Variance[data] / Sqrt[n]* Quantile[StudentTDistribution[n - ], alpha/]
  6. sigma2Min = (n - ) Variance[data] / Quantile[ChiSquareDistribution[n - ], - alpha/]
  7. 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. 【转】 svn: Server sent unexpected return value (403 Forbidden) in response to CHECKOUT request for-解决方法

    来源:http://blog.csdn.net/xhu_eternalcc/article/details/18454481 ------------------------------------- ...

  2. 获取上一页面url

    console.log(window.location.host); #js获取当前域名 console.log(window.location.href); #js获取当前url console.l ...

  3. centos7上keepalived的安装和配置

    1.环境规划1)master:node1,centos7.5,eth0:192.168.1.11,eht1:10.10.1.11,keepalive2)backup:node1,centos7.5,e ...

  4. 简单的epub制作

    最近在无聊看轻小说的时候,找到了一套叫<白银龙王的摇篮>的书. 台版一共出了6卷,并且wenku8都已经录入了,但是轻国的epub录入只有2卷. 我寻思着做epub也不是什么难事,就稍微百 ...

  5. 跟随我在oracle学习php(12)

    DOM 文档对象模型 body:(什么时候)找到标签 操作标签找到标签:(都会返回一个js对象)document.getElementById() 通过iddocument.getElementsBy ...

  6. APP包打包签名步骤

    开发混合app上架应用市场,需要进行应用签名,但是申请签名如果没搞过,会特别麻烦,所以我自自己总结了一下申请的步骤,在此记录一下 1.首先需要下载安装java环境即jdk, 2.配置环境变量 假设JD ...

  7. MySQL运用

    进入mysql 命令行: mysql -uroot -p查看所有数据库: show databases;创建数据库: create database niu charset utf8;删除数据库: d ...

  8. SSM--spring框架

    他是SpringFramework创始人,interface21 CEO Spring 的作者:Rod Johnson 一  :Spring的核心IOC和AOP(本处详解IOC) IOC:控制反转:( ...

  9. Mac上安装Docker

    安装这个东东有两种方法:在线安装和手动安装 在线安装: 打开终端,直接输入brew cask install docker之后回车,执行的过程中会要求输入password(就是你电脑的登录密码),输入 ...

  10. github同一账户+多个库

    目标 我的情况是,既要向自己的public库提交代码,又要向别人的private库提交代码 网上搜到的情况一:github上有多个账号,都要向自己的库提交代码 网上搜到的情况二:多个git托管源(比如 ...