> 文章列表 > MATLAB的快速入门

MATLAB的快速入门

MATLAB的快速入门

第一部分:基础知识

常用命令:

clc    %清除命令行窗口 
clear  %清空工作区数据
cd     %显示或改变工作目录
clf    %清除图形窗口
help   %打开帮助文档
save   %保存内存变量到指定文件
hold   %保持图形
close  %关闭当前图窗
quit   %退出

变量:

  • 变量名必须以字母开头,之 后可以是任意的字母、数字或 下划线;

  • 变量名区分字母的大小写;

  • 变量名不超过31个字符。

常量:

ans     %默认变量
pi      %圆周率
inf     %无穷大
exp(1)  %自然底数e
eps     %浮点运算的相对精度

数据类型:

%%数字
1,2,3;%%向量
a=[2 4 6 8];
x=1:2:10;
x=linspace(1,10,10);%%矩阵
a=[2 4;6 8];%%字符串
'hello world'

运算符

+    %算数加
-    %算数减
*    %算数乘
.*   %点乘
^    %算数乘方
/    %算数右除
'    %矩阵转置
==   %等于

常用函数

abs   %模
sqrt  %平方根
exp   %e指数
sin   %正弦函数

第二部分:基础运算

变量赋值

%数值
a=3;%向量
b=[1 2 3];
c=[1,2,3];
d=linspace(1,3,3);
e=1:1:3;%矩阵
f=[1,2,3;4,5,6];%字符串
g='hello world';
MATLAB的快速入门

数学运算

MATLAB的快速入门

逻辑计算

MATLAB的快速入门

注释

  • %后面的是注释

  • CTRL+R快捷键注释

  • CTRL+T快捷键取消注释

第三部分:程序基础

程序设计

MATLAB的快速入门

程序结构

  • 循环结构:

  1. for循环

for 变量=表达式可执行语句1
end

2. while 循环

while 表达式可执行语句1
end

分支结构

if 表达式语句1
else语句2
end
MATLAB的快速入门

第四部分:函数句柄

直接通过@符号定义

fun1=@(参数1,参数2,...)函数表达式
myfun1=fun1(变量1,变量2)
%example1
fun1=@(x,y)(x.^2+y.^2)
myfun1=fun1(2,3)%example2
x=1:1:10;
y=linspace(10,20,10);%10 11 12 13 14 15 16 17 18 19
fun2=@(x,y)(x.^2+y.^2)
myfun2=fun2(x,y)

M文件定义和调用函数

%example
function[输出形参表:output1,output2,...,outputn]=函数名(输入形参表:input1,...,inputn)注释说明部分函数体代码部分
end
myfun1=fun1(x,y);function f1=fun1(x1,y1)  %%一般这个定义函数部分都会放在这个程序的最下面f1=x1.^2+y1.^2;
end

第五部分:画图基础

基础命令

figure

创建一个图形窗口

close all

关闭打开的matlab文件

hold on

保持当前轴及图形不变

grid on

显示当前坐标区的主网格线

plot(x,y)

创建x-y的二维线图

polarplot(theta,rho)

在极坐标中绘图

plot3(x,y,z)

plot(x,y)的三维拓展

plot(x1,y1;x2,y2...)

绘制多条曲线

%example
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
%创建x,y变量
x=linspace(-pi,pi);
y=cos(x);
plot(x,y);
figure
polarplot(x,y)
MATLAB的快速入门
MATLAB的快速入门

美化线条

plot(x,y,s) s为单引号标记的字符串,用来设 置所画数据点的类型、大小、颜色 以及数据点之间连线的属性。

'r'

red

'-'

实线

'o'

圆圈

'g'

green

'--'

虚线

'+'

加号

'b'

blue

':'

点线

'*'

星号

'k'

black

'-.'

点划线

'.'

LineWidth

线宽

%example
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
% x=linspace(-pi,pi);
% y=cos(x);
% plot(x,y);
% figure
% polarplot(x,y)
clc;
clf;
clear;
close;
x=linspace(-pi,pi);
y=cos(x);
%%plot(x,y,'r-o',LineWidth=0.5);
plot(x,y,'r-o','LineWidth',0.5);
MATLAB的快速入门

坐标轴设置

xlabel/ylabel

坐标轴标签

xlim/ylim

坐标轴范围调整

Axes 属性

