Matlab的使用

发布时间:2023年12月26日

这里记录了我学习matlab的笔记,主要包括了简单的设置,数据类型,计算,format的使用,函数的使用,存储和文件操作,保存文件,绘图...,主要是学习了台湾大学郭彦福的matlab课程。其实matlab的语法跟c语言等编程语言的语法很像,我们只需要略微花一点点时间看看语法就可以基本掌握matlab的简单使用。

1. 一些简单的设置

1.1 设置初始路径

1.2 界面

新建脚本会打开一个编辑器,

可以在编辑器中输入相对应的代码

1.3 简单操作

Ctrl + C?: 停止程序运行

clear all?: 清除Workspace 中的所有变量(右侧工具区)

clc?: 清除Command Window 中的所有命令(命令行窗口)

close all?: 关闭所有的图

%%:独占一行的注释(有上下横线的分割)

%?: 普通注释

;?: 若在编写代码时,我们未写;的时候,命令行窗口会详细显示我们的计算过程。

...?: 续行符,在命令结束后面,加续行符,下一行可以继续写命令

A = [1 2 3 4 5 6 ...
     6 5 4 3 2 1];

2. 数据类型

whos :查看数据类型

2.1 数字

1 + 1;
2 - 1;
2 * 1;   % 数字相乘,数字与符号相乘
3 / 3;
a.*a;     % a^2(元素与元素之间相乘)

2.2 字符与字符串

s = 'a';                 % 定义单个字符
abs(s) ;                 % 得到对应的ASCII码
char(97);                % 得到ASCII码对应的字符
num2str(97);             % 得到数字97
str = 'hello world';     % 定义字符串
length(str);             % 得到字符串的长度
str(1): h                % 对str进行索引
str = 'aardvark';
'a' == str
str(str=='a') = 'z'
ans = 1 1 0 0 0 1 0 0
str = 'zzrdvzrk'

练习题,让s2为逆序的s1

s1 = 'I like the letter E';
s2 = '';
for i = length(s1):-1:1
    s2 = [s2 s1(i)];
end

2.3 矩阵

①矩阵的定义

A = [1 2 3; 4 5 2; 3 2 7];
B = zeros(5, 4, 3)       ;             % 5行4列3维的矩阵
c = 1:2:100                            % 从1到100等差为2的等差数列构成的集合
F = [A B]                              % 表示A B的增广矩阵
A(1,1) = {[1 4 3; 0 5 8; 7 2 9]};      % 构造分块矩阵,每一块可以不一样
A(1,2) = {'Anne Smith'};
A(2,1) = {3+7i};
A(2,2) = {-pi:pi:pi};
A =

1 2 3
4 5 6
7 8 9

A(4) A(5)

2
5

A([1 3 5]) A([1 3]) A([1 3; 1 3])
1 7 5
1 7
1 7
1 7

A(1,3) A([1 3], [1, 3])
3
1 3
7 9

②矩阵和向量的四则运算

A * B            ;          % 矩阵相乘
A + B            ;          % 矩阵相加
A - B            ;          % 矩阵相减
A / B(A*inv(B)) ;          % 矩阵的除法(逆矩阵)
A .* B           ;          % 每个对应元素相乘
A ./ B           ;          % 每个对应元素相乘
A = [1 2 3; 4 5 6; 7 8 9]
B = [3 4 5; 6 7 8; 9 10 11]
A .* B
3 8 15
24 35 48
63 80 99

③矩阵的函数

B = A'                 % 矩阵的转置 
eye(n)                 % 对角线为1,其他为0的nxn的矩阵
zeros(n1, n2)          % 全为0的n1xn2的矩阵
ones(n1, n1)           % 全为1的n1xn2的矩阵
diag([a1, a2, a3])     % 对角线为a1,a2,a3,其他为0的对角矩阵
max(A)                 % 对于矩阵中每一列找出最大值(min,sum,mean)
max(max(A))            % 矩阵中最大的值
sort(A)                % 矩阵每一列排序
sortrows(A)            % 矩阵每一行排序
find(A=a)              % 矩阵中为a的位置
B =
? 1 4 3
? 2 5 2
? 3 2 7

④矩阵的拉长

