Mathematica学习笔记001
基本操作
执行计算:Shift+Enter
终止计算: Alt + 句号
?后输入函数名,然后Shift(Enter),得到对该函数的说明
如果对函数名拿不准,还可以用上通配符(*)
%表示上一个输出;%i表示编号i的输出
下标 ctrl+_
平方根 ctrl+@
点积(点乘) ctrl+.
大于等于 Esc >= Esc
积分 Esc int Esc
并集 Esc un Esc
结尾加分号,表示计算,但不输出结果——用于保留过程值
内置函数都是首字母大写,且参数都是放在方括号中:
非常著名的绘图函数:Plot[函数,{x,min,max}]
Factor[x^5-1] 因式分解
{a,b,c}(ctrl+.){x,y,z}结果为ax+by+cz
List用{.., ...}表示
求积分:Integrate[Cos[x],{x,a,b}]
2 基本概念
2.1 表达式
Mathematica中一切皆表达式(Expression,expr),正如Java中一切皆对象。
Head[expr]:返回expr的头信息,可能是整数、有理数、实数、复数...加法、函数、List。
AtomQ[expr]:测试是否是元表达,比如String、复数是Atom
FullForm[]:可以看到一个表达式在Mathematica内部是如何组成的 --> 相关函数:HoldForm[], Attributes[]
TreeForm[]:可以获得更清晰的expr组成
Part[]:对于不是Atom的表达式,可以输出其组成部分,第二参数0,输出Head,也可以用expr[[n]]来简化表达
为了推迟计算参数,可以用HoldForm[]再包裹一层,或者用Evaluate@Table,或者Defer[]
用FullForm展开表达式可以了解Mathematica是如何看待表达式的,它肯定有内在的规则,你可以试试这两个表达式,看看结果是不是你想象的。(x^2+y)*z/w 和 (a/b)
2.2 定义(definitions)
定义一个变量用=
?变量名:查看一个变量
定义一个函数,用这样的规则 f[x_, y_]:=1/(x+y) —— 注意左边变量后的下划线,注意冒号加等号的表达(因为这可以看作是一种延时赋值,解释见下)
可以存在f[x_], f[x_, y_] 即函数名相同,参数数量不同,Mathematica不会混淆
Clear[]: 清除变量或函数的定义
立即赋值与延时赋值(=/:=,Set[]/SetDelayed[]),延时赋值会在变量每次使用时才去赋值(特别适用于做随机数的时候)
如果使用立即赋值(=),等式右边会首先计算出数值,即等式右边不能有未确定的值;另外注意行末尾的;也可以使该行先不计算
2.3 布尔值
PrimeQ[], EvenQ[], OddQ[]
IntegerQ[],
NumericQ[]
NumberQ[]:检查参数是否是个显式表达的数值(也即Head值是Integer,Rational,Real,Complex),Pi会返回False,因为它是个Symbol
Equal(==):注意是两个等号
Unequal,GreaterEqual,LessEqual
bitwise logical operator
BitAnd[], BitOr[], BitNot[], BitXor[]
BaseForm[数字,进制]
2^^1001,表示二进制的数1001
2.4 属性(attributes)
Attributes[]
SetAttributes[]
ClearAttributes[]
3 Lists
3.1 创建、显示和基本操作
可以用List[]或{..., ...}来构建list,Mathematica对List中元素类型不限制,可以嵌套list
还可以用Range[min, max, step]、Table[expr, {i, min, max, step}]构建List
Table[i+j, {i..}, {j..}] 可以构建多重循环,可视为:
for i=...
for j...
i+j
所以j决定每组有多少个元素,i决定有几组
也就说明了Table还可以这样玩:Table[i+j, {i,1,4}, {j,1,i}]
Table[2^p-1, {p,{2,3,5,7,13,17}}] (*只有这样才能确定p的位置,同时p的实际值来源于一个list)
更高阶的构建list的方法还包括:Array, ConstantArray, SparseArray
Sort[] 排序
可以用不同方式显示list,MatrixForm[],TableForm[],Grid[],TreeForm[]
Array[Greater, {4, 4}] // MatrixForm
3.2 list的结构
Postion[list, target], 确定目标在list中出现的位置
Count[list, target], 确定目标在list中出现的次数
MemberQ[list, target],确定目标是否出现在list中
Free[list, target],目标是否没在list中,上一个函数取反
Length[list],返回列表长度
Dimensions[list],显示list的层级结构
3.3 对list的操作
1.取出list中指定位置的元素,实质上用的Part[list, numIndex], 简化方式是list[[numIndex]]
其中:1)索引从1开始编号,很直观;2)如果取多个数numIndex本身也可以是个关于元素位置的list,其中的元素不需要连续
基于上述2),可以用Range[lowIndex, highIndex]来取出连续的多个元素,定影的简化写法是list[[low;;high]]
2. 多维数组依然可以通过[[x,y,z]]来取数,其中y,z的位置可以用All,如果忽略,则默认该位置为All
3. Take[list, num]表示取出num个函数
num可以为负数(表示从后向前),
可以为2个数的list,表示取一部分
可以为3个数的list,表示{first, last, step}
4. Drop[list, num]表示去掉开头num个元素;num为负数时表示去掉结尾num个数,num为两个数的list时,表示去掉一段数
5. Delete[list, index]表示删除index元素,对多个进行操作时,第二个参数写成{{index1},{index2}}
6. First[], Last[],
Rest[](*除了第一个*)
Most[](*除了最后一个*)
关于list的排列
Sort[list]
Sort[list, Greater], 大者在前(默认为大者在后,升序)
SortBy[mutiDimensionList, Last] (默认为以第一个元素排序)
Reverse[list]
RotateLeft[list, n]
RotateRight[list, n]
Partition[]分组形成新的list
Transpose[]转置
Append[list, v] 加在最后
Prepend[list, v] 加在最前
Insert[list, v, index]
ReplacePart[list, v, index]
Flatten[list] 把嵌套的list变成一维
Flatten[list, num] 减少num级嵌套
对多个list的操作
Join[list1, list2] 把多个list合成一个
Union[list1, list2] 合集 (也可以用于单独的list,此时就是把list去掉重合元素)
Intersection[list1, list2] 交集
Complement[list1, list2] 仅出现在list1中的元素
DeleteDuplicates[] 去重但不改变顺序,上述的几个函数会重新排序
Join[{header},data] 或者 Prepend[data, header]
注意要在Join中给header加个{}
通过Dimensions[header和data]就能发现这样做的意义
索引
可以在WMDC(Wolfram Mathematica Document Center,也就是其帮助文档)中搜索的索引:
Using a notebook interface:如何用Notebook记笔记
Entering Two-Dimensional Input:如何直接输入漂亮的数学公式
Evaluation and Evaluation of Expressions:Mathematica如何分析和计算
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具