官网中的Axes属性文档

%example1
%绘图
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
x=linspace(-pi,pi);
y=cos(x);
%%plot(x,y,'r-o',LineWidth=0.5);
plot(x,y,'r-o','LineWidth',0.5);
%修改Axes属性
ax=gca;%%获取图形信息
ax.FontSize=12;%%字体大小
ax.TickDir='out';%% 刻度线方向
ax.TickLength=[0.02 0.02];%%刻度线长度
ax.YLim=[-2 2];%%刻度范围
MATLAB的快速入门
%example2
%绘图
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
x=linspace(-pi,pi);
y=cos(x);
%%plot(x,y,'r-o',LineWidth=2);
plot(x,y,'r-o','LineWidth',2);
%坐标轴
xlabel('x','FontSize',18,'FontWeight','bold');
ylabel('y','FontSize',18,'FontWeight','bold');
%set实现图形对象属性
set(gca,'Fontsize',18,'Fontweight','bold','Position',[0.1 0.16 0.71 0.8]);
set(gca,'LineWidth',3,'Tickdir','in','TickLength',[0.0215,0.015],'YMinorTick','off','XMinorTick','off');
%坐标轴范围
xlim([-pi pi]);
ylim([-1 1]);
MATLAB的快速入门

对数坐标轴

半对数坐标系

semilogx(x,y)

x轴以10为基数的对数刻度

semilogy(x,y)

y轴以10为基数的对数刻度

双对数坐标系

loglog(x,y)

x,y轴以10为基数的对数刻度

%example
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
x=0:1:1000;
y=0:10:1e4;
subplot(2,2,1);
semilogy(x,y);
subplot(2,2,2);
semilogx(x,y);
subplot(2,2,[3,4]);
loglog(x,y)
MATLAB的快速入门

一图多线

  1. hold on

  1. plot(x1,y1,x2,y2,x3,y3...)

%example
%绘图
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
x1=linspace(-pi,pi);
y1=cos(x1);
%%plot(x,y,'r-o',LineWidth=2);
plot(x1,y1,'r-o','LineWidth',2);
%坐标轴
xlabel('x','FontSize',18,'FontWeight','bold');
ylabel('y','FontSize',18,'FontWeight','bold');
%set实现图形对象属性
set(gca,'Fontsize',18,'Fontweight','bold','Position',[0.1 0.16 0.71 0.8]);
set(gca,'LineWidth',3,'Tickdir','in','TickLength',[0.0215,0.015],'YMinorTick','off','XMinorTick','off');
%坐标轴范围
xlim([-pi pi]);
ylim([-1 1]);hold on;%%保持图像不变x2=linspace(-pi,pi);
y2=sin(x2);
%%plot(x,y,'b--*',LineWidth=2);
plot(x2,y2,'b--*','LineWidth',2);
%坐标轴
xlabel('x','FontSize',18,'FontWeight','bold');
ylabel('y','FontSize',18,'FontWeight','bold');
%set实现图形对象属性
set(gca,'Fontsize',18,'Fontweight','bold','Position',[0.1 0.16 0.71 0.8]);
set(gca,'LineWidth',3,'Tickdir','in','TickLength',[0.0215,0.015],'YMinorTick','off','XMinorTick','off');
%坐标轴范围
xlim([-pi pi]);
ylim([-1 1]);
legend('cosx','sinx')%%多线条最好有图例说明一下
MATLAB的快速入门
%该代码生成的图形和上图一样,最大的不同在于双线条的画法不同
%绘图
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
x1=linspace(-pi,pi);
y1=cos(x1);
x2=linspace(-pi,pi);
y2=sin(x2);
plot(x1,y1,'r-o',x2,y2,'b--*',LineWidth=2);
%坐标轴
xlabel('x','FontSize',18,'FontWeight','bold');
ylabel('y','FontSize',18,'FontWeight','bold');
%set实现图形对象属性
set(gca,'Fontsize',18,'Fontweight','bold','Position',[0.1 0.16 0.71 0.8]);
set(gca,'LineWidth',3,'Tickdir','in','TickLength',[0.0215,0.015],'YMinorTick','off','XMinorTick','off');
%坐标轴范围
xlim([-pi pi]);
ylim([-1 1]);
legend('cosx','sinx')%%多线条最好有图例说明一下

双纵坐标轴

