学习Mathematica
【转载请注明出处】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的更多相关文章
- Mathematica 迭代函数
学习Mathematica迭代函数的几个画图例子: 1.三角形沿着某一点旋转 verticse = {{0, 0}, {1, 0}, {1/2, Sqrt[3]/2}}; tri = Line[ver ...
- 【值得收藏】Mathematica数值计算工具的学习资料汇编【可免费下载】
Mathematica学习教程 Mathematica是一款科学计算软件,很好地结合了数值和符号计算引擎.图形系统.编程语言.文本系统.和与其他应用程序的高级连接.Mathematica与Matlab ...
- Mathematica学习笔记2
导入文件中的矩阵 mat = Import["...", "Table"] 转化为向量矩阵(元素为数对) data = Table[{mat[[i, j]], ...
- Mathematica学习笔记1
非常喜欢Mathematica的"自动草稿纸"的理念,Magic Paper, 唔哈~ Mathematica的矩阵操作和Matlab的风格十分不同. [ ] 是一个Part运算符 ...
- mathematica入门学习记录:
http://v.qq.com/vplus/4bc1736725fc7c3567d5bd9617482a49/foldervideos/m8k0000011aqj4k mathematica的数据 简 ...
- 离散数学及其应用(Discrete Mathematica With Application 7th)学习笔记 第一章
目前本人只进行到了第五章的章末补充练习,应该是从4月6号开始学习的,又是英文版,而且基本就下班回家抽2个小时左右去学,所以进度较慢. 由于本质是数学,除了一些程序处理和大计算量的问题,基本上一本草稿本 ...
- Mathematica(MMA)闪电入门系列 目录与说明
Mathematica(MMA)闪电入门系列 入口 本文起到目录作用,点击以下链接,可以打开各章: 一.MMA概述二.表操作三.函数与递归四.表达式的计算五.过程式编程和调试技巧六.图形七.程序包 ...
- Mathematica
Mathematica是一款科学计算软件,很好地结合了数值和符号计算引擎.图形系统.编程语言.文本系统.和与其他应用程序的高级连接.很多功能在相应领域内处于世界领先地位,它也是使用最广泛的数学软件之一 ...
- 【值得收藏】符号计算软件Maple的学习资料汇编【可免费下载】
Maple学习教程 Maple是目前世界上最为通用的数学和工程计算软件之一,在数学和科学领域享有盛誉,有“数学家的软件”之称.Maple在全球拥有数百万用户,被广泛地应用于科学.工程和教育等领域,用户 ...
随机推荐
- lldb调试mysql 插件命令
# attach process llvm process attach --pid 64924 # 添加断点 breakpoint set -n dispatch_command(enum_ ...
- MSDN订户下载权限被屏蔽的办法
使用Chrome浏览器,在加载完成页面之后,按F12,在控制台选项卡当中输入下面代码,即可解除屏蔽. $("#SubMigratedMessageArea").remove(); ...
- BAT面试官告诉你如何回答你的职业规划
前言(Why) 在面试中不论是在一面二面三面这种技术面,还是在最后的hr面,经常会被人问及,"谈谈你的职业规划"这种问题,我们回答的很可能会给我们的面试表现加分,如果回答地不好,对 ...
- 微信或QQ屏蔽域名,爆红域名如何在微信打开,如何进行微信域名防封?
近很多朋友都会遇到这个问题,为什么我的微信域名或者QQ域名怎么总是提示拦截呢?在这里跟大家说一下吧: 第一点:就是域名里面的内容违规或者诱导被举报而导致的拦截 第二点:就是被用户或者同行恶意举报而导致 ...
- 网页链接跳转qq聊天界面以及QQ群是什么实现的
网页可以唤起QQ群,这我们都知道可以做到,那如何唤起呢?下面就做一个简单的介绍,希望可以帮助到有需要的朋友 1.官方提供的几种加群的链接 官方的加群代码的获取前提是我们具有权限(也就是群主或管理权限) ...
- centos更换网易的源
刚安装的centos系统下载软件可能很慢,就可以试一下更换为国内比较知名的源试试.现在知道的网易和中科大源很不错.那么怎么更换呢 1. cd /etc/yum.repos.d/ c ...
- ansible 剧本
ansible的管理与剧本 首先我们安装一个ansible. 在7版本,直接用yum安装就可以 yum -y install ansible 然后清空ansible的配置文件,在里面写入自己需要管 ...
- webstorm使用YUIcompressor压缩js css并指定目录
YUI插件下载地址: https://github.com/yui/yuicompressor/releases 配置教程: 注意:这里用 ..\ 代表上级目录, '\' 千万别写成 '/'
- python笔记22-常用模块
模块就是一个python文件,用哪个模块就要import哪个模块 1.调用模块 # import model #import的本质就是把这个python从头到尾执行一遍## model.run1()# ...
- 练习 HashSet 去重复
package com.rf.xs.list; import java.util.HashSet; public class Person { private String name; private ...