B = A(:) ;              % 竖向拉长
B =
? 1
? 2
? 3
? 4
? 5
? 2
? 3
? 2
? 7

⑤矩阵的逆矩阵

B = inv(A);           % 逆矩阵(非方针无法求逆)
B =
-0.9118 0.2353 0.3235 0.6471 0.0588 -0.2941 0.2059 -0.1176 0.0882

⑥随机数的矩阵

rand():

??rand(m,n)?: m行n列的均匀分布的伪随机数矩阵(0-1)

??rand(m,n,'double')?: m行n列的指定精度的伪随机数矩阵,参数还可以为“single”

??rand(RandStream, m, n)?: 指定RandStream(随机种子)m行n列的伪随机数矩阵

randi() :

??randi(iMax, m, n)?: m行n列的均匀分布的伪随机数矩阵(0-iMax)

??randi([iMin, iMax], m, n)?: m行n列的均匀分布的伪随机数矩阵(iMin-iMax)

randn():

??randn(m,n)?: m行n列的标准正态分布的伪随机数矩阵(均值为0 ,方差为1)

A = rand(10,5)      ;  % 10行5列的随机矩阵
B = randi(5,10,5)   ;  % 10行5列的随机矩阵,最大值为5
C = randn(10,5)     ;  % 10行5列的随机矩阵,标准正态分布(均值为0,方差为1)
A =
0.1934 0.9508 0.8954 0.1439 0.0946 0.7544 0.4976 0.5825 0.6060 0.3232 0.3463 0.7551 0.5827 0.2545 0.7696 0.4186 0.7424 0.8549 0.3242 0.2341 0.1557 0.8311 0.0349 0.4018 0.7404 0.8190 0.1565 0.8854 0.4064 0.6928 0.6249 0.4573 0.4077 0.3862 0.8241 0.7386 0.6181 0.0364 0.6098 0.8280 0.8051 0.9322 0.7461 0.1669 0.2934 0.0672 0.8351 0.1548 0.1881 0.3094

B =
3 3 5 4 4 2 5 5 3 4 5 4 3 2 4 5 5 1 5 1 3 2 3 3 5 2 3 2 5 1 4 1 2 5 3 2 4 2 2 4 3 4 1 3 4 2 5 4 2 2

C =
0.6067 -0.7784 0.5501 1.0336 2.9745 1.6345 1.0996 1.8551 0.4198 -0.6226 -0.6235 -0.8556 -0.2773 0.6011 1.9203 -1.3501 0.0076 1.0666 -0.6740 0.9611 -1.1622 -0.9376 -2.0992 -1.0952 -0.5578 -0.9443 -0.6816 0.6385 -0.2676 -0.1066 -0.6712 -0.2601 0.3715 0.1866 -0.2152 0.5767 -0.2288 -0.3742 0.9509 0.4735 -2.0858 -0.5248 0.6953 -0.7905 1.3656 0.2360 1.1283 0.8776 -0.4895 -1.6378

⑦多维矩阵

行 、 列、层

⑧cat(n, A, B)

cat函数用于拼接矩阵, n为1、2、3,A、B为矩阵

1表示行, 2表示列, 3表示层

⑨reshape(A,n, m)

reshape函数用于将矩阵变为n行m列的矩阵

A = [1: 3; 4: 6];
B = reshape(A, 3, 2)

2.4 结构体

student.name = 'John Doe';
student.id = 'aaaa';
student.number = 301073268;
student.grade =[100, 75, 73;...
                 95, 91, 85;...
                100, 98, 72];
student
studetn =
? id: 'aaaa'
? number: 301073268
? grade: [3x3 double]
? name: 'John Doe'
student(2).name = 'John ';
student(2).id = 'aa';
student(2).number = 301;
student(2).grade =[100, 75, 73;...
                 95, 91, 85;...
                100, 98, 72];
student
student =
包含以下字段的 1×2 struct 数组:
? id ? number ? grade ? name

2.5 常用函数

①指数函数

exp()               %指数函数

②三角函数

sin()               %角度为弧度制
sind()              %角度为角度(在三角函数后面加d)

③abs函数

abs函数可以用于求实数的绝对值、复数的模、字符串的ASCII码

