Matlab在数模上的应用——基础打杂篇
# MATLAB体系结构
MATLAB产品由若干模块组成,不同的模块完成完成不同的功能,主要包括以下几个模块。
MATLAB:MATLAB核心与基础;
MATLAB Toolboxes:囊括不同领域的算法程序包;
MATLAB Compiler: MATLAB Compiler这种编译器可以将MATLAB程序文件编译生成标准的C/C++语言文件,提高程序的运行效率;
Simulink: 以窗口图形方式、专门用于连续或离散时间的动态系统建模、分析和仿真;
Simulink Blocksets:围绕着Simulink仿真核心所开发的应用程序包,称为模块集(Blocksets);
Real-Time Workshop (RTW):实时代码生成工具,它能够根据Simulink模型生成程序源代码,并打包、编译所生成的源代码生成实时应用程序;
Stateflow: Stateflow是基于有限状态机理论针对复杂的事件驱动系统进行建模、仿真的工具。
Stateflow Coder: Stateflow Coder是基于Stateflow状态图生成高效、优化的程序代码。
# 一些函数的归纳
# 矩阵相关
函数 | 描述 |
---|---|
rand(m,n) | m行n列均匀分布随机数阵 |
randn(m,n) | m行n列正态分布随机数阵 |
diag(v) | 一维数组v为对角元的对角阵 |
# 数学函数
功能 | 函数 |
---|---|
三角函数 | sin() sinh() sind() asin() asind() ...... |
指数函数 | exp() log() log10() log2() ...... |
累乘、累加 | cumprod() cumsum() |
向零方向取整 | fix() |
向$-\infty$取整 | floor() |
向$+\infty$取整 | ceil() |
四舍五入 | round() |
余数 | rem(m,n) |
符号函数 | sign() |
# 符号表达式
# 调用sym函数
# 建立符号数
>> sym (num)
>> sym(1/3)
ans =
1/3
# 建立符号变量
>> y = sym('x',[1 10])
y =
[ x1, x2, x3, x4, x5, x6, x7, x8, x9, x10]
# 建立符号矩阵
>> X=sym('X',[2 2])
X =
[ X1_1, X1_2]
[ X2_1, X2_2]
>> X=sym('X%d%d',[2 2])
X =
[ X11, X12]
[ X21, X22]
>> X=str2sym('[a b c;d e f; g h d]') %由于新版本 str2sym代替sym
X =
[ a, b, c]
[ d, e, f]
[ g, h, d]
# 调用syms函数
# 建立符号变量
>> syms y u;
在建立符号变量之后,符号表达式、符号矩阵都可以自行建立
>> syms x y d q f
>> A = [x y d; q f y; x d q]
A =
[ x, y, d]
[ q, f, y]
[ x, d, q]
# 用subs计算符号表达式的值
subs(符号表达式,{符号变量},{数值})
>> A = sym('A%d%d',[2 2]);
>> DA = det(A)
DA =
A11*A22 - A12*A21
>> subs(DA,{A(1) A(2) A(3) A(4)},{1 2 2 1})
ans =
-3
# 用符号变量进行因式分解、展开和化简
# collect合并同类项
>> syms x y
>> collect(x^2*y + y*x - x^2 - 2*x)
ans =
(y - 1)*x^2 + (y - 2)*x
# expand展开
>> syms x y
>> expand((x+1)^3)
ans =
x^3 + 3*x^2 + 3*x + 1
# factor因式分解
>> syms x y
>> factor(x^3+3*x^2*y+3*y^2*x+y^3)
ans =
[ x + y, x + y, x + y]
# simplify化简
>> syms x
>> simplify(sin(x)^2 + cos(x)^2)
ans =
1
# simplifyFraction化简有理式
>> syms x
>> simplifyFraction((x^2-1)/(x+1))
ans =
x - 1
# partfrac部分分式分解
>> syms x
>> partfrac(1/(x^2 + x), x)
ans =
1/x - 1/(x + 1)
# 符号函数画图
ezpolar(f,[a,b])
绘制$\rho = \rho(\theta)$极坐标函数曲线
>> syms theta
>> rho = theta;
>> ezpolar(rho,[0,4*pi])
fplot(f,[a,b])
绘制$f(x)$在区间$[a,b]$上的图形fplot(xt,yt,[tmin,tmax])
绘制表示的曲线
>> fplot(@(x) exp(x),[-3 0],'b')
>> hold on
>> fplot(@(x) cos(x),[0 3],'b')
>> hold off
>> grid on
fimplicit()
可参阅下节内容,同时还有其他函数,可自行查阅帮助文档,例如:fplot3()
,fmesh
,fsurf
,fcontour
,fimplicit3
......
# 二维绘图
# plotyy(x1,y1,x2,y2)双纵坐标图
x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
figure % new figure
[hAx,hLine1,hLine2] = plotyy(x,y1,x,y2);
title('Multiple Decay Rates')
xlabel('Time (\musec)')
ylabel(hAx(1),'Slow Decay') % left y-axis
ylabel(hAx(2),'Fast Decay') % right y-axis
# subplot(m,n,p)创建子窗口
- 创建子图分割
- 创建m行n列图窗,p从左至右,由上到下为顺序
# scatter(x,y,sz,c)散点图
x = linspace(0,3*pi,200);
y = cos(x) + rand(1,200);
sz = 25;
c = linspace(1,10,length(x));
scatter(x,y,sz,c,'filled')
# fimplicit(f)隐函数绘图
y = @(x,y) y.*sin(x) + x.*cos(y) - 1;
fp = fimplicit(y);
fp.Color = 'r';
fp.LineStyle = '--';
fp.LineWidth = 2;
# polarplot()极坐标图
theta = 0:0.01:2*pi;
rho = sin(2*theta).*cos(2*theta);
polarplot(theta,rho)
# bar()直方图
# hist()统计直方图
# stairs()阶梯图
# stem()火柴杆图
# rose()统计扇形图
# comet()彗星曲线
# pie()饼状图
# errorbar()误差条形图
# quiver()向量场图
# streamline() 流线图
# area()区域图
# convhull()凸壳图
# compass()复数向量图(罗盘图)
# feather()复数向量投影图(羽毛图)
编辑 (opens new window)
上次更新: 2022/04/07, 13:46:09