首页 > Mathematica > Mathematica笔记

Mathematica笔记

2013年9月8日 发表评论 阅读评论


划横线:

用Ctrl+Shift+E展开Cell然后添加:
CellFrame->{{0, 0}, {0, 1}}
再用Ctrl+Shift+E缩起来,就可以搞出横线来啦


多位数分解成一位一位的:

IntegerDigits[158]

{1, 5, 8}

RealDigits 

反操作:FromDigits


给出二项式系数

Binomial[10, 3] = 120


Take:

取List中前n个数或后n个数或中间某n个数


DictionaryLookup:

英文词典根据正则表达式查找单词


Total:

对于一维List:所有元素之和

对于矩阵:同列求和


根据List来画三维图:

ListPointPlot3D[Table[Sin[j^2 + i], {i, 0, 3, 0.1}, {j, 0, 3, 0.1}]]


转为小写:

ToLowerCase


XXXXXQ:

判断是否为XXX数,例如:

PrimeQ[17] = True

EvenQ[17] = False

StringMatchQ


计算所有约数:

Divisors[18] = {1, 2, 3, 6, 9, 18}


For循环语句:

For[i = 0, i < 4, i++, Print[i]]


画离散的方格:

ArrayPlot


把文字,表达式转为图片,即栅格化:

Rasterize[x^2 + y^2, RasterSize -> 75, ImageSize -> 200]

得到写着x2+y2的图片


把图片翻转:

ImageReflect


矢量翻转:

Reverse


图片转为二值图像:

Binarize


获取图像的像素值:

ImageData


获取三维数组的元素:

d[[1 ;; 3, 1 ;; 5]]  =
{{{221, 139, 66}, {217, 135, 64}, {216, 136, 67}, {219, 139, 70}, {218, 138, 67}},
{{225, 140, 68}, {221, 137, 67}, {219, 138, 69}, {221, 141, 70}, {219, 139, 68}},
{{226, 138, 67}, {224, 138, 68}, {221, 138, 68}, {222, 140, 69}, {223, 141, 71}}}

d[[1 ;; 3, 1 ;; 5, 1]] =

{{221, 217, 216, 219, 218}, {225, 221, 219, 221, 219}, {226, 224, 221,222, 223}}


上一个答案:

%


由数组构造图片:

Image[
{{{221, 139, 66}, {217, 135, 64}, {216, 136, 67}, {219, 139, 70}, {218, 138, 67}},
{{225, 140, 68}, {221, 137, 67}, {219, 138, 69}, {221, 141, 70}, {219, 139, 68}},
{{226, 138, 67}, {224, 138, 68}, {221, 138, 68}, {222, 140, 69}, {223, 141, 71}}}, "Byte"]


数字转ASCII码:

FromCharacterCode

ASCII码转数字:

ToCharacterCode


Do语句:

Do[Print[n], {n, -3, 5, 2}]


Break语句;

Do[Print[i]; If[i > 2, Break[]], {i, 10}]


矩阵变成一维矢量:

Flatten  或去掉指定层数的{}


排序:Sort

