0%

matlab(1)

写在前面: 最近上数学建模课,再次开始学习MATLAB。说再次是因为一年前上过公选课,但是基本上学的都丢了。这篇文章基本上是上课都笔记和一些重要拓展知识,既是帮自己整理学习、再次入门,又是帮助大家了解MATLAB、更好地在数学建模以及其它方面使用。

另外,不要看什么《21天学会MATLAB》之类的书,不应该贪多求全地系统学习,只需要善用 help ,用什么学什么就好了

介绍

历史

参见发明人的文章: MATLAB发展简史

优点

可靠的数值运算

  • 建立在矩阵和数组上

图像和图形显示和处理

  • 二维、三维都可以画

高水平的图形界面设计风格

特点

  • 面向对象特性

  • 单一的数据类型:矩阵

  • 矩阵自动动态伸缩

  • 矩阵大小几乎任意大

  • 编程简单

  • 变量不用定义

  • 图形处理和数值计算能力

  • 系统扩充方便,随时主动添加函数

  • 帮助系统

  • 与C等语言的接口

……

界面

上方

属性区,类似于word、excel的上方工作栏

左上

项目、目录区,显示当前项目中各个文件的组合情况

点击左边一个m文件可打开编辑器,方便编程

左下

工作区,显示现在声明了哪些变量

双击打开,可以看其它信息

右边

编程区,可以完成赋值、运算等,类似python

语法

数的运算

四则运算

次方运算

初等函数

pi代表π,Inf代表无穷,i、j代表虚数,NaN代表不存在

eps:最小的数,2^(-52)

realmin: 最小实数

矩阵

声明

a=[1,1]:1个一行的矩阵

b=[1,2,3;4,5,6] :一个3*2的矩阵

c=[1 1 3]' :一个3行1列的矩阵。本质上是 ' 的转置作用

[a,a] 拼接多个矩阵

快速声明

a=[1:20] 生成从1到20的行向量,步长为1

a=1:3:20 步长为3,从1到20的行向量

a=zeros(5) ,构建一个5*5的0矩阵,其它有 a=ones(3) a=eye(3)

运算

* 矩阵相乘,也可以矩阵的数乘

.* 点乘,相同规格的矩阵对应位置的数对应相乘

A\B 左除,相当于A*X=B方程组的解

A.\B 点除,需要二者行数列数相同,每个位置的数是 b/a 的值

A/B 右除,相当于XA=B的解

inv(a) 求a的逆

函数

format long 之后的显示位数变多

format short 之后的显示位数变少

末尾打 ; 就可以不输出,不加分号会输出一下

class(a) 显示数据类型

eig(a) 求a这个矩阵的特征值、特征向量 (matlab中,函数可以返回多个值)

clc 清理右边工作区

clear 清除左下角声明的变量

a(2) a的第二个元素(不是从0开始)

a(2:4) a从第2到第4个元素

a(3:5,2:6) 索引一个子矩阵

a(3:5,2:end) 使用end 直接选到矩阵末尾

画图

二维

1
2
3
4
close all;
x=linspace(0,2*pi,100); %0~2*pi之间100个点
y=sin(x); %不要写漏括号
plot(x,y);

其中直接发挥作用的是 plot 函数

值得注意的是,x和y一定是向量,而不是一个数,做法是:x=linspace(first,end,how many)

plot 的全部属性为 plot(x,sin(x),'r-','linewidth',2) ,分别代表x的数、y的数、颜色和线形、线宽为2。

  1. - 虚线 -- 实线 : 点线 -. 点虚线。此外,附加一个d,比如 'dr-' 标记了每个取样点标记为菱形
  2. y黄色,m品红色,c青蓝色,r红色,g绿色,b蓝色,w白色,k黑色

若要画出多条曲线,只需将坐标对依次放入plot函数即可:例如 plot(x, sin(x), x, cos(x),···);

调整图轴范围 axis([xmin,xmax,ymin,ymax])

标题 title('sin(x)','fontsize',24)

xy轴属性 xlabel('x','fontsize',24)

网格 grid on

多个线画一张图:一开始加一个 hold on ,避免新图覆盖旧图

区分不同曲线,加个图例就好:legend('sin(x)','cos(x)','fontsize',20)

可用subplot来同时画出数个小图形于同一个视窗之中:

1
2
3
4
subplot(2,2,1); plot(x, sin(x));
subplot(2,2,2); plot(x, cos(x));
subplot(2,2,3); plot(x, sinh(x));
subplot(2,2,4); plot(x, cosh(x));

三维

plot3 线性图

1
2
3
4
5
6
x=0:pi/50:10*pi;
sin=sin(x);
cos=cos(x);
plot3(sin,cos,x);
title(‘helix’),text(0,0,0,’origin’);
xlabel(‘sin(x)’),ylabel(‘cos(x)’),zlabel(‘x’)

surf 曲面图

1
2
3
4
5
x=0:0.15:2*pi;
y=0:0.15:2*pi;
z=sin(y’)*cos(x);
mesh(x,y,z)
title(‘三维网格图像’)

mesh 网线图

1
2
3
4
x=0:0.15:2*pi;
y=0:0.15:2*pi;
z=sin(y’)*cos(x);
surf(x,y,z)