许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  MATLAB语法笔记:核心语法与编程技巧总结

MATLAB语法笔记:核心语法与编程技巧总结

阅读数 5
点赞 0
article_banner

matlab | 语法笔记

命令行窗口

Ⅰ. 清空 环境变量  及命令

clear all  %清除Workspace中的所有变量
clc        %清除Command Window中的所有命令

Ⅱ. 变量命名规则

1. 变量名区分大小写
A = 2
a = 3
2. 变量名长度不超过63位
% ABCDEFGHIJKLMNOPQRSTUVWXYZ123456ABCDEFGHIJKLMNOPQRSTUVWXYZ123456 = 3
3. 变量名以字母开头,可以由字母、数字和下划线组成,但不能使用标点
% 3A = 4
% .a = 5
% /b = 5
a_2 = 3
% a.2 = 4
4. 变量名应简洁明了,通过变量名可以直观看出变量所表示的物理意义
A = rand(3, 5)
rows = size(A, 1)
cols = size(A, 2)

Ⅲ. MATLAB 数据类型  

1. 数字
2 + 4
10 - 7
3 * 5
8 / 2
2. 字符与字符串
s = 'a'
abs(s)        %输出s的ASCII码
char(65)      %根据ASCII码输出字符
num2str(65)

str = 'I Love MATLAB & Machine Learning.'

length(str)    %计算字符串的长度
3. 矩阵
A = [1 2 3; 4 5 2; 3 2 7]
B = A'       %矩阵B为矩阵A的转置
C = A(:)     %将矩阵A按列拉长
D = inv(A)   %D为矩阵A的逆,inv()非方阵不能求逆
A * D        

E = zeros(10, 5, 3)              %创建3个10行5列的值全为0的矩阵
E(:, :, 1) = rand(10, 5)         % rand生成均匀分布的伪随机数。分布再(0-1)之间
								 % 语法:rand(m, n)生成m行n列的均匀分布的伪随机数
                                 % rand(m, n, 'double')生成制定精度的均匀分布的伪随机数,参赛还可以是'single'
                                 % rand(RandStream, m, n)利用指定的RandStream(随机种子)生成伪随机数
                                 
E(:, :, 2) = randn(10, 5)        %生成标准正态分布的伪随机数(均值为0, 方差为1)
							     % 语法:和上面一样

E(:, :, 3) = randi(5, 10, 5)     % randi生成均匀分布的伪随机数
								 % 语法:randi(iMax)在开区间(0, iMax)生成均匀分布的伪随机整数
								 % randi(iMax, m, n),在开区间(0, iMax)生成m * n型随机矩阵
								 % r = randi([iMin, iMax], m, n)在开区间(iMin, iMax)生成m * n型随机矩阵
								 

4. 元胞数组
A = cell(1, 6)
A{2} = eye(3)   %eye(n)生成n * n的对角线数值为1的单位矩阵,matlab的索引从1开始,python、C++等索引从0开始
A{5} = magic(5) %magic(n)生成n阶的幻方,把[1, n^2]排成n阶矩阵,使得矩阵的每行、每列、以及主、副对角线上面的n个数之和都相等,且等于n * (n^2 + 1) / 2
B = A{5}
5. 结构体  
books = struct('name', {{'Machine Learning', 'Data Mining'}}, 'price', [30 40])
books.name       %在books中选择name这个属性
books.name(1)    %用小括号()取出的是cell
books.name{1}    %用大括号{}取出的是字符串

Ⅳ. MATLAB矩阵操作

1. 矩阵的定义与构造
A = [1 2 3 5 8 5 4 6]
B = 1:2:9             % begin:步长:end ->[1 3 5 7 9]
C = repmat(B, 3, 2)   % 把矩阵B按行重复3次,按列重复2次,即以B(n, m)为单位,构成3 * n行,2 * n列的矩阵
D = ones(2, 4)        %ones(n, m)生成n行m列的矩阵,其中值全为1
2. 矩阵的四则运算
A = [1 2 3 4; 5 6 7 8]
B = [1 1 2 2; 2 2 1 1]
C = A + B     % 对应项相加
D = A - B     % 对应项相减
E = A * B'    % A为2行4列,B也为2行4列,不能相乘,B的转置B‘为4行2列可以与A相乘
F = A .* B    % 对应项相乘
G = A / B     % A / B 相当于 A * B的逆,即A * pinv(B) 
			  % G * B = A -> G * B * pinv(B) = A * pinv(B) -> G = A * pinv(B),相当于A * B的逆
H = A ./ B    % 对应项相除
3. 矩阵的下标
A = magic(5)
B = A(2, 3)             % 矩阵A第2行第3列的值
C = A(3, :)             % 矩阵A第3行的值
D = A(:, 4)             % 矩阵A第4列的值
[m, n] = find(A > 20)   % 返回矩阵A中大于20的索引,m存行,n存列