yyaxis left

yyaxis right

%example
%绘图
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
x1=linspace(-pi,pi);
y1=cos(x1);
colororder({'b','r'});%设置坐标轴颜色
yyaxis left;
%%plot(x,y,'r-o',LineWidth=2);
plot(x1,y1,'r-o','LineWidth',2);
%坐标轴
xlabel('x','FontSize',18,'FontWeight','bold');
ylabel('y','FontSize',18,'FontWeight','bold');
%set实现图形对象属性
set(gca,'Fontsize',18,'Fontweight','bold','Position',[0.1 0.16 0.71 0.8]);
set(gca,'LineWidth',3,'Tickdir','in','TickLength',[0.0215,0.015],'YMinorTick','off','XMinorTick','off');
%坐标轴范围
xlim([-pi pi]);
ylim([-1 1]);hold on;%%保持图像不变yyaxis right;
x2=linspace(-pi,pi);
y2=sin(x2);
%%plot(x,y,'b--*',LineWidth=2);
plot(x2,y2,'b--*','LineWidth',2);
%坐标轴
xlabel('x','FontSize',18,'FontWeight','bold');
ylabel('y','FontSize',18,'FontWeight','bold');
%set实现图形对象属性
set(gca,'Fontsize',18,'Fontweight','bold','Position',[0.1 0.16 0.71 0.8]);
set(gca,'LineWidth',3,'Tickdir','in','TickLength',[0.0215,0.015],'YMinorTick','off','XMinorTick','off');
%坐标轴范围
xlim([-pi pi]);
ylim([-1 1]);
legend('cosx','sinx')%%多线条最好有图例说明一下
MATLAB的快速入门

多图形显示

  • 常用:subplot(m,n,number)将当前窗口分割成mxn个视图区域 ,number表示第几分块

%example
%绘图
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
x=linspace(-pi,pi);
y1=cos(x);
y2=sin(x);subplot(1,2,1)
%%plot(x,y,'r-o',LineWidth=2);
plot(x,y1,'r-o','LineWidth',2);subplot(1,2,2)
%%plot(x,y,'b--*',LineWidth=2);
plot(x,y2,'b--*','LineWidth',2);
  • 不常用:tiledlayout(m,n) 将当前窗口分割成mxn个视图区域 nexttile 创建一个坐标区对象,再将其放 入当前图形窗口中的分块图布局 的下一个空图块中

%绘图
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
x=linspace(-pi,pi);
y1=cos(x);
y2=sin(x);figure;
tiledlayout(2,2);%%%在当前窗口布局为2*2的视图区域
nexttile%在第一个图块中创建一个坐标区对象
%%plot(x,y,'r-o',LineWidth=2);
plot(x,y1,'r-o','LineWidth',2);
nexttile%在第二个图块中创建一个坐标区对象
%%plot(x,y,'b--*',LineWidth=2);
plot(x,y2,'b--*','LineWidth',2);
nexttile([1 2])创建第三给图块,占据1行2列的坐标区
plot(x,y1,x,y2)
MATLAB的快速入门

第六部分:特殊图形

伪彩图

二元函数z=f(x,y)

imagesc(x,y,Z)

pcolor(x,y,Z)

%imagesc
%绘图
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
x=linspace(-4,4,100);%%定义俩个相同的向量x,y
y=x;[X,Y]=meshgrid(x,y);%%%基于向量下x,y创建二维网格数据矩阵X,Y
Z=X.*exp(-X.^2-Y.^2);%%%使用函数表达式定义矩阵z
imagesc(x,y,Z)
xlabel('x');
ylabel('y');
colormap jet %%%设置当前颜色图
colorbar('FontSize',12);%%%显示色阶的颜色栏
clim([-1,1]);%%颜色栏的取值范围c=colorbar;
c.Label.String='Z';%%给颜色栏添加文字标注
c.Label.FontSize=12;
MATLAB的快速入门
%pcolor
%绘图
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
x=linspace(-4,4,100);%%定义俩个相同的向量x,y
y=x;[X,Y]=meshgrid(x,y);%%%基于向量下x,y创建二维网格数据矩阵X,Y
Z=X.*exp(-X.^2-Y.^2);%%%使用函数表达式定义矩阵z
pcolor(x,y,Z)
xlabel('x');
ylabel('y');
colormap jet %%%设置当前颜色图
colorbar('FontSize',12);%%%显示色阶的颜色栏
clim([-1,1]);%%颜色栏的取值范围c=colorbar;
c.Label.String='Z';%%给颜色栏添加文字标注
c.Label.FontSize=12;
MATLAB的快速入门