Sort[{4, 1, 3, 2, 2}, #1 > #2 &]


清除变量或函数

Clear[]


画图论里面那种连通图

GraphPlot


连接字符串:

"abcd" <> "ABCD" <> "xyz"

StringJoin[{{"AB", "CD"}, "XY"}]


将图片或者表达式转为Mathematica代码:

InputForm[]


随机数:

整数:RandomInteger

实数:RandomReal

复数:RandomComplex

一个List的随机排序:RandomSample


展开成精确地数值表达形式{如果可以的话}

FunctionExpand[Cos[pi/17]]


绘制等高线:

ContourPlot


制作交互动画:

Manipulate[Plot[Sin[x (1 + a x)], {x, 0, 6}], {a, 0, 2}]

自动播放的动画:

Animate[Plot[Sin[x (1 + a x)], {x, 0, 6}], {a, 0, 2}]


&表明是个函数

#n:传进函数的第n个参数

/@:Map   代入

@@:Apply  @@左边那个函数直接作用域右边

/; :附加条件 


迭代计算:

Nest[(1 + #)^2 &, 1, 3] = 676

NestWhile[#/2 &, 123456, EvenQ] = 1929

NestWhile[Log, 100, # > 0 &] = Log[Log[Log[Log[100]]]]

NestWhileList[#/2 &, 123456, EvenQ] = {123456, 61728, 30864, 15432, 7716, 3858, 1929}


把式子转为只有小数形式

N[Log[Log[Log[Log[100]]]]] = -0.859384420389173


画出符合不等式的区域:

RegionPlot[x^2 + y^3 < 2 && x + y < 1, {x, -2, 2}, {y, -2, 2}]

RegionPlot[Sin[x] Sin[y] > 1/4, {x, -10, 10}, {y, -10, 10}, BoundaryStyle -> Dashed, PlotStyle -> Yellow]


查看单词信息:

WordData["fish"]


需找字符串中符合某种模式的部分:

StringCases["abcadcacb", "a" ~~ _ ~~ "c"] = {"abc", "adc"}

注:_表示一个字符,__表示任意多个

StringCases["abcadcacb", "a" ~~ x_ ~~ "c" -> x] = {"b", "d"}


正则表达式:

RegularExpression


List中挑出满足指定条件的数成为一个新的List

Select


字符串转化为单个字符:

Character


一行一行读取文件:

ReadList["e://aa.txt", String]


取第一或最后一个元素:

First

Last


找到频率最大的n个数(众数)

Commonest


表达式的部分由别的表达式来代替:

With

函数定义中使用with代替/.可以获得临时变量
w[x_] := With[{t = x + 1}, t + t^3] t就是临时变量


去掉List中的一些数(集合相减)

Complement


去掉重复元素

DeleteDuplicates


矩阵形式显示:

// MatrixForm

// TableForm


前面添加一个元素:

Prepend

尾部添加一个元素:

Append

中间插入:

Insert


展开表达式:

Expand

因式分解:

Factor


上一个结果中的值直接代换:

% /. x -> y


多项式拟合:

InterpolatingPolynomial


三维隐函数画图:

ContourPlot3D


返回小数部分:

FractionalPart

整数部分:

IntegerPart


播放指定乐器指定时间的单音:

Sound[SoundNote["G", 1, "Violin"]]

读出句子:

Speak["hello"]

播放正弦曲线那种构成的声调:

Play


按钮及其相应函数:

Button["press me", Speak["thank you"]]


矩阵倒置:

Transpose

or ESC tr ESC


矩阵求逆:

Inverse

方阵求值:

Det


根据给定约束条件重新化简表达式:Refine

Refine[Sqrt[x^2], x > 0] = x


生成等差序列:

Range


定义函数时对参数做约束:

kk[n_ ?  EvenQ] := 2*n;

dd[n_ /; n > 0] := 2*n;

ff[n_ ? (# > 3 &)] := 2*n;


圆周移位:

RotateLeft


返回元素在List中的位置:

Position


删除指定位置的部分元素:

Drop


获取矩阵维数:

Dimensions[]


统计个数:

BinCount


卷积:ListConvolve

如果要实现matlab里面conv的结果,则要ListConvolve[a,b,{1,-1},0];


不动点:

FixedPoint[f,expr]

e.g.FixedPoint[(# + 2/#)/2 &, 1]


按照特定函数生成List:

Array[f,n] = 生成长度为 n、元素为 f[i] 的列表,i = 1,2,3,4,5,6,7

也可生成矩阵


自定义运算:

(a_⊕b_):=.....

⊕输入方法:ESC C+ ESC


稀疏矩阵输入:

SparseArray:只需指定部分位置的数,其余值默认

s = SparseArray[{i_, i_} -> y, {3, 3}, x] // MatrixForm

s = SparseArray[{{i_, i_} -> -2, {i_, j_} /; Abs[i - j] == 1 -> 1}, {5, 5}] // MatrixForm


幂级数(泰勒级数)展开:

Series[f[x], {x, a, 3}]


相等:

SameQ  === 表达式也要完全相同

Equal == 值相等


定义函数默认参数:

f[n_:4] := ..


List用某些数来填充List使其达到特定长度:

PadLeft

PadRight

ArrayPad

ImagePad


阶跃函数:UnitStep

克罗内克函数:KroneckerDelta

冲击函数:DiracDelta    广义函数

方波函数:UnitBox


积分运算时可以添加条件:

Integrate[x^n Exp(-x^2), {x, -∞, ∞]}, Assumptions →n >= 0]


Matlab中的stem:

DiscretePlot


一定范围的质数的数目:

PrimePi


While函数:

n = 1;
While[n < 4, Print[n]; n++]


找出符合条件的数:

TakeWhile

LengthWhile返回的是TakeWhile的数量(长度)


指定条件替换:

{6, -7, 3, 2, -1, -2} /. x_ /; x < 0 -> w

/.表示替换

/;表示条件(Condition)


获取用户输入:

Input


FFT:

Fourier

注意!!{  Fourier[a]*Sqrt(Length[a])  }*  才等于Matlab中的FFT函数


对每一个数调用函数f:

Scan


定义参数时使用x__可以不定长  

具体参见BlankSequence


下角标:

Subscript


画图论里面的那些图:

Graph


矢量操作:

Grad

Div

Laplacian

Curl

这些函数使用之前要先:Needs["VectorAnalysis"]


计算保持更新:

Dynamic[x^2]

以后你x改成不同的值,这个计算的结果也会相应地改变


计算函数的最小值和取最小值的位置:

Minimize

无数值解时就用:NMinimize

搜索局部最小值:FindMinimum

MinValue值算出最小值

ArgMin是算出最小值的位置


化简不等式或者消除一个变量:

Reduce

也可用于解不等式:

Reduce[。。。 && 。。。,{x,y}]


播放Wav格式:

a = Import["aa.wav","Data"]

ListPlay[a,SampleRate->44100];


表达式的福利叶变换:

FourierTransform[f,t,w,FourierParameters -> {1, -1}]

 FourierParameters->{a,b}.{a,b} 的一些普通选择是 {0,1} (缺省), {-1,1} (数据分析), {1,-1} (信号处理). 


解方程,求根:

Solve

NSolve

Roots

Reduce

FindRoot


数据类型:

Head


全组合:

Tuples


检测是否是List中一个元素:

MemberQ


矢量变成矩阵:

Partition


计算投影:

Projection


获取对角线上的元素:

Diagonal

构造对角矩阵:

DiagonalMatrix


直接获得旋转矩阵:

RotationMatrix[theta] // MatrixForm


特征值&特征向量:

Eigenvalues

Eigenvectors


全微分:Dt

偏导:D[f,x]

D[f[x], x] /. x -> 0.5

二阶导数:f''[x]


表达式的卷积运算:

Convolve[DiracDelta[x], f[x], x, y]


归一化:

Normalize


强力化简表达式:

FullSimplify


数值积分:

NIntegrate


复数实部虚部共轭:

Re

Im

Conjugate


微分方程求解:

DSolve

数值解:

NDSolve


根据数组递归公式求解通式:

RSolve


根据递归函数求解出一个List:

RecurrenceTable


求解矩阵的线性方程:

LinearSolve

LeastSquares


3D画出区域图:

RegionPlot3D


用给定的带参数的表达式去拟合曲线(点),求解出参数的最优解:

FindFit


线性规划问题求解:

LinearProgramming


通式绘制多幅图像:

Show

g1 = Plot..
g2 = Plot...
Show[g1,g2...]

Show[Graphics[Table[.....]]]


根据分布算期望值:

Expectation

NExpectation


根据分布计算某函数成立的概率:

Probability

NProbability


根据分布产生随机数:

RandomVariate[NormalDistribution[]]


绘制统计图:

Histogram

e.g.Histogram[RandomVariate[NormalDistribution[0, 1], 20000]]

平滑的统计图:SmoothHistogram[RandomVariate[ExponentialDistribution[1/2], 500]]

3D版:Histogram3D

两个不同分布画于同一图并用不同颜色区分:

Histogram3D[{data1, data2}]

SmoothHistogram3D


已知比例画饼状图:PieChart

已知比例画条形图:BarChart

Excel那种3维条形图:BarChart3D


画图样式请查看:

guide/GraphicsOptionsAndStyling


具有数值动态更新的模块:

DynamicModule


定位器的使用:

Locator


画二维三维等立体图形等符号图形语言,

请参照guide/SymbolicGraphicsLanguage


Plot画图时添加Tooltip可以获取曲线的提示


分Tab画图:

TabView


制作幻灯片式的放映:

SlideView


点击式切换放映:

FlipView


滚动选择条切换放映:

MenuView

PS:PopupMenu


可以打钩的框:

Checkbox

RadioButton


点击表达式即可切换式子:

Toggler


通过设置一个按钮,改变表达式中某个东西的值

Setter

设置多个值时用:SetterBar


对绘制的图按Ctrl+D可以使用绘图工具继续编辑


获取时间:

Clock


图像处理函数库请参照:

guide/ImageProcessing


按列显示:

Column[{1, 12, 123, 1234}, Center]


获取全部变量定义:

Names["Global`*"]


清除全部变量:

Clear["Global`*"]


属于符号:

ESC el Esc

化简表达式时可用x∈Reals

Simplify[Re[a+b*I],a[Element]Reals]. 


常用绘图设置选项:

PlotStyle 用什么样方式作图(颜色,粗细等)
PlotLabel 给图形加上标题
AxesLabel 给坐标轴加上名字
Ticks 刻度
AxesOrigin 设置坐标原点

填充图形与坐标轴之间的区域:

Plot[x^2, {x, 0, 2 [Pi]}, Filling -> Axis]


散点图连线:

ListLinePlot


参数图:

ParametricPlot[{fx,fy},{t,tmin,tmax}] 

绘制多幅:

ParametricPlot[{fx,fy},{gx,gy},….{t,tmin,tmax}]


显示文本:

Text[x^2 + y^2 < 1, {0, 0}]


多附图矩阵显示:

GraphicsGrid[Table[Plot[Sin[i*j*x], {x, 0, 2 [Pi]}], {i, 2}, {j, 3}]]


绘制表格:

Grid[{{a, b, c}, {x, y^2, z^3}}, Frame -> All]


三维作图关闭阴影,变成纯线条:
Shading->false

关闭着色:
Lighting->False


三维参数图:

ParametricPlot3D[{fx,fv,fz},{t,tmin,tmax}]   线

ParametricPlot3D[{fx,fv,fz},{t,tmin,tmax},{u,umin,umax}]    面


交换x和y值:

{x,y}={y,x} 

不用逗号的话要用矩阵形式输入   ctrl+.


函数定义:

Function[3 + #][x]
(3 + #) &[x]
x // #+3 &
#+3 & /@ x


## 表示提供的所有参数的序列
f[##] &[a, b, c, d] === f[a, b, c, d]

## n 表示从数字 n 开始的参数
f[##2] &[a, b, c, d] === f[b, c, d]

#0 表示整个纯函数
f = If[#1 == 1, 1, #1 #0[#1 - 1]] &[3] 计算3的阶乘


输入快捷键:

Ctrl+. 选择下一层子表达式
Ctrl+% 来回切换互补的位置
按 Tab 键选择下一个占位符.
Shift 和 Tab 键,选择前一个占位符
Ctrl 和 Space 移动光标到下一个更高层的子表达式.
Ctrl+, 行向量下一个数
ctrl+enter 列向量下一个数
上标 ctrl+&
底标 ctrl+$


取List最后n个数:

a[[-n;;]]


常用获取文件数据方式:

data = Flatten[Import["aa.txt", "Data"]];


改变List大小:

Partition[Join[a],n1]
Partition[a,{n1,n2}]


//.      重复迭代,知道不再变化为止


打开函数模板:

Ctrl+Shift+K


计算运行时间:

Timing


Sow Reap 函数用于提取迭代过程中的中间结果


匹配替换:
{1, x, x^2, x^3} /. x^n_ -> r[n]
另外,Mathematica 中的模式只与由 FullForm 给出的表达式的完全形式进行匹配. 因此,例如,1/x 的完全形式是Power[x,-1],它与模式 x_^n_ 匹配,但不能与模式 x_/y_ 匹配,因为 x_/y_ 的完全形式是Times[x_,Power[y_,-1]]. 另外,"可选变量与默认变量" 将讨论用户如何构造对所有情况都匹配的模式.


元素匹配:

Cases[list,form] 给出与 form 匹配的 list 中的元素
Cases[{3, -4, 5, -2}, x_ /; x < 0]

Cases[expr,lhs->rhs] 在 expr 中寻找与 lhs 匹配的元素,并对其进行变换
In[3]:= Cases[{3, 4, x, x^2, x^3}, x^n_ -> n]
Out[3]= {2, 3}


_ 任何表达式
x_ 命名为 x 的任何表达式
x:pattern 与 pattern 匹配的名为 x 的表达式

In[2]:= f[a^b] /. f[x : _^_] -> p[x]
Out[2]= p[a^b]
In[3]:= f[a^b] /. f[x : _^n_] -> p[x, n]
Out[3]= p[a^b, b]


常用表达式的模式:
x_h 具有头部 h 的表达式
x_Integer 整数型
x_Real 实数型
x_Complex 复数型
x_List 列表型
x_Symbol 符号型
Complex[x_,y_] 复数 x+iy
Complex[x_Integer,y_Integer] 实部和虚部均为整数的复数
(r_Rational|r_Integer) 有理数或整数 r
Rational[n_,d_] 有理数 n/d
(x_/;NumberQ[x]&&Im[x]==0) 任何形式的实数
(x_/;NumberQ[x]) 任何数
x_+y_ 两项或多项的和
x_+y_. 单项或多项的和
n_Integer x_ 有一个整数因子的表达式
a_.+b_. x_ 线性表达式 a+bx
x_^n_ x^n 其中 n!=0,1
x_^n_. x^n 其中 n!=0
a_.+b_. x_+c_. x_^2 线性项系数非零的二次表达式
x_List 或 x:{___} 一个列表
x_List/;VectorQ[x] 没有子列的向量
x_List/;VectorQ[x,NumberQ] 数值向量
x:{___List} 或 x:{{___}...} 集合的列表
x_List/;MatrixQ[x] 没有子列的矩阵
x_List/;MatrixQ[x,NumberQ] 常数矩阵
x:{{_,_}...} 元素对的集合


函数多个默认值可以用Option封装


重复模式:

.. Repeated

In[1]:= Cases[{f[a], f[a, b, a], f[a, a, a]}, f[a ..]]
Out[1]= {f[a], f[a, a, a]}

在这一定义中,所有对的第二个元素必须相等.
In[6]:= vn[x : {{_,; n_} ..}] := Transpose[x]
应用上面的定义.
In[7]:= vn[{{a, 2}, {b, 2}, {c, 2}}]
Out[7]= {{a, b, c}, {2, 2, 2}}


调用函数时记录下曾经计算的结果,下次调用可以加速

f[x_] := f[x] = f[x - 1] + f[x - 2]


修改内部函数要先用Unprotect


Block:

用局部值计算一个表达式,可以用于计算临时式子,结果不会被放入全局变量


字符串连接:Subscript[s, 1]<>Subscript[s, 2]<>[Ellipsis] 或 StringJoin[{Subscript[s, 1],Subscript[s, 2],[Ellipsis]}] 

给出一个串中的字符数:StringLength[s] 

颠倒串中字符的顺序  :StringReverse[s] 


Characters["string"] 将字符串转换为一个字符列表
DigitQ[string] 测试串中的所有字符是否是数字
LetterQ[string] 测试串中的所有字符是否是字母
UpperCaseQ[string] 测试串中的所有字符是否是大写字母
LowerCaseQ[string] 测试串中的所有字符是否是小写字母

StringReplace
StringReplace["abcd abcd", "b" | "c" -> "X"]

In[4]:= StringReplace["abc abcb abdc", "ab" ~~ _ -> "X"]
Out[4]= "X Xb Xc"

In[11]:= StringSplit["a:b;c:d", ":" | ";"]
Out[11]= {"a", "b", "c", "d"}


字符串中提取数字:

StringCases["a6;b23c456;", DigitCharacter]
StringCases["a1=6.7, b2=8.87", NumberString]
StringCases["a1=6.7, b2=8.87",v : WordCharacter .. ~~ "=" ~~ x : NumberString -> {v, x}]


忽略大小写:

StringReplace["The cat in the hat.", "the" -> "a", IgnoreCase -> True]


匹配字符串时:

Overlaps->All 包含所有重叠
Overlaps->True 包含在每个位置开始的至多一个重叠
Overlaps->False 不包含所有重叠


ASCII和字符串互转:

In[1]:= ToCharacterCode["ABCD abcd"]
Out[1]= {65, 66, 67, 68, 32, 97, 98, 99, 100}
In[2]:= FromCharacterCode[%]
Out[2]= "ABCD abcd"


正则表达式:

c 字符 c
. 除了换行以外的任意字符
[SubscriptSubscript[Ellipsis]] 任意字符 Subscript
[Subscript-Subscript] 在范围 Subscript[Dash]Subscript 内的任意字符
[^SubscriptSubscript[Ellipsis]] 除了 Subscript 外的任意字符
p* 重复零次或多次的 p 
p+ 重复一次或多次的 p 
p? 出现零次或一次的 p
p{m,n} 重复 m 次和 n 次之间的 p 
p*?, p+?, p?? 匹配的最短一致字符串
p*+,p++, p?+ 所有格匹配
(Subscript[p, 1]Subscript[p, 2][Ellipsis]) 与序列 Subscript[p, 1], Subscript[p, 2], [Ellipsis] 匹配的字符串
Subscript[p, 1]|Subscript[p, 2] 与 Subscript[p, 1] 或 Subscript[p, 2] 匹配的字符串
\d 数字 0[Dash]9 
\D 非数字
\s 空格,换行,tab或其它空格字符
\S 非空格字符
\w 单词字符 (字母,数字,或者 _)
\W 非单词字符
[[:class:]] 位于命名类中的字符
[^[:class:]] 不位于命名类中的字符
^ 字符串(或者行)的开头
$ 字符串(或者行)的末尾
\ A 字符串的开头
\ z 字符串的末尾 
\ Z 字符串的末尾(首先允许单个换行字符)
\ b 词边界
\ B 除了词边界的任何位置

字符串匹配规则:

"string" 由字符组成的字符串
_ 任意单个字符
__ 具有一个或多个字符的任意子串
___ 具有零个或多个字符的任意子串
x_, x__, x___ 给定名称 x 的子串
x:pattern 给定名称 x 的模式
pattern.. 重复一次或多次的模式
pattern... 重复零次或多次的模式

{Subscript[patt, 1],Subscript[patt, 2],[Ellipsis]} 或 Subscript[patt, 1]|Subscript[patt, 2]|[Ellipsis] 与至少一个 Subscript[patt, i] 匹配的模式

patt/;cond cond 等于 True 的模式
pattern?test 对每个字符 test 等于 True 的模式

匹配高亮字符创实例:

SeedRandom[12345]; dna = StringJoin[Table[{"a", "c", "g", "t"}[[RandomInteger[{1, 4}]]], {1000}]]
StringReplace[dna,x:("ag" ~~ _ ~~ _ ~~ "t" ~~ _ ~~ "ca") :> "!(*StyleBox["" <> x <>
"",FontColor->RGBColor[1,0,0],FontSize->18,FontWeight->"Bold"]$$"]


List画图中标记某些点:

data = Table[{i, RandomReal[i]}, {i, 10}];
ListLinePlot[data,
 Epilog -> {PointSize[Medium],
   Point[Select[data, #[[2]] == Max[data[[;; , 2]]] &]]}]

List画图插值拟合:

InterpolationOrder -> 2


图像标记箭头:

Plot[Sin[x], {x, 0, 2 Pi},
 Epilog -> {Arrow[{{Pi, 0}, {3 Pi/2, 1/2}}],
   Text["Zero", {3 Pi/2, 1/2}, {-1, -1}]}]

List画图标记最大值点:

data = Table[{i, Sin[i]}, {i, 0, 10, 0.01}];
ListLinePlot[data,
 Epilog ->
  Function[Bias, {PointSize[Large], Point[#], Arrow[{#, # + Bias}],
       Text[Style[#, Large, Bold, Red], Flatten[# + Bias
         ], {-1, 0}]} & /@
     Select[data, #[[2]] == Max[data[[;; , 2]]] &]][{2, 0}],
 PlotRange -> {-1, 2.5}]

Plot画图标记最大值点:

Function[{f, x, xmin, xmax},
  Plot[f, {x, xmin, xmax},
   Epilog ->
    Function[
      Bias, {PointSize[Large], Point[#], Arrow[{#, # + Bias}],
           Text[Style[#, Bold, Red], Flatten[# + Bias
             ], {-1, 0}]} & /@ {{x /. Last[#], First[#]}} &[
       Maximize[{f, x <= xmax, x >= xmin}, x]]][{2, 0}],
   PlotRange -> {-1, 1.5}]][Sin[t], t, 0, 4]



读取文件数据模板:

data = Import[
   "C:\Documents and 
Settings\Administrator\桌面\20130917实验数据\10j_0.5m_0.5m\10j_05m_05m_
2.txt"];
data1 = StringCases[data,
  (x : (("-" | " ") ~~ DigitCharacter ..)) ~~
     "." ~~ (y : (DigitCharacter ..)) ~~
     "e" ~~ (z : (("" | "-") ~~ DigitCharacter ..)) ->
    x ~~ "." ~~ y ~~ "*10^" ~~ z];
temp1 = InputForm[data1];
d = ToExpression[temp1[[ ;; ]][[1]]];
ListLinePlot[d, PlotRange -> All]

全排列:

Permutations


计算累加和:

FoldList[Plus, 0, {a, b, c, d}]


计算子集全排列:

Subsets


冒泡排序法动画化:

Module[{len, t, a, res = {}}, a = RandomSample@Range@15;
 len = Length[a];
 Do[Do[If[a[[j]] > a[[j + 1]], ( {
       {a[[j]], a[[j + 1]]}
      } ) = ( {
       {a[[j + 1]], a[[j]]}
      } )];
   AppendTo[res, a], {j, 1, len - i}], {i, 1, len - 1}];

 ListAnimate[
  BarChart[#, ChartStyle -> "Pastel",
     ChartLegends -> ToString /@ #] & /@ res]]

带边框,字变色的乘法表:

Grid[#, Spacings -> {0.5, 0.2}] &@
 Table[Style[Row[{j, "[Times]", i, "=", i j}, Frame -> True], Bold,
   ColorData["BrightBands"][j/9]], {i, 9}, {j, i}]

计算24点:

calc24[ls_] :=
  Block[{ok, fmt},
   fmt = {"((``````)````)````", "(``````)``(``````)",
     "(````(``````))````", "````((``````)````)", "````(````(``````))"};
   ok[fmt_, L_, op_] :=
    If[ToExpression@ToString@# == 24, Print[#, "=", 24]] &@
       StringForm[fmt, ##] & @@ Riffle[L, op];
   Do[ok[#, ls, op] & /@
      fmt, {op, {"+", "-", "*", "/"}~Tuples~3}] //
    Quiet];

(*Test---------------------*)

calc24~Scan~Permutations@{3, 3, 8, 8}

计算组合:

Tuples


计算运行时间:

//Timing


屏蔽提醒信息:

// Quiet


格式化字符串:

StringForm


字符栅格化:

Rasterize


获取常用汉字列表:

Flatten[Table[
FromCharacterCode[{i, j}, "CP936"], {i, 160 + 16, 160 + 55}, {j, 161, 254}]]

图像缩放:

ImageResize[#, Scaled[1.4]] & /@ img


Gif导出:

Export["e://aa.gif", {Table[
 Plot[Sin[x + n], {x, 0, 2 [Pi]}], {n, 0, [Pi], 0.1}]}, "gif"]

高斯噪声:

RandomVariate[NormalDistribution[0, 0.3], 1]


Import导入中文:

后面加:CharacterEncoding -> "CP936"


发QQ邮件:

SendMail["UserName" -> "XXX@qq.com", 
 "From" -> "XXX@qq.com", "To" -> "XXX@XX.com", 
 "Subject" -> "XXXX", 
 "Body" -> {"XXXXXX", Plot[Sin[x], {x, 0, 10}]}, 
 "Server" -> "smtp.qq.com", "PortNumber" -> 465, 
 "PassWord" -> Automatic, "EncryptionProtocol" -> "SSL"]

弹出对话框:
MessageDialog


默认输出矩阵格式:

$PrePrint = Replace[#, mat_?MatrixQ :> MatrixForm[mat]] &

自定义函数如果参数数目错误,也会像系统函数一样标红:

SyntaxInformation[f] = {"ArgumentsPattern" -> {_, _}};

用ctrl+[输入[[:
在Mathematica\8.0\SystemFiles\FrontEnd\TextResources\Windows中找到:KeyEventTranslations.tr
在后面添加:

Item[KeyEvent["[", Modifiers ->{Control}],FrontEndExecute[{FrontEnd`NotebookWrite[FrontEnd`InputNotebook[],"\[LeftDoubleBracket]", After]}]],
Item[KeyEvent["]", Modifiers -> {Control}],FrontEndExecute[{FrontEnd`NotebookWrite[FrontEnd`InputNotebook[],"\[RightDoubleBracket]", After]}]],

Item[KeyEvent["[", Modifiers ->{Control}],FrontEndExecute[{FrontEnd`NotebookWrite[FrontEnd`InputNotebook[],"\[LeftDoubleBracket]", After]}]],
Item[KeyEvent["]", Modifiers -> {Control}],FrontEndExecute[{FrontEnd`NotebookWrite[FrontEnd`InputNotebook[],"\[RightDoubleBracket]", After]}]],


创建进度条,显示计算进度:

progress = 0;
CreatePalette[Dynamic@ProgressIndicator[progress]]
Dynamic@ProgressIndicator[progress]

设置笔记本背景颜色:

SetOptions[$FrontEnd, Background -> RGBColor[255, 255, 255]]
SetOptions[$FrontEnd, Background -> None]

【完】

本文内容遵从CC版权协议,转载请注明出自http://www.kylen314.com

分类: Mathematica 标签:
  • 给力啊,整理的很全了!如果能做一下分类就更好了。另外,“去掉重复元素”应该是这个函数:DeleteDuplicatesUnion取并集后,会重排元素的顺序。

    • 我这里的各种语言的笔记全都是自己遇到的时候临时补充的,所以分类很难,其实一点都不全。谢谢指出。Union放在那么前面,看来是我刚学Mma的时候记的。

      • 感觉挺全了,常用的也就这些。要用到其它的也好查,一般都是全拼。

        • 以前都是把博客当做网络记事本来用,遇到就加上。

  • 路人甲

    你好。有些问题请教下。定义函数默认参数:没看懂,能给个例子吗,怎么用的。算24点的看不懂,那个Do循环的循环次数是多少?谢谢

    • 默认参数:f[n_: 3] = n^2f[]f 你运行一下就知道了

  • 路人甲

    而且24点的代码我执行了没反应

    • 24点那个我忘了之前是怎么回事了,等我晚些有空再看看。。你可以运行一下这个:calc24[numList_] := Block[{fmtList, opList, ok}, fmtList = {"((``````)````)````", "(``````)``(``````)", "(````(``````))````", "````((``````)````)", "````(````(``````))"}; opList = {"+", "-", "*", "/"}~Tuples~3; ok[fmt_, nums_, ops_] := With[{expr = StringForm[fmt, ##] & @@ Riffle[nums, ops]}, If[ToExpression@ToString@expr == 24, Print[expr, "=", 24]]]; Do[ok[fmt, numList, op], {op, opList}, {fmt, fmtList}] // Quiet];(*Test---------------------*)calc24~Scan~Permutations@{3, 3, 8, 8}

    • 我查了一下原因,好像之前不知道为什么拷过来的时候乘号变成了[Times],除号变成了[Divide],已修正。

      • tcya

        soga。那个fmt的穷举感觉不够理想。博客很好,我有很相似的爱好,就是在动画的口味上有点小同大异233

        • 这个我是收集别人的,我自己以前c++写过一个自动合并相同解的24点。你喜欢看啥的?

          • tcya

            看的远没你多。最喜欢的大概是银魂灌篮和星际牛仔了。宅的这些年确实有些作品让我觉得不错,但渐渐觉得平均来说动画确实比较幼稚,脱宅中哈哈

            • 本科还看得多,现在越看越少。。等来年工作估计我也。。

              • tcya

                恩。不过偶尔翻看下ab站的收藏夹,依然燃的燃催泪的催泪,这就够了。。

  • tcya

    我现在有这样个操作:{a,b,c,d}=Flatten/@{a,b,c,d}就是想把他们每个都flatten了。但这样写很累赘,尤其需要操作的个数比较多的时候就会变得很长。。想写成类似#=Flatten&?%#/@{a,b,c,d}酱,但试不出来。因为#在等号左边他好像就不会代入,有什么好想法么

    • 首先,我个人认为这种做法不是太好,因为你完全可以用一个变量来表示{a,b,c,d},然后每次取值只要进行索引就可以了。。然后,如果你真要这么做,我能想到的方法比较猥琐(我对你的问题的理解是:你只想写一遍a,b,c,d而已):k = "{a,b,c,d}";ToExpression[k ~~ "=Flatten/@" ~~ k];这样确实可以修改a,b,c,d的值。。或者你研究一下HoldForm和ReleaseHold这两个函数,我用的不多,不是很清楚可不可以实现你想要的。。

      • tcya

        因为abcd除了都需要flatten一下,其实不是太有关系的东西,所以没放一块。那看来我就还是照原来那样写吧,虽然长,但好理解,你这写法过几个月我自己都不知道是啥意思了。。谢啦