目录
Matlab 中的continue、break、return和 error 语句
最近在攻略ADC建模相关方面,由好多零碎的知识点,这里写个备忘录。
Matlab 判断一个数是否为整数
1. isinteger 函数
MATLAB中,可以使用 isinteger 函数来判断一个数是否为整数,例如:要判断x是否为整数可以采用以下代码
if isinteger(x)
disp('x是整数')
else
disp('x不是整数')
end
2. fix 或者 round 函数
通过对变量x取整,然后再和原值对比,判断取整后的结果,如果等于原值,则为整数。
if x==fix(x)
disp('x为整数')
end
if x==round(x)
disp('x为整数')
end
3. rem 函数
用求余函数 rem(x, 1) 来求,返回值0就是整数,返回值非0就是非整数
if rem(x, 1)==0
disp('x为整数')
end
Matlab 判断一个数的数据类型
在Matlab中,可以使用 class 函数来判断变量的数据类型。该函数返回变量的数据类型名称。例如,class(var) 可以给出变量var的数据类型。另外,还可以使用 isa 函数来判断一个变量是否属于某个特定的类别。该函数返回一个逻辑值,如果变量属于指定的类别,则返回1表示"真”,否则返回0表示“假”。在代码中,可以使用 class函数 和 isa函数 来进行数据类型的判断和比较。
如何用matlab计算二进制加法
方法一:
Q: 比如两个二进制数,0010+1100=?
如何matlab实现?
A: 二进制也好十进制也好都是一种表现形式,数据实际的值是不会因为你使用二进制还是十进制变化的。
其实正如上面的问答所说,进制不过是相互转换,加减法是与进制无关的。我们只需要知道加法、减法和乘2这类运算对于硬件来说比较简单就行了。在matlab仿真如果还需要先转化为二进制再计算,就绕远路了。
例如要计算0010 + 1100,可以直接在matlab计算 2 + 12,再把结果14转化为二进制数即可。
方法二:
Matlab Case 语句
单个的就如同C语言中的一样,不过在和switch使用的时候case后不用接 “:”
n = input('Enter a number: ');
switch n
case -1
disp('negative one')
case 0
disp('zero')
case 1
disp('positive one')
otherwise
disp('other value')
end
Matlab 通过整除判断倍数
可通过 fix 截尾取整进行判断,示例:判断一个数是否为5 的倍数
m=12;
if fix(m/5)==m/5
% 如果是5 的倍数,则输出为1
end
Matlab 计算倍数
在Matlab中,可以通过使用趋于运算符(mod)来计算一个数是否是另一个数的倍数。如果一个数a是另一个数b的倍数,则 mod(b,a)==0 。
例如,要判断一个数×是否是3的倍数,可以使用以下代码:
X=15; % 要判断的数
multiple=3; % 倍数
if mod(x,multiple) == 0
disp('x是multiple的倍数');
else
disp('x不是multiple的倍数');
end
Matlab 中计算最小公倍数
Matlab中计算最小公倍数的函数是 lcm ,使用方法如下:
lcm(x,y);
% 示例代码
lcm(6,8) % 输出结果为 6和8的最小公倍数 24
其中,x 和 y 是要计算最小公倍数的两个数。
Matlab 在工作区显示函数内的变量
在通常情况下,matlab的工作区中不会显示函数内的变量。
方法一:以函数输出的形式定义希望输出的变量:
这里的A、B、C 可以定义为结构体,好更方便的输出更多的变量。
function [A, B, C] = fucntion_name(D, E, F)
% 这里的A B C 可以定义为结构体,好更方便的输出更多的变量
方法二:使用 save load 函数,具体方法为:
这里会将 变量 保存在 文件名.mat 文件里,可省略 变量名 ,这样可以将当前所有变量存在 文件名.mat 文件里,load 时也可以省略 文件名。
save 变量名 文件名
load('文件名.mat', 变量名)
方法三:使用断点:
可以在子程序内部设置断点,然后开始运行,当停在子程序时workspace即显示子程序变量。按F10即可进行单步调试。
Matlab 控制数值精度(保留有效数字,小数点后几位)
方法一:vpa 函数
控制有效数数字位数:
digits(5); %定义精度
a=vpa(sqrt(2)); %a=1.4142
% 或者单独使用 vpa
a=vpa(sqrt(2),5); %a=1.4142
方法二:roundn 函数
可以用来控制小数点前后多少位,负数表示小数点后,正数表示小数点前。
注意与 round 的区别。round 表示把小数往最接近的整数取整
a=roundn(sqrt(2),-4); %a=1.4142
Matlab 结构体的创建和使用
对于有C语言基础的使用者,结构体这个词你可能很熟悉。
与元胞(cell)类型一样,结构体也可以存储任意类型的数据。当然,它们也存在许多不同点。最大的不同点是,结构体是以不同名字的字段作为存储容器,每个字段都可以存储任意类型的数据。此外,若要构建结构体数组,则要求每个结构体的字段数目和字段名字必须相同。下面将讲述结构体数组,单个结构体也视为1x1的结构体数组。
1. 结构体的创建
接直接定义字段,对 结构体变量名.字段名 赋值(字段的命名规则和变量一样),并且像使用一般 Matlab 变量一样,不需要事先声明,支持动态扩充。
% 单个结构体
Student.name = 'wangx';
Student.sex = 'Male';
Student.height = '170';
% 多个结构体
Student(2).name = 'zhangsan';
Student(2).sex = 'Male';
Student(2).height = 172;
或者使用函数 struct() 创建。调用格式struct(name1,data1,name2,data2....),注意这里的数据要用大括号括起来
node = struct('name', {'xiezhh', 'heping'}, 'age',{31, 22})
node(1).name
% 1x1的结构体数组
s1 = struct; % 不含字段
s2 = struct('name', '李四', 'gender', 'male');
% 1x2的结构体数组
s3 = struct('name', {'张三', '李四'}, 'gender', 'male'); % 通过元胞数组,来创建多结构体的结构体数组
s3
s3_1 = s3(1)
s3_2 = s3(2)
代码运行结果如下。注:函数的字段参数不能重复。因此,若要创建多结构体的结构体数组,必须使用元胞数组。
2. 结构体数组的访问
结构体数组的访问很简单。这里不展示代码,以文字叙述。
- 访问结构体数组中某个结构体的某个字段:先对结构体数组进行索引,得到待访问的结构体。再通过待访问的结构体.字段名获取该结构体的该字段的数据。此外,如果该字段的数据是一个数组,还可以对该数组进一步索引。
- 访问结构体数组中所有结构体的某个字段:直接通过 结构体数组.字段名,结果相当于一个逗号间隔的式子:结构体1.字段名, 结构体2.字段名, 结构体3.字段名 ...
3. 结构体数组的拼接
结构体数组的拼接也很简单,和其它类型的拼接是一样的,这里不展示代码,只叙述它要遵循的纬度规则。
- 水平拼接:待拼接的结构体数组的行数相等。
- 垂直拼接:待拼接的结构体数组的列数相等。
4. 结构体数组的操作函数
有很多函数可以作用于结构体数组,下面举几个常用函数的简单用法。
- isfield(),判断输入的字段是否为输入结构体数组的字段。
- rmfield(),删除结构体中的字段。
% 1x3的结构体数组
s = struct('name', {'张三', '李四', '王二麻子'}, 'gender', 'male', 'age', {18, 20, 'unknown'});
% 函数isfield()
fieldStatus = isfield(s, {'name', 'gender'})
% 函数rmfield()
s_new = rmfield(s, {'name', 'gender'})
s
代码运行结果如下。
Matlab 多个10进制数转成指定位宽的2进制矩阵
可以使用以下方法将Dec中的十进制数,转换为二进制数组
Dec = 4
Bar = dec2bin(Dec, Nbit) % Bar='100'
for i = 1:length(Bar)
D(i) = str2num(Bar); % D = [1 0 0]
end
Matlab 实现二进制运算
在MATLAB中进行二进制运算,可以使用位运算符,包括按位与(&)、按位或()、按位异或()、按位取反(~)以及左移(<<)和右移(>>)。
例如,对两个二进制数进行按位与运算,可以使用以下代码:
a = bin2dec('1010');%将二进制数转换为十进制
b = bin2dec('1100');
result=bitand(a,b); % 按拉与运算
dec2bin(result) %为将十进制结果转换为二进制
输出结果为:
result = 8;ans = 1000
其中,bin2dec 函数将二进制转换为十进制数,bitand 函数执行按位与运算,dec2bin 函数将十进制转换为二进制数。
Matlab可以进行二进制运算,可以使用bitand、bitor、bitxor、bitcmp等函数进行按位与、按位或、按位异或和按位取反等操作。此外,还可以使用dec2bin和bin2dec函数进行十进制和二进制之间的转换。如果需要产生伪随机二进制序列,可以使用randn函数和逻辑运算符进行操作。如果需要进行二进制加法,可以使用类似于全加器的方法进行多位二进制加法器的设计。
Matlab 有符号十进制转二进制 matlab
matlab 调用 dec2bin() 函数,传入负数就报错,做个笔记吧——新版Matlab已解决
% 当数字a大于0的时候,直接调用函数
bin = dec2bin( a, 8 ); % 8 是指变成8位的二进制数,例如 a = 3 ,则 bin 就是 0000_0011
% 当数字a小于0的时候
bin = dec2bin( a + 2^8 , 8 ); % 8 还是8位的意思,比如 a = -3 ,则 bin 就是 1111_1101
% 操作一个一维数组的时候就可以这样来
% ===== array 是一个一维数组 ===== %
for i = 1 :length(array )
if(array (i) <0)
array (i) = array (i) + 2^8;
end
end
ans = dec2bin(array , 8 ); %这个函数 可以直接把数组作为参数输入
% 例子里面的 8 是指位数,如果需要转化成16位的,就把 所有的 8 换成 16 !
dec2bin() 函数会把大于0的整数转换成指定位数的二进制字符串,比如把十进制的 3 转化成 8位的二进制就是:0000_0011 ;
小于0的数转化成二进制,应该是转化成对应正整数的补码( 按位取反 再 + 1),比如3的8位的按位取反就是:1111_1100 ; 为什么要 + 1呢?如果不 + 1,那么 0000_0011 + 1111_1100 就会得到 1111_1111 ,给他加个 1 就变成了 1_0000_0000 ,如果指定了 8 位 ,那么就会直接抛弃第一个1 ,结果就是 0000_0000 ,所以这样 按位取反 再 +1 的操作就是为了对应 3 + (-3) = = 0 这样的计算结果。
有了上面的基础,就可以着手准备利用好dec2bin()函数了;思路就是 把负数 a 的补码( 绝对值的按位取反 再 + 1),对应的 十进制 的 整数 b 找到,完了dec2bin(b , 8);有点绕啊,还是举例子,-3 的 补码是 1111_1101,这个字符串对应的十进制就是 253 ; 而 -3 + 2^ 8 == 253;
power(2,0) + power(2,2)++ power(2,3)+ power(2,4)+ power(2,5)+ power(2,6)+ power(2,7) == 253
结论:
正数:直接 dec2bin();
负数:先给负数 加一个 2^n ,然后再用 dec2bin();
Matlab 满足条件后不再向下执行的语句
在编写Matlab程序过程中,有时会遇到当程序运行到不满足if条件时让程序跳出,停止运行的情况,在MATLAB中,使用 return 语句实现程序跳出。
a = 1; % 定义一个变量a
flag = 1; % 定义一个标准量
if 1
if flag == a %判断a与flag是否相等
disp('0'); %如果相等,命令行打印0
return; %不再向下执行
disp('1'); %return 后的语句不执行
else
disp('2'); %如果不相等,命令行打印2
end
else
disp('3'); %外层if对应的else,命令行打印3,
end
disp('4'); %命令行打印4
程序运行后,命令行窗口打印0,可以证明在程序执行return后,以后的程序都不运行。
只将以上程序中变量a的值变为0,程序运行后,命令行窗口打印2,4。
只将以上程序中第一个if后的1变为0,程序运行后,命令行窗口打印3,4。
以上程序则可以清楚的验证,执行了return语句后,程序不再运行下去。
Matlab 中的continue、break、return和 error 语句
Continue:
经常用在for和while语句中,continue一旦被执行,就会终止当前循环,进行下一次循环。
% eg, 在for 循环中:
clc
clear all
close all
i = 1;
COND = 1;
for i = 1:20
if mod(i,2)==0
continue
else
fprintf('the array is %d\n',i)
end
end
% 结果是:
the array is 1
the array is 3
the array is 5
the array is 7
the array is 9
the array is 11
the array is 13
the array is 15
the array is 17
the array is 19
% 我们跳过了能够被2整除的数字,找出了剩下的数字
% eg:在while循环中
clc
clear all
close all
i = 1;
COND = 1;
while COND ==1
if mod(i,2)==0
i = i+1;
continue;
else
fprintf('the array is %d\n',i)
end
if i>=19
COND = 2;
end
i = i+1;
end
% 这里可以看到,我们在符合while条件下的循环中,如果被2整除了,
% 那么就会跳过这个循环,直接进到下一个while循环下,从头开始执行。
% 再一次进入if 判断新的i是否满足整除要求。
% 结果如下:
the array is 1
the array is 3
the array is 5
the array is 7
the array is 9
the array is 11
the array is 13
the array is 15
the array is 17
the array is 19
break:
break和continue用法相似,区别在于,一旦执行了break, 就会推出循环,而不是进入下一个循环。在for循环中:我们在1:10中,到一个被3整除的,一旦找到了第一个,整个for循环就不会再执行了。但是要注意,只是不执行break所在的循环,其他的循环还是要执行的。
return:
return 跳出函数,返回调用函数处。无论是while还是for,直接跳出函数,返回到调用函数之前。
%%
clc
clear all
close all
i = 1;
COND = 1;
for i = 1:20
if mod(i,2)==0
return
else
fprintf('the array is %d\n',i)
end
end
%%
clc
clear all
close all
i = 1;
COND = 1;
while COND ==1
if mod(i,2)==0
i = i+1;
return;
else
fprintf('the array is %d\n',i)
end
if i>=19
COND = 2;
end
i = i+1;
end
% 执行这两段函数都是一个结果:
the array is 1
>>
% 当i = 2时,函数就跳出了
用一个更简单的例子说明,我们有一个很多层的if else 判断语句,这个时候用return 就很好,如果符合条件就可以直接跳出多层if else语句,而不需要把所有的if else 全部执行一遍再跳出。
clc
clear all
close all
flag = 20 ;
if flag <-10
fprintf('y<-10\n')
return
elseif flag >20
fprintf('y>20\n')
return
elseif flag >=-10 && flag <20
fprintf('-10<=y<20\n')
return
else fprintf('y=20\n')
return
end
% 总结来说:
break 跳出循环;
continue 继续循环,(不执行 循环体内continue 后面的语句,直接进行下一循环)
return 跳出函数,返回调用函数 处。
信号延迟仿真的 Matlab 源码实现
信号的延迟是数字信号处理中的一个重要概念,将介绍如何使用Matlab实现信号的延迟仿真,并给出相应的源代码实现。
首先,我们需要定义一个信号并进行时域分析。在Matlab中,我们可以使用 "t=linspace(0,1,fs)" 生成一个时间轴,其中fs表示采样率,然后根据需要定义一个正弦波信号,如"x=si(2*pi*f*t)"表示频率为f的正弦波信号。
接着,我们可以通过对信号进行时间延迟来模拟信号的传输过程。在Matlab中,我们可以使用”y=[zeros(1,delay),(1:end-delay)]”将信号向右移动delay个单位。其中,y表示延迟后的信号,x表示原始信号,zeros(1,delay)表示在x前面填充delay个零元素,(1:end-delay)表示去除x后面的delay个元素。
最后,我们可以将延迟后的信号与原信号进行比较,从而验证延迟是否成功。在Matlab中,我们可以使用"plot(t,X,t,y)”将两个信号绘制在同一张图上,从而直观地比较它们的差异。
下面是完整的Matlab源代码实现:
%% 信号延迟仿真
% 定义信号
fs = 1000; % 采样率
f = 10; % 频率
t = linspace(0, 1, fs); % 时间轴
x = sin(2 * pi * f * t); % 正弦波信号
% 模拟信号延迟
delay = 0.5 * fs; % 延迟时间
y = [zeros(1, delay), x(1:end-delay)]; % 延迟后的信号
% 绘制信号图像
figure;
subplot(2,1,1);
plot(t, x);
xlabel('time');
ylabel('Amplitude');
title('Original Signal');
subplot(2,1,2);
plot(t, y);
xlabel('time');
ylabel('Amplitude');
title('Delayed Signal');
Verilog实现任意时钟周期延时的方法
方法一:非阻塞赋值延时打拍
这个方法是最简单的实现延时的方法,缺点是如果延时的周期比较长的话,要写的东西也会变得很多,通过这种方式可以把信号延时n个周期。
always @ (posedge clk) begin
d1 <= d;
d2 <= d1;
.......
dout <= dn;
end
方法二:移位寄存器延时
这个方法也比较简单,实现起来也很容易,缺点是消耗的资源比较大
//延时N个时钟周期
parameter N=4;
reg [N-1:0] temp;
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
temp <= 0;
end
else if(in1) begin
temp[N-1:0] <= {temp[N-2:0],in1};
end
else begin
temp[N-1:0] <= {temp[N-2:0],1'b0};
end
end
assign out1 = temp[N-1];
方法三:计数器实现任意周期延时
该方法较为节省资源,能实现任意周期的延时
parameter delay_per = 8'h4;//延时周期数
reg flag;
reg [7:0] delay_count;
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
flag <= 0;
end
else if(in1)begin
flag <= 1;
end
else if(delay_count == delay_per)begin
flag <= 0;
end
end
always @(posedge clk or negedge rst_n) begin
if(!rst_n)begin
delay_count <= 0;
out1 <= 0;
end
else if(delay_count == delay_per && flag == 1'b1)begin
delay_count <= 0;
out1 <= 1;
end
else if(flag == 1'b1)begin
delay_count <= delay_count + 1'b1;
out1 <= 0;
end
else begin
delay_count <= 0;
out1 <= 0;
end
end
介绍了三种实现信号周期延时的方法,但需要注意的是,在方法三中,如果信号间隔的周期数小于延时的周期,这种方法就不太合适了。此时推荐使用方法二,或者使用FIFO来实现信号延时。
Matlab 中文显示乱码
最近发现不同版本的 matlab 写的代码不能互用,比如在 matlab 2020 上写的代码,在matlab 2016 上显示,中文注释全部变成乱码,可能导致别人以为你分享的代码不想让对方看到注释。
解决方法一
matlab很多函数在读取中文后显示乱码,为了显示中文,应改为UTF-8方式或其他支持中文的编码方式,这在Matlab中的操作为:
slCharacterEncoding(‘UTF-8’)
但是执行这句命令只对当前有效,下次重启需要重新运行这句命令。为了彻底解决这个问题,我们可以在matlab启动时自动运行这句命令。具体方法是在Matlab默认启动路径(一般是’C:\Users\username\Documents\Matlab’)里添加startup.m文件,里面加一行命令
slCharacterEncoding(‘UTF-8’)
这样matlab启动时会自动运行改命令。
解决方法二
在matlab 预设中将字体改为纯文本。
解决方法三
在预设-字体-自定义中将要使用的字体改为桌面代码
解决方法四
将你电脑中的字体设为简体中文。
Matlab 数据归一化
一、用matlab语言自己编程,通常使用的函数有以下几种:
1.线性函数转换,表达式如下:
y=(x - MinValue)/(MaxValue - MinValue) %(归一到0 1 之间)
y=0.1 + (x - min)/(max - min)*(0.9-0.1) %(归一到0.1-0.9之间)
% 说明:x、y分别为转换前、后的值,MaxValue、MinValue分别为样本的最大值和最小值。
2.对数函数转换,表达式如下:
y=log10(x)
说明:以10为底的对数函数转换。
3.反余切函数转换,表达式如下:
y=atan(x)*2/PI
4.使用 normalize 函数
该函数通过计算 z 值来归一化向量和矩阵中的数据,创建一个向量或矩阵并计算 z 值,从而将数据归一化,使其均值为 0,标准差为 1。
A=magic(4); %创建一个幻方矩阵,幻方矩阵就是行之和相同和列之和相同的矩阵。
N1=normalize(A); %将矩阵A进行归一化处理
N2=normalize(A,'scale'); %对A按标准差进行放缩
N3=normalize(A,'range'); %对A放缩,使其范围在[0,1]区间。
5.归一化(mapminmax)与标准化(mapstd)函数
mapminmax 按行逐行地对数据进行标准化处理,将每一行数据分别标准化到区间[ymin,ymax]内,其计算公式是:
功能:将矩阵的每一行处理成[-1,1]区间。处理需要归一化的m*n矩阵X,归一化后的矩阵记为Y。
如果某行的数据全部相同,此时xmax=xmin,除数为0,则Matlab内部将此变换变为y = ymin。
调用格式:
1. [Y,PS] = mapminmax(X,YMIN,YMAX)
2. [Y,PS] = mapminmax(X,FP)
3. Y = mapminmax('apply',X,PS)
4. X = mapminmax('reverse',Y,PS)
5. dx_dy = mapminmax('dx_dy',X,Y,PS)
1.[Y,PS] = mapminmax(X,YMIN,YMAX)
其中,YMIN是我们期望归一化后矩阵Y每行的最小值,YMAX是我们期望归一化后矩阵Y每行的最大值。
例1:待处理矩阵X=[4 5 6;7 8 9]我们期望归一化后每行的最小值为0,最大值为1.程序如下
X=[4 5 6;7 8 9];
mapminmax(X,0,1)
% 运行结果:
ans =
0 0.5000 1.0000
0 0.5000 1.0000
2.[Y,PS] = mapminmax(X,FP)
FP是一个结构体成员,主要是FP.ymin(相当于YMIN), FP.ymax(相当于YMAX)。1和2处理效果一样,只不过参数的带入形式不同。
X=[4 5 6;7 8 9];
FP.ymin = 0;
FP.ymax = 1;
mapminmax(X,FP)
% 运行结果:
ans =
0 0.5000 1.0000
0 0.5000 1.0000
3.Y = mapminmax('apply',X,PS)
PS是训练样本的映射,测试样本的预处理方式应与训练样本相同。只需将映射PS apply到测试样本。
例3.训练样本是X,测试样本是M,归一化后的训练样本是Y
X=[4 5 6;7 8 9];
M = [2 3;4 5];
[Y,PS] = mapminmax(X,0,1);
mapminmax('apply',M,PS)
% 运行结果:
ans =
-1.0000 -0.5000
-1.5000 -1.0000
4.X = mapminmax('reverse',Y,PS)
将归一化后的Y反转为归一化之前
例4.将n(M的归一化)反转为M
X=[4 5 6;7 8 9];
M = [2 3;4 5];
[Y,PS] = mapminmax(X,0,1);
n = mapminmax('apply',M,PS);
mapminmax('reverse',n,PS)
% 运行结果:
ans =
2 3
4 5
5.dx_dy = mapminmax('dx_dy',X,Y,PS)
根据给定的矩阵X、标准化矩阵Y及映射PS,获取逆向导数(reverse derivative)。如果给定的X和Y是m行n列的矩阵,那么其结果dx_dy是一个1×n结构体数组,其每个元素又是一个m×n的对角矩阵。这种用法不常用,这里不再举例。
mapminmax的数学公式为y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin。如果某行的数据全部相同,此时xmax=xmin,除数为0,则此时数据不变。
Matlab中的数据预处理-归一化(mapminmax)与标准化(mapstd)-CSDN博客
https://zhuanlan.zhihu.com/p/395448383
二、premnmx、tramnmx、postmnmx、mapminmax
premnmx函数用于将网络的输入数据或输出数据进行归一化,归一化后的数据将分布在[-1,1]区间内。
premnmx语句的语法格式是:[Pn,minp,maxp,Tn,mint,maxt]=premnmx(P,T),其中P,T分别为原始输入和输出数据。
在训练网络时如果所用的是经过归一化的样本数据,那么以后使用网络时所用的新数据也应该和样本数据接受相同的预处理,这就要用到tramnmx函数:
tramnmx语句的语法格式是:[PN]=tramnmx(P,minp,maxp)
其中P和PN分别为变换前、后的输入数据,maxp和minp分别为premnmx函数找到的最大值和最小值。
网络输出结果需要进行反归一化还原成原始的数据,常用的函数是:postmnmx。
postmnmx语句的语法格式是:[PN] = postmnmx(P,minp,maxp)
其中P和PN分别为变换前、后的输入数据,maxp和minp分别为premnmx函数找到的最大值和最小值。
还有一个函数是mapminmax,该函数可以把矩阵的每一行归一到[-1 1].
mapminmax语句的语法格式是:[y1,PS] = mapminmax(x1)
其中x1 是需要归一的矩阵 y1是结果。
当需要对另外一组数据做归一时,就可以用下面的方法做相同的归一了
y2 = mapminmax('apply',x2,PS)
当需要把归一的数据还原时,可以用以下命令:x1_again = mapminmax('reverse',y1,PS)
三、prestd、poststd、trastd
prestd归一到单位方差和零均值。
pminp和maxp分别为P中的最小值和最大值。mint和maxt分别为T的最小值和最大值。
数据归一化汇总 – MATLAB中文论坛 (ilovematlab.cn)
Matlab 判断数组是否为空或者全0
all 函数:检测矩阵中是否全为非零元素,如果是,则返回1,否则,返回0。
any 函数:检测矩阵中是否有 非零 元素,如果有,则返回1,否则,返回0。
isempty 函数:如果 A 为空数组 [ ], isempty(A) 返回逻辑值 1 (true),否则返回逻辑值 0 (false)。
拓展:如果A是一个数组,那么命令length(A) == 0 的返回结果和isempty(A)的返回结果一样,MATLAB推荐大家使用后者判断A是否为空数组[ ],后者的运行效率更高。
语法:
B = all(A)
如果A是一个向量,如果所有的元素都是非零的,则返回1,如果有一个元素为零,则返回0。如果A是一个矩阵,则返回一个行向量,用于检测每一列是否全为非零元素,如果某一列中有一个元素为零,则返回0,如果某一列中全为非零元素,则返回1,由此构成一个行向量。
B = all(A, 1)
返回一个行向量,可以认为all(A, 1)等价于all(A)
B = all(A, 2)
返回一个列向量,用于检测每一行是否全为非零元素,如果某一行中有一个元素为零,则返回0,如果某一行中全为非零元素,则返回1,由此构成一个列向量。
Matlab 判断常量X是否为矩阵A中的某个元素
下面举个例子:假设我们想判断常数x是否是数组A中的某个元素,如果是则返回逻辑值1,不是则返回逻辑值0。我们可以使用下面两种方法:
解释:find函数可以查找非零元素的索引,如果数组中所有的元素均为0,那么find函数返回空向量[ ]。因为A中所有的元素和x都不相等,所以A==x返回一个元素全为逻辑值0的逻辑向量,此时find(A==x, 1)返回空向量[ ],因此isempty(find(A==x, 1))会返回逻辑值1,我们对这个结果进行逻辑非~运算,就会返回逻辑值0,即x不是A中的某个元素。
Matlab 对数
Matlab中的对数使用,matlab中提供了log10、log2和以e为底的对数。
1、以e为底的对数用log()表示,如log(a)。
2、以10为底的对数用log10()表示,如log10(a)。
3、以2为底的对数用log2()表示,如log2(a)。
Matlab legend 的使用简析
legend
% Plot two lines.
% Specify the legend labels during the plotting commands by setting the DisplayName property to the desired text.
% Then, add a legend.
clear
clc
close all
x = linspace(0,pi);
y1 = cos(x);
plot(x,y1,'DisplayName','cos(x)') % plot里面加'DisplayName'
hold on
y2 = cos(2*x);
plot(x,y2,'DisplayName','cos(2x)') % plot里面加'DisplayName'
hold off
legend % 只有这一个legend
% Plot two lines and add a legend to the current axes.
% Specify the legend labels as input arguments to the legend function.
clear
clc
close all
x = linspace(0,pi);
y1 = cos(x);
plot(x,y1)
hold on
y2 = cos(2*x); % plot里面不用写'DisplayName'
plot(x,y2)
legend('cos(x)','cos(2x)') % 这里一个legend
给部分函数添加图例;
% If you do not want to include all of the plotted graphics objects in the legend,
% then you can specify the graphics objects that you want to include.
% Plot three lines and return the Line objects created.
% Create a legend that includes only two of the lines.
% Specify the first input argument as a vector of the Line objects to include.
clear
clc
close all
x = linspace(0,pi);
y1 = cos(x);
p1 = plot(x,y1);
hold on
y2 = cos(2*x);
p2 = plot(x,y2);
y3 = cos(3*x);
p3 = plot(x,y3);
hold off
legend([p1 p3],{'cos(x)','cos(3x)'})
指定图例的位置(方向)以及显示的列数;
% Plot four lines. Create a legend in the northwest area of the axes.
% Specify the number of legend columns using the NumColumns property.
clear
clc
close all
x = linspace(0,pi);
y1 = cos(x);
plot(x,y1)
hold on
y2 = cos(2*x);
plot(x,y2)
y3 = cos(3*x);
plot(x,y3)
y4 = cos(4*x);
plot(x,y4)
hold off
legend({'cos(x)','cos(2x)','cos(3x)','cos(4x)'},'Location','northwest','NumColumns',2)
给图例添加标题;
% Plot two lines and create a legend. Then, add a title to the legend.
clear
clc
close all
x = linspace(0,pi);
y1 = cos(x);
plot(x,y1)
hold on
y2 = cos(2*x);
plot(x,y2)
hold off
lgd = legend('cos(x)','cos(2x)');
title(lgd,'My Legend Title')
去除图例边框;
% Plot two lines and create a legend in the lower left corner of the axes.
% Then, remove the legend background and outline.
clear
clc
close all
x = linspace(0,pi);
y1 = cos(x);
plot(x,y1)
hold on
y2 = cos(2*x);
plot(x,y2)
hold off
legend({'cos(x)','cos(2x)'},'Location','southwest')
legend('boxoff')
修改图例的外观;
% Modify the legend appearance by setting Legend properties.
clear
clc
close all
rdm = rand(4);
plot(rdm)
lgd = legend({'Line 1','Line 2','Line 3','Line 4'},'FontSize',12,'TextColor','blue')
% 或者这样
% Modify the legend appearance by setting Legend properties.
clear
clc
close all
rdm = rand(4);
plot(rdm)
lgd = legend('Line 1','Line 2','Line 3','Line 4');
lgd.FontSize = 12;
lgd.TextColor = 'blue';
大合集
% Modify the legend appearance by setting Legend properties.
clear
clc
close all
rdm = rand(4);
plot(rdm)
lgd = legend('Line 1','Line 2','Line 3','Line 4');
lgd.FontSize = 12;
lgd.TextColor = 'blue';
lgd.NumColumns = 2;
lgd.Location = 'southwest';
leg.Orientation = 'vertical';
title(lgd,'My Legend Title');
Matlab 中向图中添加文本
使用 text 函数在特定数据点旁边添加文本。在本例中,为点 (π,sin(π)) 添加文本。text 函数的前两个输入参数指定位置。第三个参数指定了文本。默认情况下,text 支持一部分 TeX 标记。使用 TeX 标记 \pi 表示希腊字母 π。通过包含 TeX 标记 \leftarrow,显示一个指向左侧的箭头。有关标记的完整列表,可以参考图文本中的希腊字母和特殊字符。
文本位置
x = linspace(0,10,50);
y = sin(x);
plot(x,y)
txt = '\leftarrow sin(\pi) = 0';
text(pi,sin(pi),txt)
% 默认情况下,指定的数据点位于文本的左侧。
% 通过将 HorizontalAlignment 属性指定为 'right',使数据点出现在文本右侧。
% 使用指向右侧而不是左侧的箭头。
x = linspace(0,10,50);
y = sin(x);
plot(x,y)
txt = 'sin(\pi) = 0 \rightarrow';
text(pi,sin(pi),txt,'HorizontalAlignment','right')
设置文本属性
text 函数用于创建 Text 对象。Text 对象具有可用来自定义文本外观的属性,例如HorizontalAlignment 或 FontSize。
可以通过两种方式设置属性:
①在 text 命令中使用名称-值对组,例如 'FontSize',14 —— 通过将 FontSize 属性设置为 text 函数的名称-值对组参数,指定文本的字体大小。使用 title、xlabel、ylabel 或 legend 函数时,可以通过类似的方法更改字体大小。
②使用 Text 对象。可以将 Text 对象作为 text 函数的输出参数返回,并将其赋给某个变量,例如 t。然后,使用圆点表示法设置属性,例如 t.FontSize = 14。
对于此示例,使用圆点表示法而不是名称-值对组来更改字体大小。
x = linspace(0,10,50);
y = sin(x);
plot(x,y)
txt = '\leftarrow sin(\pi) = 0';
t = text(pi,sin(pi),txt)
t =
Text (\leftarrow sin(\pi) = 0) with properties:
String: '\leftarrow sin(\pi) = 0'
FontSize: 10
FontWeight: 'normal'
FontName: 'Helvetica'
Color: [0 0 0]
HorizontalAlignment: 'left'
Position: [3.1416 1.2246e-16 0]
Units: 'data'
Show all properties
% 例子如下:
x = linspace(0,10,50);
y = sin(x);
plot(x,y)
txt = '\leftarrow sin(\pi) = 0';
t = text(pi,sin(pi),txt);
t.FontSize = 14;
多行文本
使用字符向量元胞数组显示跨越多行的文本。元胞数组的每个元素代表一行文本。对于此示例,显示包含两行的标题。使用 title、xlabel、ylabel 或 legend 函数时,可以通过类似的方法显示多行文本。
x = linspace(0,10,50);
y = sin(x);
plot(x,y)
txt = {'Plotted Data:','y = sin(x)'};
text(4,0.5,txt)
带有变量值的文本
通过使用 num2str 函数将数字转换为文本,可在文本中包含变量值。对于此示例,计算均值 y 并在标题中包含该值。使用 title、xlabel、ylabel 或 legend 函数时,可以通过类似的方法包含变量值。
x = linspace(0,10,50);
y = sin(x);
plot(x,y)
avg = mean(y);
txt = ['Average height: ' num2str(avg) ' units'];
text(4,0.5,txt)
坐标区外部的文本
使用 annotation 函数而不是 text 函数,可在图窗内的任何位置添加文本。第一个输入参数指定注释的类型。第二个输入参数以归一化的图窗单位指定注释的位置。通过将 EdgeColor 属性设置为 'none',删除文本框边框。有关文本框注释的详细信息,请参阅 annotation函数。
x = linspace(0,10,50);
y = sin(x);
plot(x,y)
annotation('textbox',[.9 .5 .1 .2],'String','Text outside the axes','EdgeColor','none')
Matlab 曲线拟合
Matlab中常用的曲线拟合可以分为:多项式拟合 和 指定函数拟合 。
1. 多项式拟合 polyfit 和 polyval
x=[1 2 3 4 5 6 7 8 9];
y=[9 7 6 3 -1 2 5 7 20];
P= polyfit(x, y, 3) %三阶多项式拟合
% 注释:polyfit(x,y,N),x、y为原始数据,N为拟合最高次幂,
xi=0:.2:10;
yi= polyval(P, xi); % 求对应y值
% 注释:polyval(P,xi),P为各项的系数,结果展示为:
plot(xi,yi,x,y,'r*');
运行结果:多项式系数:P =0.1481 -1.4030 1.8537 8.2698
即 P=0.1481 * x^3 + -1.4030 * x^2 +1.8537 * x + 8.2698
2. 工具箱拟合 cftool
x=[1 2 3 4 5 6 7 8 9];
y=[9 7 6 3 -1 2 5 7 20];
cftool(x,y)
运行结果:
拟合类型中我们选择polynominal(多项式),拟合阶数选择3,运行结果中可见R平方值高达0.94,属于比较准确的.
3. 自定义拟合函数 fittype
clear
clc
syms t
x=[0;0.4;1.2;2;2.8;3.6;4.4;5.2;6;7.2;8;9.2;10.4;11.6;12.4;13.6;14.4;15];
y=[1;0.85;0.29;-0.27;-0.53;-0.4;-0.12;0.17;0.28;0.15;-0.03;-0.15;-0.071;0.059;0.08;0.032;-0.015;-0.02];
f=fittype('a*cos(k*t)*exp(w*t)','independent','t','coefficients',{'a','k','w'});
cfun=fit(x,y,f)
xi=0:1:20;
yi=cfun(xi);
plot(x,y,'r*',xi,yi,'b-');
% 注释:fittype是自定义拟合函数,cfun=fit(x,y,f)拟合数据x、y,x、y必须为列向量。
% 结果:
cfun =
General model:
cfun(t) = a*cos(k*t)*exp(w*t)
Coefficients (with 95% confidence bounds):
a = 0.9987 (0.9836, 1.014)
k = -1.001 (-1.006, -0.9958)
w = -0.2066 (-0.2131, -0.2002)
下述为指定函数拟合:常拟合e指数函数
简单说明为:
% 数据生成
c = 0.5; k = 2;
x = (0:.1:5)';
y = c*k.^x + 2*(rand(size(x))-0.5);
% 拟合
ft = fittype(@(c, k, x)c*k.^x); % 需要拟合的函数形式
f = fit(x, y, ft, 'StartPoint', [1 1])
plot(f, x, y);
% (x,y)是要拟合的数据点,需要注意的是,x 、y都必须是列向量,否则会报错
syms t;
x=[50; 200; 400; 600; 800];
y=[0.00000209; 0.00000267; 0.00000825; 0.000748; 0.0216];
% 前面是公式,自变量:independent,常数:coefficients
f=fittype('C*(1-(0.0005)^(0.00013-0.000000372*t+0.0000000036*t^2))^(n+1)','independent','t','coefficients',{'C','n'});
[cfun,rsquare]=fit(x,y,f,'Lower',[580,1.4],'Upper',[3000000,3],'StartPoint',[600, 1.5]);
xi=0:1:850;
yi=cfun(xi);
plot(x,y,'r*',xi,yi,'b-');
第一部分进行的操作是定义变量及赋已知点
需要注意的点:|
1、自变量 t 要单独定义
2、已知点必须保存为列向量。
3、列向量要一 一对应(数据量大的时候一定要检查一下)。
第二部分进行的操作是定义拟合函数f
这里调用了fittype函数来进行函数的自定义。其语法可简述为:
f=fittype('公式具体表达','independent','自变量名','coefficients',{'待定参数1','待定参数2'});
第三部分进行的是fitoptions设置,即拟合选项的设置。
这里调用了fit函数。其语法可简述为:
[cfun,函数输出设置]=fit(x,y,f,'函数输入设置1',输入设置1具体定义,'函数输入设置2',输入设置2具体定义,...,'函数输入设置n',输入设置n具体定义)
函数输出设置可选rsquare等,需要注意的是其输出是作为一个整体输出的。一般写rsquare,诸如sse、rsquare、dfe、adjusted rsquare、rmse都会给出。所以建议只写rsquare即可。
函数输入设置可选较多,这里只给常用的几个参数设定:
1、lower:拟合参数下界限,和参数一 一对应,案例中'Lower',[580,1.4]即表示拟合过程中参数C取值不小于580,参数n取值不小于1.4。
2、upper:拟合参数上界限,和参数一 一对应,案例中'Upper',[3000000,3]即表示拟合过程中参数C取值不大于3000000,参数n取值不大于3。
3、StartPoint:拟合参数初始值,和参数一 一对应,案例中'StartPoint',[600,1.5]即表示拟合开始时参数C取值为600,参数n取值为1.5。
需要注意的一点是上述参数不知道的情况下可全部删去。但拟合结果会出现以下语句,其大意为计算过程中参数初值由系统随机选定,这将导致拟合结果不可靠。在不知道参数上下界范围的时候,建议删去所有输入设置,多次试算以确定参数大致范围。
警告: Start point not provided, choosing random start point.
> In curvefit.attention.Warning/throw (line 30)
In fit>iFit (line 299)
In fit (line 108)
cfun =
General model:
cfun(t) = C*(1-(0.0005)^(0.00013-0.000000372*t+0.0000000036*t^2))^(n+1)
Coefficients (with 95% confidence bounds):
C = 589.8 (-6265, 7445)
n = 1.488 (-1.303, 4.279)
rsquare =
包含以下字段的 struct:
sse: 1.9441e-05
rsquare: 0.9470
dfe: 3
adjrsquare: 0.9294
rmse: 0.0025
第四部分进行的是拟合自变量范围及间隔设置。
案例中xi=0:1:850;表示绘制0到850之间的拟合曲线,拟合曲线计算间隔为1。(理论上设置间隔越小,最后拟合结果越可靠,建议间隔不要超过3000个)
第五部分通过调用plot函数绘制拟合图像
可自行搜索matlab plot函数用法,这里不做过多解释。
最后结果如下:
cfun =
General model:
cfun(t) = C*(1-(0.0005)^(0.00013-0.000000372*t+0.0000000036*t^2))^(n+1)
Coefficients (with 95% confidence bounds):
C = 2152 (-2.326e+04, 2.756e+04)
n = 1.805 (-1.038, 4.647)
rsquare =
包含以下字段的 struct:
sse: 1.3311e-05
rsquare: 0.9637
dfe: 3
adjrsquare: 0.9517
rmse: 0.0021
Matlab plot 绘图
plot(x, y, 'o', 'LineWidth', 3, 'MarkerEdgeColor', 'r', 'MarkerFaceColor', 'g', 'MarkerSize', 10)
% Linewidth 线宽,MarkerEdgeColor,数据点型的边界颜色,MarkerFaceColor,数据点型的填充颜色,MarkerSize,数据点型的宽度
plot 输出图像之后,若使用“另存为”保存图片,往往图片质量不够用,可在命令窗中输入以下语句:
print -djpeg -r600 imagename
% -d表示格式,jpeg,-r表示质量等级,600最高,imagename为要保存的名称
也可以根据个人需要更改图片尺寸和分辨率大小,在当前Figure窗口,“文件”>>“导出设置”,在“大小”处更改尺寸;在“渲染”处更改分辨率。
正式开始 plot讲解
简单版
clc;clear;close all;
x1=[-50 -40 -30 -20 -10 0 10 20 30 40 50];
y1=[-50 -30 -10 10 30 50 70 90 110 130 150];
x2=-100:10:200;
y2=(x2+100).^2/1000;
% 画图
figure;
plot(x1,y1,'-*r', 'LineWidth',3);
hold on;
plot(x2,y2,'--b', 'LineWidth',2);
hold off;
% 图的名字
title('图的名字');
% 图例
legend('y1 vs. x1','y2 vs. x2');
% 坐标轴的名字
xlabel('x轴的名称 (mm)');ylabel('y轴的名称 (μm)');
% 坐标轴范围自动紧凑型(即坐标轴的范围正好为数据的范围):
% axis tight;
% 坐标轴范围自定义:
axis([-150 250 -50 150 ]);%axis([xmin xmax ymin ymax]); 设置坐标轴在指定的区间
% 设置图字体和字体大小
set(gca,'FontName','楷体','FontSize',14)%设置坐标轴刻度字体名称,大小
%打开网格线
grid on;%全部网格
% set(gca,'XGrid','on');%仅X轴网格
% set(gca,'YGrid','on');%仅Y轴网格
% 轴设为正方形(无论怎么拉伸或最大化形状都不变)
axis equal;
加长版
plot(x1,y1,‘选项’,x2,y2,‘选项2’,x3,y3,‘选项3’,x4,y4,‘选项4',...)
% 选项格式:颜色+线型,如blueo、red-、black-o
% 示例
x = 0:0.1:3;
y1 = x;
y2 = x.^2;
y3 = x.^3;
plot(x,y1,'red-',x,y2,'blueo',x,y3,'black-o')
title('示意图')
xlabel('x的变化')
ylabel('y的变化')
text(0.5,25,'说明示例')
legend('线性y=x','二次方y=x^2','三次方y=x^3')
在绘制图形时,可以对图形加上一些说明,如图形的名称、坐标轴说明以及图形某一部分的含义等,这些操作称为添加图形标注。
title(‘图的题目 第一行’,‘图的题目 第二行’) % 下同
xlabel(‘横轴的名称’)
ylabel(‘纵轴的名称’)
text(x,y,‘说明’)
legend(‘图例1’,‘图例2’,‘图例3')
线型、颜色、符号可选择如下:
线型 | 颜色 | 符号 | 符号 |
---|---|---|---|
- 实线 | b 蓝色 | . 点 | ^ 上三角 |
: 虚线, | g 绿色 | o 圆圈 | < 左三角 |
-. 点划线 | r 红色 | × 叉号 | > 右三角 |
-- 虚线 | c 青色 | + 加号 | v 下三角 |
m 品红 | * 星号 | h 六角星 | |
y 黄色 | s 方块 | ||
k 黑色 | d 菱形 | ||
w 白色 | p 五角星 |
注意:这里的颜色一般都比较明亮,但是方便使用,建议大家建立自己的颜色库。
注意:
1)表示属性的符号必须放在同一个字符串中;
2)可同时指定2~3个属性;
3) 与先后顺序无关;
4)指定的属性中,同一种属性不能有两个以上.
在绘制图形时,Matlab可以自动根据要绘制曲线数据的范围选择合适的坐标刻度,使得曲线能够尽可能清晰的显示出来。所以,一般情况下用户不必选择坐标轴的刻度范围。但是,如果用户对坐标不满意,可以利用axis函数对其重新设定。
axis equal %纵横坐标轴采用等长刻度
axis square %产生正方形坐标系(默认为矩形)
axis auto %使用默认设置
axis off %取消坐标轴
axis on %显示坐标轴
grid on %显示网格
grid off %不显示网格
box on %显示其他轴(上、右)
box off %不显示其他轴(上、右)
hold on %继续在同一图层绘图
figure(1) %新生成一个图层
在Matlab中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用plotyy函数,它能把具有不同量纲,不同数量级的两个函数绘制在同一个坐标中,有利于图形数据的对比分析。
x1 = 0:0.01:2*pi;
x2 = x1;
y1 = sin(x1);
y2 = cos(x1);
plotyy(x1,y1,x2,y2)
在实际应用中,经常需要在一个图形窗口中绘制若干个独立的图形,这就需要对图形窗口进行分割。分割后的图形窗口由若干个绘图区组成,每一个绘图区可以建立独立的坐标系并绘制图形。同一图形窗口下的不同图形称为子图。
subplot(m,n,p)
其他形式的线性直角坐标图
条形图 bar(x,y)
阶梯图 stairs(x,y)
杆图 stem(x,y)
填充图 fill(x,y)
fill函数按向量元素下标渐增次序依次用直线段连接x,y对应元素定义的数据点。
x = 0:0.35:7;
y = 2*exp(-0.5*x);
subplot(2,2,1);bar(x,y,'g');
title('bar(x,y,''g'')');axis([0, 7, 0 ,2]);
subplot(2,2,2);fill(x,y,'r');
title('fill(x,y,''r'')');axis([0, 7, 0 ,2]);
subplot(2,2,3);stairs(x,y,'b');
title('stairs(x,y,''b'')');axis([0, 7, 0 ,2]);
subplot(2,2,4);stem(x,y,'k');
title('stem(x,y,''k'')');axis([0, 7, 0 ,2]);
对数坐标图
% x轴线性,y轴线性
plot(x,y)
% x轴对数,y轴线性
semilogx(x,y)
% x轴线性,y轴对数
semilogy(x,y)
% x轴对数,y轴对数
loglog(x,y)
图例、标题、坐标轴范围等的设置
figure用法: %默认参数,创建一个窗口
图形窗口属性及其参数(propertyname & propertyvalue):
>>figure('name','demo'); %图窗命名
>>figure('numbertitle','off'); %关闭图窗标题
>>figure('position', [left, bottom, width, height]); %设定图窗位置(默认以屏幕的左下角为原点)和大小
>>figure('menubar','none','toolbar','none'); %关闭菜单栏(munubar)和工具栏(toolbar)
%多属性合并使用
>>figure('menubar','none','toolbar','none','numbertitle','off','position',[300,200,800,500]);
hold on是当前轴及图像保持而不被刷新,准备接受此后将绘制的图形,多图共存,即启动图形保持功能,当前坐标轴和图形都将保持,从此绘制的图形都将添加在这个图形的基础上,并自动调整坐标轴的范围。
hold off使当前轴及图像不再具备被刷新的性质,新图出现时,取消原图。即关闭图形保持功能。
图例:legend
高级用法1:指定legend显示的位置
图例中字体及大小legend({‘k’,‘a’,‘e’},‘fontsize’,10,‘fontname’,‘Times New Roman’); %注意图例内容需用大括号括起来
图例中各个量及位置:‘location’,‘SouthEast’
% 利用legend函数的参数进行大致设置
legend(‘sinx’,-1); % 位于图形框外面
legend(‘sinx’,0); % 最佳位置
legend(‘sinx’,1); % 右上角
legend(‘sinx’,2); % 左上角
legend(‘sinx’,3); % 左下角
legend(‘sinx’,4); % 右下角
legend('\alpha_1','\alpha_1','\alpha_1',1)
0——图例尽量不与数据冲突,自动放置在最佳位置
1——放置在放置在图形的右上角 top right
2——放置在图形的左上角 top left
3——放置在图形的左下角 bottom left
4——放置在图形的右下角 bottom right
-1——放置在图形视窗的外右边
legend('\alpha_1','\alpha_1','\alpha_1','location','SouthEast')
NorthEast:右上角Inside top right (default)
NorthWest:左上角Inside top left
SouthEast:右下角Inside bottom right
SouthWest:左下角Inside bottom left
高级用法2:指定显示某几条曲线的legend
H = plot(data);
legend(H([1 6 11 16 21],'1,'6','11’,'16','21');
高级用法3:legend横排
hl = legend
set(hl,'Orientation','horizon')
高级用法4:不显示方框
hl = legend
set(hl,'Box','off');
利用位置属性进行精确设置
gca=legend( ‘sinx’, 4 );
set( gca, ‘Position’, [10, 50, 100, 400]); % [10, 50, 100, 400]为显示的位置坐标
图例中 设置 线段 的 长短 以适应图形的大小
leg =legend(‘k’,‘a’,‘e’);
leg.ItemTokenSize =[10,1];
去除图例的矩形框
leg =legend(‘k’,‘a’,‘e’);
set(leg,‘box’,‘off’)
修改legend形状、大小等,添加标题等
% Modify the legend appearance by setting Legend properties.
clear
clc
close all
rdm = rand(4);
plot(rdm)
lgd = legend('Line 1','Line 2','Line 3','Line 4');
lgd.FontSize = 12;
lgd.TextColor = 'blue';
lgd.NumColumns = 2;
lgd.Location = 'southwest';
leg.Orientation = 'vertical';
title(lgd,'My Legend Title');
坐标轴范围、标签
set(gca,'XLim',[0:1:10]);%X轴的数据显示范围;
set(gca,'XTick',[0:1:10]);%设置要显示坐标刻度;
set(gca,'XTickLabel',[0:1:10]);%给坐标加标签;
标签、标题:
图形标题设置、及标题的字号、字体: 例如: title([‘u=’,num2str(u)],‘Fontsize’,10,‘Fontname’,‘Times New Roman’);
设置坐标轴字体及字号: set(gca,‘fontsize’,10,‘fontname’,‘Times New Roman’);
设置坐标轴上下限:axis([xmin,xmax,ymin,ymax]);
x轴的名称及字体和字号:xlabel(‘Epoch [0.25 s]’,‘FontName’,‘Times New Roman’,‘FontSize’,10);
输出图形的位置及图形大小: 例如: set(gcf,‘unit’,‘centimeters’,‘position’,[10 5 14 10]) %(10,5)为图形左下角坐标,图形长10cm,宽8cm
网格: grid on
窗口划分: subplot(x,y,z)表示窗口划分成x行y列第z个窗口
补充:
1.字符 :ch=['a','b']; ch(1); ch=['ab','bcd']; ch(1,2); string1='aasdfdw';
2.上标、下标:下标用 _(下划线) 上标用^ (尖号)
legend使用补充:
figure()
for i = [xxx]
plot( X,Y(i,:), 'LineWidth',2);
hold on;
LG{i} = ['字符串',num2str(A(i)),'字符串'];
end
legend(LG, 'Locaion', 'Best');
% =========== 未完待续 ===========