find(A)                  % 返回向量或者矩阵中不为0的元素的位置索引
find(A == x)             % 返回向量或者矩阵中等于x的元素的位置索引
find(A > x)              % 返回向量或者矩阵中大于x的元素的位置索引

Ⅴ. MATLAB逻辑与流程 控制

一、循环结构

1. for循环结构

其中,步长的默认值为1,可以省略

初值、步长、终值可以是正数也可以是负数,还可以是整数,也可以是小数,只要符合数学逻辑即可

for 循环变量 = 初值 : 步长 : 终值
	执行语句 1
	执行语句 2
	........
	执行语句 n
end

% 求1^2 + 2^2 + 3^2 + 4^2 + 5^2的和
sum = 0
for n = 1 : 5
	sum = sum + n
end


2. while循环结构
while 条件表达式
	执行语句 1
	执行语句 2
	........
	执行语句 n
end

% 求1 + 2 + 3 + 4 + 5 + ..... + 10的和
s = 0
n = 1
while n <= 10
	s = s + n
	n = n + 1
end
二、分支结构

3. if … end结构

if 条件表达式
	......
	语句体
	......
end

% 用if ... end 结构编写一段程序,要求满足条件时系统显示 ”成立“。
a = 100
b = 20
if a > b
	'成立'
end

4. if … else … end 结构
if 表达式
	语句体1
else
	语句体2
end

% 用if ... else ... end 结构编写一段程序,要求满足条件时系统显示 ”成立“,不满足条件时系统显示 ”不成立“。
a = 100
b = 20
if a > b
	'成立'
else
	'不成立'
end

5.switch … case … end 结构

otherwise可以省略

switch 表达式(数值或字符串)
	case 数值或字符串1
		语句体 1
	case 数值或字符串2
		语句体 2
	.........
	otherwise
		语句体 n
end

Ⅵ. MATLAB基本绘图操作

1.二维平面绘图
x = 0 : 0.01 : 2*pi       % 定义x
y = sin(x)                % 定义y
figure                    % 建立一个幕布
plot(x, y)                % 按(x, y)来绘图
title('y = sin(x)')       % 起一个标题
xlabel('x')               % x轴的标签
ylabel('sin(x)')          % y轴的标签
xlim([0 2*pi])            % x轴显示的值从0到2*pi


x = 0 : 0.01 : 20
y1 = 200 * exp(-0.05 * x) .* sin(x)
y2 = 0.8 * exp(-0.5 * x) .* sin(10 * x)
figure
[AX, H1, H2] = plotyy(x, y1, x, y2, 'plot')          % plotyy()共用一个x轴坐标系
set(get(AX(1), 'Ylabel'), 'String', 'Slow Decay')    % 给y1轴加上属性为"String"(字符串)的Slow Decay的标签
set(get(AX(2), 'Ylabel'), 'String', 'Fast Decay')    % 给y2轴加上属性为"String"(字符串)的Fast Decay的标签
xlabel('Time (\musec)')                              % 给x轴加上Time (\musec)的标签
title('Multiple Decay Rates')                        % 设置一个标题:Multiple Decay Rates
set(H1, 'LineStyle', '--')                           % 设置H1的线型(LineStyle)为虚线
set(H2, 'LineStyle', ':')                            % 设置H2的线型(LineStyle)为冒号线


% 线性选项参数(LineStyle)
% 线型   符号 
% 实线   -
% 虚线   --
% 冒号线 :
% 点画线 -.
2.三维立体绘图
t = 0 : pi/50 : 10*pi
plot3(sin(t), cos(t), t)       % plot3(x, y, z)绘制一个三维的图
xlabel('sin(t)')               % x轴的标签
ylabel('cos(t)')               % y轴的标签
zlabel('t')                    % z轴的标签
grid on                        % 在图片上增加网格线
axis square                    % 将图片变成看起来像正方体

hold on                        % 允许在同一个幕布当中,保留原来的线,再绘制其他的线
hold off                       % 不保留当前的线,重新在幕布上绘制线
3.图形窗口的分割
x = linspace(0, 2*pi, 60);
subplot(2, 2, 1)           %把窗口分割成2行2列的小方块,选择第1个小方块绘图
plot(x, sin(x)-1);
title('sin(x)-1');
axis([0, 2*pi, -2, 0])     %设置x,y的定义域, x为[0, 2*pi], y为[-2, 0]

subplot(2, 1, 2)           %把窗口分割成2行1列的小方块,选择第2个小方块绘图
plot(x, cos(x)+1);
title('cos(x)+1')
axis([0, 2*pi, 0, 2])      %设置x,y的定义域, x为[0, 2*pi], y为[0, 2]