统计图形

bar(x,y)

竖直条形图

pie(x,y)

饼图

barh(x,y)

水平条形图

histogram

柱状图

area(x,y)

面积图

%绘图
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
y=randn(20,1); %%创建正态分布的随机数矩阵y
tiledlayout(2,2);
%%%bar函数绘制条形图
nexttile;
bar(y,1,'r');%%1表示条形图的宽度,r表示颜色
title('条形图');
%%%area函数绘制面积图
nexttile;
area(y,'LineStyle',':');%%设置线宽和线型
title('面积图');
%%%pie函数绘制饼图
nexttile;
pie(y);
title('饼图');
%%%histogram函数绘制柱状图
nexttile;
histogram(y,10,'FaceColor','r');%%数字10指定bin数目
title('柱状图');
MATLAB的快速入门

离散数据图形

errorbar(x,y,err)

误差棒图

stem(x,y)

火柴杆图

stairs(x,y)

阶梯图

%绘图
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
x=[93.3 93.1 94.7 90.1 95.6 90.0 94.7];
y=[85.6 94.9 96.2 95.1 95.8 96.3 94.1];
e=abs(x-y);
tiledlayout(2,2);
nexttile;
errorbar(y,e);
title('误差棒图');
x=-2:0.1:2;
y=exp(x);
z=exp(-x);
nexttile;
stem(x,y);
title('二维火柴图');
nexttile;
stem3(x,y,z);
title('三维火柴图');
nexttile;
stairs(x,y);
title('阶梯图');
MATLAB的快速入门

向量图形

compass(U,V)

罗盘图

feather(U,V)

羽毛图

quiver(U,V)

箭头图/矢量图

%绘图
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
x=linspace(-4,4,50);%%定义俩个相同的向量x,y
y=x;[X,Y]=meshgrid(x,y);%%%基于向量下x,y创建二维网格数据矩阵X,Y
Z=X.*exp(-X.^2-Y.^2);%%%使用函数表达式定义矩阵z
[U,V]=gradient(Z,2,2);
contour(X,Y,Z);
hold on;
quiver(X,Y,U,V);
axis image
xlim([-2 2]);
ylim([-2 2]);
MATLAB的快速入门
%绘图
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
x=-pi:pi/10:pi;%%定义俩个相同的向量x,y
y=sin(x);
subplot(1,2,1);
compass(x,y);
title('罗盘图');
subplot(1,2,2);
feather(x,y);
title('羽毛图')
MATLAB的快速入门

三维绘图

plot3(x,y,z)

plot的三维拓展

mesh(X,Y,Z)

绘制三维网格图

surf(X,Y,Z)

绘制三维曲面图

contour(X,Y,Z)

绘制二维等值线

contourf(X,Y,Z)

绘制二维等值线

%绘图
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
x=linspace(-4,4,50);%%定义俩个相同的向量x,y
y=x;[X,Y]=meshgrid(x,y);%%%基于向量下x,y创建二维网格数据矩阵X,Y
Z=X.*exp(-X.^2-Y.^2);%%%使用函数表达式定义矩阵z
[U,V]=gradient(Z,2,2);%%%设置矩阵梯度tiledlayout(3,2)
nexttile
mesh(X,Y,Z);
title('网格图');
xlim([-2 2]);
ylim([-2 2]);nexttile
surf(X,Y,Z);
title('曲面图');
xlim([-2 2]);
ylim([-2 2]);nexttile
contour(X,Y,Z,20);
title('二维等值线图');
xlim([-2 2]);
ylim([-2 2]);nexttile
contourf(X,Y,Z,20);
title('填充二维等值线图');
xlim([-2 2]);
ylim([-2 2]);nexttile
quiver(X,Y,U,V);
title('梯度图');
xlim([-2 2]);
ylim([-2 2]);nexttile
streamslice(X,Y,U,V);
title('密度梯度流线图');
xlim([-2 2]);
ylim([-2 2]);
MATLAB的快速入门

第七部分:方程求解

代数方程求解

poly2sym

使用系数向量表示;输出结果为字符

