MATLAB基础+进阶
一、简介与基础知识
matlab是Matrix Labratory的缩写。
开放式程序设计语言,用于高性能工程计算。
基础的数据单位是没有维数限制的矩阵。
-
系统
-
桌面工具和开发环境
-
数学函数库(包含大量计算算法)
-
语言(高级的基于矩阵/数组的语言,面向对象编程)
-
图形处理(可视化)
-
外部接口
-
-
界面
- 工作区:存放变量,方便debug
- 命令行窗口:一些命令
- 历史记录窗口:布局里找到历史记录停靠,或者按向上的键
clc :清空命令行窗口(不是清空历史记录!!!)
clear:清空工作区(工作区里的变量)
-
帮助系统
- help+函数名
- helpwin 联机查找
- lookfor+函数的信息
- 内存变量列表:who(可以直接看工作区)
- 内存变量信息:whos(可以查看数据类型)
- 目录中的文件列表:what
- 确定文件位置:which
- 变量检验函数:exist
-
MATLAB命令
-
指令输入符 >> 自动输入 表示处于准备就绪状态
-
避免中文输入,同其他语言
-
对格式要求还比较严格 eg:sin()是弧度制
-
符合逻辑,变量必须在在调用前已存在
-
不要用ans命名变量,没有设置接收的变量,会自动存在ans下
-
-
MATLAB功能符号
-
%注释标记
-
=赋值标记
-
; 可以不让MATLAB每次都显示运算结果
-
…续行号
-
数据不用使用者声明类型
-
-
MATLAB命令(最常用的2个)
- clc:清除命令行,只是清除可见的部分
- clear:清除内存变量
-
MATLAB数据类型
-
数字、字符串、向量、矩阵、单元型数据及结构型数据
-
矩阵是MATLAB语言中最基本的数据类型,本质上讲就是数组。
-
不需要事先对所使用的变量进行声明
-
命名规则和C语言类似
-
ans:默认变量
-
pi:圆周率
-
inf:无穷大
-
i:虚数单位
-
指数形式E/e aEb都不能省
-
复数形式
-
二、MATLAB数据类型与运算符
-
MATLAB数据类型
控制显示格式:format short/long等等,只改变显示值,不改变存储的值
-
MATLAB运算符
-
.*点乘
-
^算术乘方
-
.^点乘方
-
MATLAB的除法比较特殊,左除和右除不太一样
-
~=不等于(与C语言不同)
-
~逻辑非
-
xor逻辑异或(与C语言不同)xor(x,y)
-
逻辑运算符的优先级最弱
-
三、MATLAB函数计算、向量生成与计算
-
函数运算
-
复数运算工具
abs:模
angle:复数的相角
conj:复数的共轭
real:求实部
imag:求虚部
-
三角函数/反三角函数
sin/asin
cos/acos
-
-
MATLAB向量
近似看成矩阵
向量的生成:
-
直接输入法
向量元素用[ ]括起来
元素之间用空格、逗号或者分号分隔(分号表示一行的结束)
空格、逗号生成行向量;分号生成列向量
-
冒号法
起始:步距:结束(不写步距时,默认为1)
x=0:10
x=0:2:10
-
利用linspace创建向量
linspace(first_value,last_value,number)
x=linspace(0,10,5)
-
利用logspace创建对树分隔的向量
logspace(first_value,last_value,number)
logspace(1,3,3)%从10first_value到10last_value包含number个数据元素[10,100,1000]
向量的引用:
-
x(n)
第n个元素,matlab中是从1开始的,而C语言是从0开始的
拿出来可以单独赋值
-
x(n1:n2)
n1:n2表示一个向量,从n1到n2
为了得到有间隔的数
可以用x(n1:2:n2),表示取出x中从n1到n2的步距为2的数
-
x([ ])
按向量[ ]中的序号,向量x中取出相应的数据
x([ 5,1,10 ])
-
组合
将向量拼接起来再使用
y=[2:5 [6,2,11]]
x(y);
向量的四则运算
-
向量的加减
向量+向量:对应项加减
向量+常数:所有项都加
-
向量的点乘
x.*x‘ %向量的点乘,要符合矩阵的维度的运算
.*对应位置想成
-
向量的除法
x./y %对应位置上x除以y
四、MATLAB多项式的创建与运算
- 向量的积运算
-
dot(a,b)
点积,a、b维度必须一样
-
cross(a,b)
叉积,两个向量叉积得到与两个向量垂直的一个向量
叉积的两个向量必须是三维的(*)
-
混合积
dot(a,cross(b,c))
多项式
单项式是数字与字母的积,单项式的和叫作多项式
-
多项式的创建
1.直接写
'a*x.^n+b*x^(n-1)'
2.直接输入向量
p=[1 2 1];
ploy2sym(p)
%得到 x^2+2*x+1
以符号变量的形式储存
- 多项式的四则运算
注意:相加、减的两个向量必须大小相等,阶次不同时,低阶多项式必须用零来填补,使其与高阶多项式有相同的阶次。
-
乘法–卷积的形式得到
conv(p1,p2)
-
除法运算–相当于执行两个数组的解卷
[k,r]=deconv(p1,p2)
k是商,r是余式
根据跟来创建多项式
root=[-5 3+2i 3-2i];
p=ploy(root);%生成根为root的多项式的系数和相应的指数
ploy2sym(p);%根据p相应的系数 创建多项式 (补全字母)
-
加减法
一定要保证维度相同
五、矩阵
-
多项式补充
求导------参数是对应多项式的系数
polyder§
-
单元型变量(元胞)
-
单元型变量的创建
-
E={A,B,C,D} A,B,C,D可以是矩阵,向量,复数,实数
可以E(1)来调用,类似向量
-
对单元的元素逐个赋值
E=cell(1,3)%生成单元型变量,cell为与分配存储空间的函数
E(1,1)= E(1,2)=
str2num(x) 类型转换 将字符串转换成数字
-
-
结构型变量的创建和引用
- s=struct{‘field’,{},‘filed2’,{},…}
- s=struct{‘field’,values1,‘field2’,values2,…}
-
m=struct('color',{'red','black'},'number',{1,2})
m
m(1)
m(1).color
%一些结构型变量的函数
struct()%创建结构型变量
fieldnaems()%得到结构型变量的属性名
getfield()%得到结构型变量的属性值
setfield()%设定结构型变量的属性值
rmfield()%删除结构型变量的属性
isfield()%判断是否为结构型变量的属性
isstruct()%判断是否为结构型变量
结构型变量:类似于C语言创建初值,只是不用结构内部的具体形式
-
MATLAB矩阵运算
矩阵的生成
1.直接输入
- 输入时[ ]
- 同行元素之间用空格或者逗号分隔,行与行之间用分号或者回车键分隔
- 矩阵大小不需要预先定义
- 矩阵元素可以是运算表达式
- 若[ ]无元素,则是空矩阵
2.利用M文件创建
矩阵规模较大时,将所要输入的矩阵格式先写入一文本文件中,并将此文件以m为其扩展名,即M文件。
M文件是一种可以再MATLAB环境下云南行的文本文件,可以分为命令式文件和函数式文件两种。
M文件中的变量名与文件名不能相同,否则会造成变量名和函数名的混乱。运行M文件时,需要先将M文件sample.m复制到当前目录文件夹下,否则运行时无法调用。
3.利用文本创建
事先在记事本中建立文件
以goods.txt保存,在MATLAB命令行窗口中输入
load goods.txt
利用函数来生成特定的矩阵
eye(n)%创建n*n单位矩阵
eye(m,n)%创建m*n单位矩阵
eye(size(A))%创建与A维数相同的单位矩阵
ones(n)%创建n*n全1矩阵
ones(n,m)%创建n*m全1矩阵
ones(size(A))%创建与A维数相同的全1矩阵
zeros(n)%创建n*n全0矩阵
rand(n)%在[0,1]区间内创建一个n*n均匀分布的随机矩阵
compan(P)%创建系数向量是P的多项式的伴随矩阵
diag(v)%创建一向量v中的元素为对角的对角阵
hilb(n)%创建n*n的Hilbert矩阵
magic(n)%创建n阶魔方矩阵
sparse(A)%将A转化为稀疏矩阵的形式
六、符号与矩阵的创建与运算
-
矩阵元素的修改
-
D=[A;B C],A为原矩阵,BC为扩充的矩阵,D为扩充后的矩阵,规则和向量类似
-
A(m,:)=[]删除A的第m行------也就是将某一行替换成空向量
-
A(:,n)=[]删除A的第n列
-
A(m,n)=a;A(m,:)=[a b…];A(:,n)=[a b…]赋值操作
-
-
矩阵的变维
-
":“法
-
reshape(X,m,n)将矩阵M变维成m行n列的矩阵
-
-
矩阵的变向-经常用在图像处理中
- rot(90)将A逆时针旋转90度
-
矩阵的抽取
-
diag(X,k)抽取矩阵X的第k条对角线上的元素向量,k=0时抽取主对角线(此时可以省略k)
-
tril(X,k)提取X的第k条对角线下面的部分
-
triu(X,k)提取X的第k条对角线上面的部分
-
-
矩阵运算
-
除法:AX=B的解是X=A\B;XA=B的解是X=B/A;
-
加减、乘和线性代数中是一样的
-
点乘运算:和向量一样,对应项相乘
-
矩阵的幂:A.^k求k次幂
-
矩阵的逆:inv(X)
-
行列式的值为0的矩阵成为奇异的,否则成为非奇异的。
-
常用矩阵函数
- det矩阵的行列式的值
- eig矩阵的特征值
- inv矩阵的逆
- norm矩阵的范数值
- rank矩阵的秩
- trace矩阵的迹
-
矩阵的奇异值分解
SVD有着广泛的应用
将m.n矩阵A表示乘三个矩阵的乘积形式,USVT,其中U为m.m酉矩阵,V为n.n酉矩阵,S为对角矩阵,其对角线元素为矩阵A的奇异值且满足S1>=S2>=…>=Sr>Sr+1=…=Sn=0,(r为矩阵的秩)
-
符号运算
符号运算是为了得到更高精度的数值解,数值的运算更容易让读者理解,在特定的情况下,分别使用符号或数值表达式进行不同的运算
符号表达式和数值表达式互化
eval和syms
-
生成符号矩阵
- 直接输入
- 调用syms函数创建
factor因式分解
expand展开
simple(S)对表达式S进行化简;simplify简化符号矩阵的每一个元素
numden(A)求解符号表达式的分子和分母,分式通分
horner化成“秦九韶”形式
符号运算用来解方程特别好用
syms x y
z=[x+y x;y x-y];
subs(z,x,1)%把y=1代入
subs(z,[x,y],[1,2])%把x=1,y=2代入
对符号矩阵可以求特征值/特征向量/奇异值分解…
七、二维位绘图
-
基本绘图命令
-
plot绘图命令
x=0:pi/100:2*pi;%0到2pi画101个点 y=sin(x); plot(x,y);
注:
-
X和Y必须是同维向量,绘制以X为横坐标,Y为纵坐标的曲线
-
如果X是向量,Y是矩阵,X的维数应该与Y的某一维相等,绘制多条颜色不同的曲线,曲线数等于Y的另一维,X作为曲线的横坐标。如果矩阵是方阵,绘制Y的每一列对X的曲线(每一列是一条曲线)
-
如果X是矩阵,Y是向量,同上,但此时,Y是横坐标
-
如果X,Y是同维矩阵,以X的每一列作为横坐标,以Y对应的列元素作为纵坐标绘制曲线,曲线数等于列数
plot(x,y,LineSpec)
注:
- LineSpec为包含符号的字符向量或者字符串,用来设置所画数据点的形状,大小和颜色,以及数据点之间连线的形状、粗细、颜色等
- 实际应用中,LineSpec是某些字母或符号的组合,可以省略
- 省略时,MATLAB将会使用默认设置,曲线采用实线,不同曲线按照一定顺序着色
- 如果忽略线型,只指定标记,则绘图时只显示标记,不显示线条
- –or带有圆形标记的红色虚线
plot(x1,y1) hold on%保留上一条曲线 plot(x2,y2) plot(x1,y1,...,xn,yn) plot(x1,y1,LineSpec1,...,xn,yn,LineSpecn) %举例 x=0:pi/10:2*pi; y1=sin(x); y2=sin(x-0.5); y3=sin(s-0.25); figure plot(x,y1,'g',x,y2,'b--o',x,y3,'c*') plot(y)%创建y中数据对每个值索引的二维线图 plot(y,LineSpec)%设置线型、标记符号和颜色
注:
-
如果y是实向量,则x轴刻度范围从1到length(y).
横坐标为编号
-
如果y是实矩阵,按列绘制出每列元素值对应其下标的曲线,曲线数等于y的列数
-
如果y是复矩阵,按列分别绘制出以元素实部为横坐标,虚部为纵坐标的多条曲线,即等效于plot(real(y),imag(y))
-
x=linspace(-s*pi,2*pi); y1=sin(x); y2=cos(x); p=plot(x,y1,x,y2); p(1).LineWidth=2; p(2).Marker='*';
2.fplot绘图命令
专门用于绘制一元函数
与plot有很多相似的地方
可以用
3.ezplot绘图命令
专门用于符号函数的绘图命令,不推荐使用
4.subplot命令
-
-
不同坐标系下的绘图命令
-
默认在直角坐标系下绘图
-
极坐标系下的绘图命令:polarplot
polarplot(theta,rho); %示例 theta=linspace(0,6*pi); rho1=theta/10; polarplot(theta,rho1) tho2=theta/12; hold on polarplot(theta,rho2,'--') hold off
坐标转换
[theta,rho]=cart2pol(x,y)
R=deg2rad(D)
D=rad2deg®
[x,y]=pol2cart(theta,rho)
-
半对数坐标
-
当一幅图上所要表示的两条曲线纵坐标值不在统一范围时,可以使用双y轴坐标
plotyy:不推荐使用
yyaxis:创建具有两个y轴的图形
yyaxis left %画左边 yyaxis right %画右边
-
-
图形窗口
修改图形
figure();
-
图形标注
标题、图例
坐标系和坐标轴
图形注释
axis(limits)
fill(x,y,'color') %用指定的颜色填充数据(x,y)所构成的多边形 title('string') %为图形添加标题 xlabel('string') %为x轴添加标注,ylabel,zlabel text(x,y,'string') %在指定位置显示字符串 gtext('string') %同鼠标在图形的任意位置进行标注
添加图例
legend(label1,...,labeln) %按照曲线顺序设置图例 legend(subset,_) %只为一部分曲线设置图例 legend(target,_) %在指定坐标区域绘图 legend(_,'Location',lcn) %指定图例位置 lengent(_,'Orientation',ornt) %图例的显示方式(并排或垂直) %ornt:‘vertical’(默认)‘horizontal’
添加坐标区网格线
grid on%为当前坐标区添加主网格线 grid off%删除当前坐标区所有网格线 grid %切换主网格线的可见性 grid minor%切换次网格线的可见性 %示例 x=linspace(0,10); y=sin(x); plot(x,y); grid on grid off
-
条形图
- 二位条形图
- bar:竖直条形图
- bath:水平条形图
- 三维条形图
- bar3:竖直条形图
- bar3h:水平条形图
bar(y)%创建一个条形图,y中每个元素对应一个条形,如果y是m*n的矩阵,则bar创建m组每组包含n个条形 bar(x,y)%在横坐标x所指定的位置绘制y,要求x为严格单调增的向量 bar(_,width)%设置条形的相对宽度width bar(_,style)%指定条形组的样式style bar(_,color)%设置条形的颜色
-
区域图
-
area(x)与plot(x)一样,但在曲线下方区域填充颜色
-
area(x,y)与plot(x,y)一样,但将在曲线下方区域填充颜色
-
area(x,Y)矩阵y的第一行对向量x绘图,然后依次是下一行与前面所有行值的和对向量x绘图,每个区域各有颜色
-
area(_,basevalue)指定区域填充的基值,默认为0
Y=[1 5 3; 3,2,7; 1,5,3; 2,6,1;] figure basevalue=-4; area(Y,basevalue)
-
-
二维饼图
- pie(x)使用x中的数据绘制饼图
- pie(x,explode)将扇区从饼图偏移一定位置
- pie(x,label)指定扇区的文本标签
- pie3三维饼图
-
二维直方图的绘图命令
- histogram:直角坐标系下的直方图
- polarhistogram:极坐标系下的直方图
-
含误差条的线图
errorbar(y,err)%err errorbar(x,y,err)%横坐标是x errorbar(x,y,neg,pos)%neg确定数据点下方误差条的长度,pos确定数据点上方误差条的长度 errorbar(_,ornt)%设置误差条的方向,horizontal水平,vertical为竖直,both为水平和竖直 %示例 x=1:10:100; y=[20 30 45 40 60 65 80 75 95 90]; err=[4,3,5,3,5,3,6,4,3,3]; errorbar(x,y,err,'both')
-
针状图
- stem(y)与plot(y)类似
- stem(x,y)与plot(x,y)类似
- stem(_,‘filled’)填充圆形
x=linspace(0,10,20)'; y=(exp(0.25*x)); stem(x,y,'filled')
-
阶梯图
x=linspace(0,1,30)'; y=[cos(10*x),exp(x).*sin(10*x)]; h=stairs(x,y); h(1).Maker='o'; h(1).MakerSize=4; h(2).Maker='o'; h(2).MakerFaceColor='m';
-
罗盘图
compass(u,v);
-
羽毛图
-
箭头图
[X,Y]=mesherid(-2:.2:2); Z=X.*exp(-X.^2-Y.^2); [DY,DX]=gradient(Z,.2,.2); figure contour(X,Y,Z); hold on quiver(X,Y,DX,DY) hold off
八、三维绘图
-
基本绘图函数
- plot3函数是二维绘图函数plot的扩展
t=0:pi/50:10*pi; st=sin(t); ct=cos(t); plot3(st,ct,t);
-
fplot3
-
mesh
mesh(X,Y,Z) mesh(Z) mesh(Z,C) mesh(_,C) %示例 [X,Y]=meshgrid(-8:.5:8); R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; mesh(X,Y,Z)
mesh创建一个网格图
边是有颜色的,面是无颜色的
meshgrid%可以用来生成二维或三维的网络 [X,Y]=meshgrid(x,y); [X,Y,Z]=meshgrid(x,y,z);%用来生成三维网络 mesh(z)%创建一个网络图,将行号和列号作为x和y的坐标 mesh(_,c)%指定边的颜色 hidden on/off%网格不透明/透明 hidden % on和off切换 colorbar%用来增加颜色条 meshc%函数可以在网格图下面显示等高线图 [X,Y]=mershgrid(-3:.125:3); Z=peaks(X,Y); meshc(X,Y,Z) meshz%可以在网格图下方显示帷幕 [X,Y]=meshgrid(-3:.125:3); Z=peaks(X,Y); meshz(X,Y,Z) ezmesh
-
三维曲面函数
surf() [X,Y]=meshgrid(1:0.5:10,1:20); Z=sin(X)+cos(Y); surf(X,Y,Z) surfc%绘制曲面图下的等高线图 surfl%绘制一个带有光照的曲面图
-
柱面
cylinder%生成柱面的x,y,z坐标,接下来用surf或者mesh函数来绘制圆柱的柱面 [x,y,z]=cylinder%返回半径为1,高度为1的圆柱柱面坐标,其周长被20等分 [x,y,z]=cylinder(r,n)%通过r定义援助的高,通过n定义周长等分数量 cylinder(_)%直接绘制圆柱柱面
-
球面
spere%生成柱面x、y和z坐标 spere%生成一个包含20*20个面的球面并绘制 sphere(n)%生成一个包含n*n个面的球面并绘制 [x,y,z]=sphere(_)%返回一个半径为1的球面x,y和z坐标
-
等高线:
contour3(Z)%用来绘制三维等高线图,Z元素指定来高度,x,y坐标分别是Z矩阵的行好和列号 contour3(X,Y,Z)%由X,Y定义了xy坐标 %示例 contour3(X,Y,Z,[-.2 -.1 .1 .2],'showtext',‘on’) [X,Y,Z]=peaks; contour3(X,Y,Z,[2,2]); contour%绘制二维等高线图 %示例: x=linspace(-1*pi,2*pi); y=linspace(0,4*pi); [X,Y]=meshgrid(x,y); Z=sin(X)+cos(Y); contour(X,Y,Z)
-
填充的二维等高线图
contourf%等高线间填充颜色
-
等高线矩阵的计算函数
contourc%计算前面几个函数所使用的等高线矩阵C C=contour(Z);%Z是计算等高线矩阵所使用的数据 C=contour(Z,n);%标量n是等高线的层级 C=contour(Z,v);%向量v中的值,指定的是等高线的位置 C=contour(x,y,Z); C=contour(x,y,Z,n); C=contour(x,y,Z,v);
-
维等高线添加标签
Clabel(C,h)%C为等高线矩阵,h为等高线图对象
-
三维图形的修饰处理-视角处理
-
三维图形的修饰处理-颜色处理
brighten%可以控制色图明暗 caxis%调整颜色范围
-
三维图形的修饰处理-光照处理
九、数列与极限
-
数组求和-sum函数
A=1:10; S=sum(A) A=[1 3 2;4 2 5; 6 1 4]; S=sum(A)
注:
-
如果A是向量,返回元素的和
-
如果A是矩阵,返回包含每列总和的行向量
-
如果A是多维数组,沿大小不为1的第一个数组维度计算,将这些元素视为向量。计算结果中,该维度变维1,其余维度的大小保持不变。
s=sum(A,'all')%计算A中所有元素的总和 s=sum(A,dim)%沿维度dim返回总和,sum(A,2)计算行和 s=sum(A,vecdim)%根据vecdim中所指定的维度对A元素求和 %如果A是矩阵s=sum(A,[1,2])是求A中所有元素的总和 nansum%与sum(_,'omitnan')等价,用来计算不包含nan值的其他元素的和 cumsum(A)%用来算累积和 cumsum(A,dim)%与sum(A,dim)类似 cumsum(_,direction)%按照指定的方向计算累积和,默认为forward,reverse为倒序 cumsum(_,nanflag)%是否忽略nan
cumtrapz%用来计算累积梯形数值积分 q=cumtrapz(y)%通过梯形法按照单位间距计算y的近似累积积分 %如果y是向量,计算累积积分 %如果y是矩阵,计算每一列的累积积分 %如果y是高维数组,对大小不等于1的第一个维度求累积积分 q=cumtrapz(x,y)%根据x指定的坐标或标量间距对y进行积分 %x为向量,长度必须与y的第一个不等于1的维度的大小相同 %x为标量,代表间距,cumtrapz(x,y)=x*cumtrapz(y). q=cumtrapz(_,dim)%沿dim所指定的维度求积分
-
-
数组元素求积
prod函数
A=[1:3:7;2:3:8;3:3:9] B=prod(A)
A为single结果也为single,如果为其他数据和逻辑数据类型,结果都是double型
如果输入空矩阵,则结果为1
cumprod函数可以计算累积乘积
-
极限和导数
limit%用来求函数的极限 limit(f,var,a)%计算f在变量var接近a时候的极限 省略var时用默认的变量 limit(f)%计算函数在0的极限 limit(f,var,a,'left')%计算f在var接近a的左极限 limit(f,var,a,'right')%计算f在var接近a的右极限 %示例 syms s h f=sin(x)/x; limit(f,x,0) f=(sin(x+h)-sin(x))/h; limit(f,h,0) %也可以返回符号函数
-
导数的计算
diff(f,n)%计算f的n阶导数,默认是1 diff(f,var,n)%计算多元函数f关于变量x的n阶偏导数 %示例 clear: syms x y; f=sin(x*y)/x; diff(f,y); diff(f,x,2); clear: syms x; diff(f) diff(f,2) diff%还可以计算差分--基于离散函数的概念 y=diff(x)%计算数组沿第一个大小不等于1的维度相邻元素的差分 y=diff(x,n)%计算n阶差分 y=diff(x,n,dim)%计算dim所指定的维度 %示例 x=[1 1 2 3 5 8 13 21]; y=diff(x)%计算差分后,元素会少一个 %差分近似导数
-
级数求和
symsum计算级数求和
F=symsum(f,k,a,b)%计算k从a到b时,级数f的和 %参数可以用inf来代表无穷大 %如果级数不收敛,求和的结果为inf F=symsum(f,k)%计算不定项级数的求和 %F(k+1)-F(k)=f(k) %示例 syms k F1=symsum(k,k); F2=symsum(2^k,k); syms k x F1=symsum(k^2,k,0,10); F2=symsum(1/k^2,k,1,inf); F3=symsum(x^k/factorial(k),k,1,inf)
-
等比数列和等差数列求和
syms a b n; s=a^n+b*n; symsum(s)%利用级数求和求数列的和
-
计算不定积分
symsum(f)%计算函数f的不定积分 symsum(f,var)%计算多元函数f关于变量var的不定积分 %示例: syms n m; symsum(n^2) symsum(n*m+n,m) symsum(n*m+n,n)
-
定积分
int%可以用来计算定积分 int(f,a,b)%计算f在[a,b]上的定积分 int(f,x,a,b)%计算多元函数关于x在区间[a,b]上的定积分 int(f)%计算函数f的不定积分 int(f,x)%计算f关于x的不定积分 %示例: syms x expr=-2*x/(1+x^2)^2; F=int(expr)%不定积分 syms x z f(x,z)=x/(1+z^2); Fx=int(f,x)%不定积分 Fz=int(f,z)
-
二重积分
integral2 q=integral2(fun,xmin,xmax,ymin,ymax)计算在矩形区域内的重积分 %示例: fun=@(x,y)1./(sqrt(x+y).*(1+x+y).^2) ymax=@(x)1-x; q=integral2(fun,0,1,0,ymax)%上下限 #使用int函数计算二重积分 clear: syms x y; f=x; f1=2*x; f2=0.5*x; f3=3-x; ff1=int(f,0.5*x,2*x); ffl1=int(ff1,0,1); ff2=int(f,0,5*x,3-x); ffl2=int(ff2,1,2); ff1=ffl1+ffl2;
-
三重积分
%可以用int函数计算三重积分,十分麻烦 integral3%计算三重积分 q=integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax) %示例: fun=@(x,y,z)y.*sin(x)+z.*cos(x) q=integral3(fun,0,pi,0,1,-1,1)
-
泰勒展开式
T=taylor(f,var)%计算在0附近的六阶泰勒展开式 T=taylor(f,var,a)%计算在var=a附近的六阶泰勒展开式 %示例: T1=taylor(exp(x)); T2=taylor(sin(x)); T3=taylor(cos(x));
-
傅立叶变换与逆变换
fourier(f)%计算f的傅立叶变换,结果中w为变换后的变量 fourier(f,transVar)%用transVar代替w fourier(f,var,transVar)%对var所代表的变量做傅立叶变换 ifourier(F)%对F做傅立叶逆变换 ifourier(F,transVar) %示例: f=dirac(t); f_FT=fourier(f) syms t w ifourier(dirac(w),w,t)
-
拉普拉斯变换
laplace ilaplace
十、程序设计
-
M文件
脚本文件、函数文件
编辑M文件很方便
function y=jiecheng(n)
if n<0
disp('Error');
return;
else
if n==0
y=1;
else
y=1;
for m=1:n
y=y*m;
end
end
end
十一、微分方程
常微分方程
-
微分方程的求解
syms y(t) a eqn=diff(y,t)==a*y; S=dsolve(eqn); syms y(t) a eqn=diff(y,t,2)==a*y; s=dsolve(eqn); syms y(t) a eqn=diff(y,t)==a*y; cond=y(0)==5; s=dsolve(eqn,cond); syms y(t) a b eqn=diff(y,t,2)==a^2*y; Dy=diff(y,t); cond=[y(0)==b,Dy(0)==1]; s=dsolve(eqn,cond); syms y(t) z(t) eqns=[diff(y,t)==z,diff(z,t)==-y]; S=dsolve(eqns); [S1,S2]=dsolve(eqns);
-
欧拉法-一阶线性近似–在matlab中没有现成的代码
function [x,y]=euler(f,x0,y0,xf,h) n=fix(xf-x0)/h; y(1)=y0; x(1)=x0; for m=1:n x(m+1)=x(m)+h; y(m+1)=y(m)+h*feval(f,x(m),y(m)) [x1,y1]=euler('f',0,1,1,0.1); [x,y2]=euler('f',0,1,1,0.01); yr=(1+2*x).^0.5; funtion [x,y]=adeulor(f,x0,y0,xf,h) n=fix(xf-x0)/h; y(1)=y0; x(1)=x0; for m=1:n x(m+1)=x(m)+h; yp=y(m)+h*feval(f,x(m),y(m)); yc=y(m)+h*feval(f,x(m+1),y(m)); y(m+1)=0.5*(yp+yc); end
龙格库塔方法
ode常微分方程
刚性:变量之间变化速度相差很大
非刚性:变量之间不化速度相差较小(看情况)
Ode有很多种,根据需要选择
%以ode23函数为例
[t,y]=ode(odefun,tspan,y0)
%示例:
xspan=[0 5];
y0=0;
[x,y]=ode23(@(x,y) 2*x,xspan,y0);%微分方程/范围/初值
ode23%只适用于两个未知参数的微分方程
A=1;
B=2;
tspan=[0 5];
y0=[0 0.01];
[t,y]=ode23(@(t,y) odefcn(t,y,A,B),tspan,y0);%@(t,y)指明变量是t,y,尽管微分方程本来有好几个未知参数
偏微分方程
略(很麻烦)