a = abs(-4)             % 实数的绝对值
b = abs(3+4i)           % 复数的模
c = abs('a')            % 字符串的ASCII码
a =
? 4
b =
? 5
c =
? 97

④取整函数(round、fix、floor、ceil)

a = round(4.7)          % round()四舍五入取整
b = fix(-3.2)           % fix()固定取靠近0的那个整数,也就是舍去小数取整
c = florr(3.6)          % floor()向下取整,取小于等于这个数的第一个整数
d = ceil(-3.8)          % ceil()向上取整,取大于等于这个是的第一个整数
a =
? 5
b =
? -3
c =
? 3
d =
? -3

⑤时间函数tic toc

用于计算时间,得到程序运行的时间

tic
for variable=start:increment:end         
    commands
end
toc

2.6 预定义变量

  • ans为默认赋值变量
  • i和j代表虚数单位
  • pi代表圆周率
  • NaN代表非数
  • Inf: ∞

删除某个变量:

? 在工作区内,鼠标右击该变量,选择删除

查看变量:

a = 1;
b = 2;
who
whos
您的变量为:
a b
Name Size Bytes Class Attributes
a 1x1 8 double
b 1x1 8 double

管理变量

save命令:创建内存变量文件,存储变量

load命令:装入内存变量文件

save mydata a x      % mydata为文件名(mydata.mat)
load mydata          % mydata.mat内变量作为已知变量
% for循环语句
for i=1:n         
    i
End

% 表示长度
N = length(X)

%平均分成等分
x = linspace(x1,x2,N)       

ones(5,1)    %全1
zeros(2,3)   %全0

% 函数
y = (x-1).^2  % 次方为 .^ n


% 定义函数
function [输出] = Lagrange(输入)

%输入
%输出

计算代码

end

3.计算

+, -, *, /, ^
ln(x)函数: log(x)
e*x函数: exp(x)
n!:prod(1:n)
1x10^100:1e100
遵循所有运算法则

4.format的使用

styleExample
shortshort类型43.1416
longlong类型153.141592653589793
shortE4科学计算3.1416e+00
longE15科学计算3.141592653589793e+00
bank2科学计算3.14
hex16进制400921fb54442d
rat转换为有理数355/113
fromat long
pi
3.141592653589793
format rat 3/13
3/13
3/13 2.307692307692308e-01

5.函数的使用

5.1 操作:

①文件名不可以以数字开头,大小写差别

②点击F5可以直接运行程序

③使用Ctrl+R可以对代码进行注释,Ctrl+Shift+R取消注释(利用每行一个%进行注释)

④使用Ctrl+I可以进行自动缩进

edit(which('mean.m')) % 打开内置函数

5.2 Debug:

使用两个百分号%%进行分为两个节,运行节的时候可以点击运行节

点击该行的数字,并点击运行,可以跳过该行

实例中点击3,运行的时候跳过第3行

5.3 语句的使用

OperatorMeaning
<小于
<=小于等于
>大于
>=大于等于
==等于
~=不等于
&&
||
Flow ControlMeaning
if, elseif, else判断语句
for循环语句
switch, case选择语句
while循环语句
break终止语句
continue终止语句
end终止语句
pause
return

①if elseif else

判断语句

if condition1                    % 一定要有
    statement1
elseif condition2                % 可以没有
    statement2
else                             % 可以没有
    statement3
end

②switch case

选择语句

switch expression
case value1            % value1=expression,执行statement1
    statement1
case value2            % value2=expression,执行statement2
    statement2
case value3            % value3=expression,执行statement3
    statement3
otherwise              % 上面都不成立,执行statement4
    statement4
end

③while

循环语句

while expression    % expression条件成立,执行statement;否则跳出循环
    statement     
end

④for

循环语句

for variable=start:increment:end         % variable为变量,increament为步长,start为开始点,end为结束点(包含end)
    commands
end

练习题,将A矩阵复制到B矩阵中,但是需要将A矩阵中的负数修改为正数

A = [0 -1 4; 9 -14 25; -34 49 64];        % A矩阵
B = zeros(size(A));                       % 创建一个与A同大小的零矩阵
for i=1:size(A, 1)                        % 遍历A的每一行
    for j=1:size(A, 2)                    % 遍历A的每一列
        if A(i, j) < 0                    % 若该元素小于0
            B(i, j) = -A(i, j);           % 则将该元素的负数赋给B
        else                              % 否则直接赋给B
            B(i, j) = A(i, j);
        end
    end
