Matlab的使用
这里记录了我学习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的使用
style | Example | |
---|---|---|
short | short类型4 | 3.1416 |
long | long类型15 | 3.141592653589793 |
shortE | 4科学计算 | 3.1416e+00 |
longE | 15科学计算 | 3.141592653589793e+00 |
bank | 2科学计算 | 3.14 |
hex | 16进制 | 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 语句的使用:
Operator | Meaning |
---|---|
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
== | 等于 |
~= | 不等于 |
&& | 且 |
|| | 或 |
Flow Control | Meaning |
---|---|
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
参数
parameter | meaning |
---|---|
inputname | variable name of function input |
mfilename | File name of currently running funcition |
nargin | Number of function input arguments |
nargout | Number of function output arguments |
varargin | Variable length input arguments list |
varargout | Variable 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);
控制grid、box、axis
function | meaning |
---|---|
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:
option | Bitmap 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) |
option | Vector 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 |
option | Vector Graphics Format(放大不会模糊) |
---|---|
'psc' | Full-page PostScript(PS) Level 3 color |
特殊的图形
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!