roots

求多项式的根

fzero(fun,x0)

函数找到x0附近函数fun(x)的零点

%poly2sym     使用系数向量表示;poly2sym输出结果为字符
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
p1=[1 2 3];
p2=[2 3 1];
p3=[1 1 2 3 4 5];
poly2sym(p1)
poly2sym(p2)
poly2sym(p3)
MATLAB的快速入门
%roots求解多项式的根
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
p1=[1 2 3];
p2=[2 3 1];
p3=[1 1 2 3 4 5];
r1=roots(p1);
r2=roots(p2);
r3=roots(p3);
MATLAB的快速入门
%fzero函数找到x0附近函数fun(x)的零点
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
myfun=@(x,a)cos(a*x);
a=2;
fun=@(x)myfun(x,a);
x0=fzero(fun,0.1);
x=fzero(fun,0.1);
MATLAB的快速入门

常微分方程求解

  • 龙格-库塔方法(Runge-Kutta) :基本求解器选择 ode45 适用于大多数 ODE 问题,一般情况下应作为您的首选求解器。但对于精 度要求更宽松或更严格的问题而言,ode23、ode78、ode89 和 ode113 可能比 ode45 更加高效。

MATLAB的快速入门

非刚性求解器

刚性求解器

ode45

四阶、五阶R-K函数求解非线性微分方程的中阶方法

ode15s

求解刚性微分方程和 DAE 变阶方法,精度较低

ode23

二阶、三阶R-K函数 求解非线性微分方程的低阶方法

ode23s

求解刚性微分方程 低阶方法,速度较快

ode78

求解非刚性微分方程 - 高阶方法

ode23t

求解中等难度的刚性问题

ode89

求解非刚性微分方程 - 高阶方法

oder23tb

求解难度较大的问题

ode113

求解非刚性微分方程 - 变阶方法

例如:利用R-K方法求解微分方程dy/dt=2t,其中0<t<5,y(0)=0。

%绘图
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
tspan=[0 5];%积分区间定义
y0=0;%初始条件
[t,y]=ode45(@(t,y)2*t,tspan,y0);%%%计算微分方程在指定积分区间的积分
plot(t,y,'-o');
xlabel('t');
ylabel('y');
MATLAB的快速入门

利用R-K方法求解微分方程MATLAB的快速入门,其中MATLAB的快速入门.

MATLAB的快速入门,将方程转换成一阶常微分方程:MATLAB的快速入门MATLAB的快速入门

%绘图
clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
tspan=[0,20];
mu=1;
y0=[2 0];
[t,y]=ode45(@(t,y)fun(t,y),tspan,y0);
plot(t,y(:,1),'ro-',t,y(:,2),'k:p','LineWidth',2);
function dydt=fun(~,y)dydt=zeros(2,1); dydt(1)=y(2);dydt(2)=(1-y(1).^2).*y(2)-y(1);
end
MATLAB的快速入门

数值积分

数值积分官网

int(f)

求函数f的原函数

int(f,a,b)

求函数f在[a b]上的定积分 (解析解)

integral(f,a,b)

求函数f在[a b]上的定积分 (数值解)

integra2l(f,xmin,xmax,ymin,ymax)

求函数f的二重积分

trapz

求离散数据的数值积分

clc;%%清除命令行窗口
clf;%%清除图形窗口
clear;%%清除工作区数据
close;%%清除打开的matlab文件
%普通数值积分
fun1=@(x)exp(-x.^2).*log(x).^2;
q1=integral(fun1,0,Inf)
%参数化函数数值积分
fun2 = @(x,c) 1./(x.^3-2*x-c);
q2 = integral(@(x) fun2(x,5),0,2)
%积分限为奇异点的数值积分
fun3 = @(x)log(x);
q3 = integral(fun3,0,1,'RelTol',0,'AbsTol',1e-12)
%复函数的围道积分
fun4 = @(z) 1./(2*z-1);
q4 = integral(fun4,0,0,'Waypoints',[1+1i,1-1i])
MATLAB的快速入门

第八部分:数据拟合

安装数据拟合器---Curve Fitting Toolbox

MATLAB的快速入门

polyfit(x,y,n)

用二乘法对已知数据x,y进行拟合,以 求得n阶多项式系数向量

linefit(x,y)

最小二乘法直线拟合