【转载请注明出处】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. [转]imageMagick 在nodejs中报错Error: spawn identify ENOENT的解决方案

    同时还有 Error: Could not execute GraphicsMagick/ImageMagick 这个问题, 也参考了 https://blog.csdn.net/chenxinpen ...

  2. 【nowcoder】 4th T1 动态点分治

    题目链接:https://www.nowcoder.com/acm/contest/175/A 题目名字吓死人 std: 我 太可啪了 一道简单的模拟题.虽然我把题意想错了. 按照题意模拟输出和继承. ...

  3. 最长绝对文件路径——算法面试刷题1(google),字符串处理,使用tree遍历dfs类似思路

    假设我们通过以下的方式用字符串来抽象我们的文件系统: 字符串"dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext"代表了: dir subdir1 su ...

  4. windows下Redis安装及利用java操作Redis

    一.windows下Redis安装 1.Redis下载 下载地址:https://github.com/MicrosoftArchive/redis 打开下载地址后,选择版本 然后选择压缩包 下载 R ...

  5. Java正则表达式实现港、澳、台身份证验证

    最近由于业务的要求,需要进行港.澳.台人员身份证验证,现在直接上代码,经供参考学习,也为自己积累一些工具类: package com.qiu.validate; public class regexV ...

  6. 对redux的粗略理解

    redux是一个js库,用于前端应用的状态管理,但是在一个较小的项目中,即一个并不需要太多交互的项目中完全可以不用redux,非要使用的话反而增加了项目的复杂度. 关于redux就是状态与数据一一对应 ...

  7. elment重置表格行高,hover效果

    来源网络,做个笔记.表头行高.el-table__header tr, .el-table__header th { padding: 0; height: 50px; }表体行高 .el-table ...

  8. datatable 添加列之前判断是否存在该列

    if (!dt.Columns.Contains("BDate")) { DataColumn dc1 = new DataColumn("BDate", ty ...

  9. Linux下数据库备份

    1.登录数据库服务器并切换到数据库用户下 [root@*** ~]# su - oracle 2.测试用户名密码是否能正确连接数据库 [oracle@*** ~]$ sqlplus username/ ...

  10. easyui datagrid 后台分页,前端如何处理

    module.exports = { queryMethod(){ let params = checkQueryParams.call(this); if (!params) { return; } ...