end

⑤break

终止语句

5.4 自定义函数

呼叫函数

打开函数文件

edit(which('mean.m')) % 打开mean函数

定义函数

keyword output = function name(input)
%commend
%
%
...
code

例子:

function x = study(x0, v0, t)
% 计算自由落体运动
% x0: 初始位置
% v0:初速度
% t: 运动时间
% x: 下降位置
x = x0 + v0.*t + 1/2*9.8*t.*t;

funciotn [a F] = acc(v2, v1, t2, t1, m)  % 输入多个参数(),输出多个参数[] 
a = (v2- v1)./(t2-t1);
F = m.*a;
end

调用函数

cos(10)                 % 输入一个参数
cos([1 2 3 4 5])        % 同时输入多个参数
ans = -0.839071529076452
ans =0.54030230586814 -0.416146836547142 -0.989992496600445 -0.653643620863612 0.283662185463226

参数

parametermeaning
inputnamevariable name of function input
mfilenameFile name of currently running funcition
narginNumber of function input arguments
nargoutNumber of function output arguments
vararginVariable length input arguments list
varargoutVariable length ouput arguments list

初等函数

f = @(x) exp(-2*x);   % f(x) = e^(-2x)
x = 0:0.1:2;          % x = (0.1 0.2 0.3 ... 2)
plot(x,f(x));         % x为横坐标,f(x)为纵坐标画图

6.储存和打开文件

6.1 存储变量

①save()函数

用于存储该文件中的变量

a = magic(4);
b = magic(2);
save("mydata.mat", "-ascii")       % 以ASCII码的形式存储所有变量到mydata.mat文件内(默认当前目录内,可以为任意文件目录下)
save("mydata.mat", "a", "-ascii")  % 以ASCII码的形式只存储a变量到mydata.mat文件内 (即文件路径)

②load()函数

用于下载文件,以便能在matlab变量栏中打开

load ("mydata.mat", "-ascii")       % 前面为ascii这里也为ascii
load("mydata.mat", "a", "-ascii")

6.2 打开execl文件

①readtable()函数

用于打开execl文件,并读取文本

score = readtable("文件.xlsx")                     % 读取文本
data = readtable("文件.xlsx", "Range", "B2:D4");   % 读取文本的第B列到第D列,第2行到第4行

②readmatrix()函数

用于打开execl文件,并读取矩阵

score = readmatrix("文件.xlsx")                     % 读取文本
data = readmatrix("文件.xlsx", "Range", "B2:D4");   % 读取矩阵的第B列到第D列,第2行到第4行

③readcell()函数

用于打开execl文件,并读取元胞数组(cell)

score = readcell("文件.xlsx")                     % 读取文本
data = readcell("文件.xlsx", "Range", "B2:D4");   % 读取元胞数组的第B列到第D列,第2行到第4行

④xlsread()函数

[data header] = xlsread("文件.xlsx")  % data读取数字,header读取标题

6.3 写入excel文件

①xlswrite()函数

x = [1 2 3];
xlswrite("文件.xlsx", x, 1, "E2:E4");        % 将矩阵x添加到第一页,第E列,第2行到第4行
xlswrite("文件.xlsx", {'mean'}, 1, ' E1');   % 将文字mean添加到第一页,第E列,第1行中

② writematrix()函数

x = [1 2 3];
writematrix(x, "文件.xlsx", 'Sheet', 1, "Range", "E2:E4");  % 将x矩阵添加到第E列的第2行到第4行

③ writecell()函数

writecell(x, "文件.xlsx", 'Sheet', 1, "Range", "E2:F4");  % 将x元胞数组添加到第E列到第F列,第2行到第4行

6.4 其他操作

绘图

plot()函数

用于绘图,==只保留最后一个图形==,其他图形会被清除

plot(x, y)  % x为横坐标,y为纵坐标
plot(y)     % 默认x=1, 2, 3...

hold on/off

==用于保留图形==,保证图形不被清除