subplot(4, 4, 3)           %把窗口分割成4行4列的小方块,选择第3个小方块绘图
plot(x, tan(x));
title('tan(x)')
axis([0, 2*pi, -40, 40])   %设置x,y的定义域, x为[0, 2*pi], y为[-40, 40]

subplot(4, 4, 8)           %把窗口分割成4行4列的小方块,选择第8个小方块绘图
plot(x, cot(x));
title('cot(x)')
axis([0, 2*pi, -35, 35])   %设置x,y的定义域, x为[0, 2*pi], y为[-35, 35]

在这里插入图片描述

linspace( )函数

用法:linspace(x1, x2, N)

功能:linspace是Matlab中的一个指令,用于产生x1,x2之间的N点行矢量。其中x1、x2、N分别为起始值、中止值、元素个数。若缺省N,默认点数为100。

X = linspace(1, 100, 1)
将产生从1到100步长为1的数组。类似于在命令窗口中输入:X = [1 : 1 : 100]

X = linspace(5, 100, 20)
将输出:X = 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100
这和X = [5 : 5 : 100]的效果是一样的。
4.图形的保存与导出
%  编辑 -> 复制图形    % 复制图形后可以之间在word里面用Ctrl+v就可以把图片粘贴上去
%  文件 -> 另存为      % 可以选择以图片的形式另存为
%  文件 -> 导出设置    % 在这里对图形的大小进行精确的设置(广泛应用于论文中)
%  编辑(Edit) -> 复制选项       % 在这里可以调节导出的图片的剪贴板格式、图形背景颜色、大小
%  编辑(Edit) -> 图形属性       % 在这里可以对图的元素进行更细节的设置
5.双峰函数
[x, y, z] = peaks(30)
mesh(x, y, z)
grid                     % 原本图上有网格线就可以取消网格线,原本没有网格线就可以显示网格线

在这里插入图片描述

peaks( )函数

​ matlab 中的 peaks 函数是一个典型的 多元函数 。它本质上是一个二元高斯分布的概率密度函数,函数表达式为
f ( x , y ) = 3 ( 1 − x ) 2 e − x 2 − ( y + 1 ) 2 − 10 ( 1 5 x − x 3 − y 5 ) e − x 2 − y 2 − 1 3 e − ( x + 1 ) 2 − y 2 f(x, y) = 3(1-x)^2e^{-x^2-(y+1)^2}-10(\frac{1}{5}x-x^3-y^5)e^{-x^2-y^2}-\frac{1}{3}e^{-(x+1)^2-y^2} f(x,y)=3(1−x)2e−x2−(y+1)2−10(51​x−x3−y5)e−x2−y2−31​e−(x+1)2−y2

f=@(x,y) 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2)- 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2)- 1/3*exp(-(x+1).^2 - y.^2);
ezmesh(f);

z = peaks;                  % 返回一个49*49的矩阵
z = peaks(n);               % 返回一个n*n的矩阵
peaks(n);                   % 没有输出参数时,这个函数直接使用surf来绘制peaks,默认n为49

clc;clear;close all;

figure(1);
z=peaks(25);
surf(z);

figure(2);
peaks(5);%没有输出值的peaks函数直接绘制表面图

[x, y, z]=peaks(25);
figure(3);
surf(x,y,z);%注意图像2和图像3坐标的差异性,相当于平移了

surf(X,Y,Z)   % 创建一个三维曲面图,它是一个具有实色边和实色面的三维曲面。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度。曲面的颜色根据 Z 指定的高度而变化。
surf(Z)       % 创建一个曲面图,并将 Z 中元素的列索引和行索引用作 x 坐标和 y 坐标。

mesh(X,Y,Z)   % 创建一个网格图,该网格图为三维曲面,有实色边颜色,无面颜色。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度。边颜色因 Z 指定的高度而异。
mesh(Z)       %创建一个网格图,并将 Z 中元素的列索引和行索引用作 x 坐标和 y 坐标

f=@(x,y) 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2)- 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2)- 1/3*exp(-(x+1).^2 - y.^2);
figure(1);
ezmesh(f);  % ezmesh(f,n)表示绘制函数f的网格图形,网格数为n*n
figure(2);
ezsurf(f); % ezmesh(f,n)表示绘制函数f的三维曲面图,网格数为n*n

surf( )函数

用surf命令绘制可以得到的是着色的三维曲面。

z1 = 0 ;  % 底面所在的平面
z2 = 2 ;  % 顶面面所在的平面
M = 20 ;  % 纬线数目
N = 20;   % 经线数目
t = linspace(0, 2*pi, N);
s = linspace(0, 2*pi, M)';
r = (2 + sin(s));
h = linspace(z1, z2, M)';
X = r*cos(t);
Y = r*sin(t); 
Z = h*ones(size(t));
surf(X,Y,Z);

在这里插入图片描述


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空