hold on
plot(cos(0:pi/20:2*pi))    % 绘制两个图像,一个为cos,一个为sin
plot(sin(0:pi/20:2*pi))    % 共同保留在一共图内
hold off

example:

str字符

==用于改变图像的颜色,类型,标记==

plot(x, y1, '--*')          % '--*'为str字符

legend()函数

用于给出==图标==

lengend('function1', 'function2'...)     % 标记function1、function2...等图标

title()函数和label()函数

title('名称')用于给出==图像名称==

title('名称')

xlabel('名称')、ylabel('名称')、zlabel('名称')用于给出==xyz坐标名称==

xlabel('名称')
ylabel('名称')
zlabel('名称')

exapmel:

x = 0:0.1:2*pi;
y1 = sin(x); y2 = exp(-x);
plot(x, y1, '--*', x,y2, ':o');
xlabel('t=0 to 2\pi');                          % 2\pi为2Π         x坐标的名称
ylabel('values of sin(t) and e^{-x}');          % e^{-x}为e^(-x)   y坐标的名称
title('Function Plots of sin(t) and e^{-x}');                      图像的名称
legend('sin(t)', 'e^{-x}');

text()函数和annotation()函数

text()函数用于将函数写在图像内

str = '$$    function       $$';                     % function可以为任意
text(x坐标, y坐标, str, 'Interpreter', 'latex')
annotation('arrow', 'X', [ , ], 'Y', [ , ]);        % X:[ , ],Y:[ , ]

exampel:

str = '$$ \int-{0}^{2} x^2\sin(x) dx $$';          % \int表示积分符号,{0}^{2}表示积分区间,
text(0.25, 0.25, str, 'Interpreter', 'latex');     % (0.25,0.25)为坐标
annotation('arrow', 'X', [0.32,0.5], 'Y', [0.6, 0.4]); % X:[0.32,0.5],Y:[0.6,0.4]

图像修改

①修改handle,利用变量存储

h = plot(x,y);

②取回和设定物件

h = plot(x,y);
get(h)
set(h, "XLim", [0, 2*pi]);
set(h, "YLim", [-1.2, 1.2]);

③Axes Limits

④Font and Tick of Axes

⑤Line Specification

⑥Marker Specificaiton

绘制多个图像

x = -10:0.1:10;
y1 = x.^2 - 8;
y2 = exp(x);
figure, plot(x,y1);  % 图像1,在figure1
figure, plot(x,y2);  % 图像2,在figure2

指定位置和大小

figure('Position', [left, bottom, width, height]);

在一个figure中绘制多个图像

subplot(m, n, 1)              % figure1上面
subplot(n,m,1); plot(x,y1);
subplot(n,m,2); plot(x,y2); 
subplot(n,m,3); plot(x,y3);
subplot(n,m,4); plot(x,y4);

控制gridboxaxis

functionmeaning
grid on/off控制坐标区网格线
box on/off控制坐标区轮廓
axis on/off控制坐标轴
axis normal自动调整轴的纵横比和数据单元的实际缩放比例
axis square使当前轴区域为方形
axis equal设置纵横比,使数据单位在每个方向上都相同
axis equal tight将轴限制设置为数据范围
axis image让图表紧紧围绕数据
axis ij将坐标系的原点放置在左上角
axis xy将原点放置在左下角

保存图片

formattype:

optionBitmap Image Format(放大会模糊)
'jpeg'JPEG 24-bit
'png'PNG 24-bit
'tiff'TIFF 24-bit(compressed)
'bmpono'BMP Monochrome
'bmp'BMP 24-bit
'bmp256'BMP 8-bit(256 color, uses a fixed colormap)
optionVector Graphics Format(放大不会模糊)
'pdf'Full page Portable Document Format(PDF)color
'eps'Encapsulated PostScript(EPS) Level 3 black and white
'epsc'Encapsulated PostScript(EPS) Level 3 color
'meta'Enhanced Metafile(Windows only)
'svg'SVG(scalable vector graphics)
'ps'Full-page PostScript(PS) Level 3 black and white
optionVector Graphics Format(放大不会模糊)
'psc'Full-page PostScript(PS) Level 3 color

特殊的图形

文章来源:https://blog.csdn.net/2203_75893174/article/details/135211221
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。