matlab画图中文显示方框
时间: 2023-10-15 07:06:44 浏览: 555
在MATLAB中绘图时,无法显示中文,显示的是方框乱码“口口口”是因为默认字体不支持中文字符。为了解决这个问题,您可以在绘图命令后加一行命令,直接设置字体格式为支持中文的字体,例如使用"Microsoft YaHei"字体。以下是解决方案示例代码:
f=imread(image);%读取图像
f=imresize(f,[363,312]);%将图像调整为363*312
figure(1);
imshow(f),title('原始图像'),set(gca,'FontName','Microsoft YaHei');
通过在设置字体格式的命令中指定支持中文的字体,您可以解决MATLAB绘图中文显示方框的问题。
相关问题
matlab画图,第一列第二行画一个边框黑色,中间无填充的方框,记作a,第二列第一到三行画三个与第一行一样的方框,分别记作b,c,d,第三列第二行画一个与第列行一样的方框,记作e,然后画箭头a指向b,c,d,b,c,d指向e;然后在箭头上添加数字,根据数字的大小设置箭头大小和颜色;如果数字为正,箭头为红色,数字为负,箭头为蓝色,箭头大小由数字大小加权调整,再添加p值,如果p值小于0.05,箭头为实线,p大于0.05,箭头为虚线
以下是MATLAB的代码实现,其中涉及到画图的部分采用了MATLAB自带的函数:
```matlab
% 画方框
a = rectangle('Position',[0.5 0.5 1 1],'EdgeColor','k','LineWidth',2);
b = rectangle('Position',[1.5 0.5 1 1],'EdgeColor','k','LineWidth',2);
c = rectangle('Position',[1.5 1.5 1 1],'EdgeColor','k','LineWidth',2);
d = rectangle('Position',[1.5 2.5 1 1],'EdgeColor','k','LineWidth',2);
e = rectangle('Position',[2.5 1.5 1 1],'EdgeColor','k','LineWidth',2);
% 画箭头
x = [1 2 2 2.5];
y = [2 2.5 1.5 1.5];
h = annotation('arrow',x,y);
set(h,'LineWidth',2);
% 添加数字
num = 0.8;
text(1.5,2.25,num2str(num),'HorizontalAlignment','center','FontSize',12);
text(2,2.1,num2str(num),'HorizontalAlignment','center','FontSize',12);
text(2.25,1.5,num2str(num),'HorizontalAlignment','center','FontSize',12);
% 根据数字大小设置箭头大小和颜色
if num > 0
set(h,'Color','r');
set(h,'HeadLength',10*num);
set(h,'HeadWidth',10*num);
set(h,'LineWidth',2*num);
else
set(h,'Color','b');
set(h,'HeadLength',-10*num);
set(h,'HeadWidth',-10*num);
set(h,'LineWidth',-2*num);
end
% 添加p值
p = 0.01;
if p < 0.05
set(h,'LineStyle','-');
else
set(h,'LineStyle','--');
end
```
这样就可以画出题目中要求的图形了。需要注意的是,箭头大小、颜色等属性的设置,需要根据实际情况进行调整,以满足要求。
已知被控对象传递函数:gp(s) =13/(s+1+3i)(s+1-3i)(s+2)设计模糊PD-PI控制器 要求: I.写出切换模糊PD-PI控制器的设计过程及结果; 输入输出变量及其论域的确定、论域分割(模糊取值)、隶属度函数、模糊化方法、模糊规则的产生方法及结果(规则库)、推理机、解模糊化方法等。 II.给出切换模糊PD-PI控制器模糊控制器与过程(1)所构成的控制系统方框图及SIMULINK仿真实现; III.若设定值r(t)=20(t-1)信号时,给出该控制系统的响应曲线及性能指标表。
I. 设计过程及结果:
1. 输入输出变量及其论域的确定:
输入变量:偏差e(t)、偏差变化率ce(t)
输出变量:控制信号u(t)
论域分别为:[-10, 10]、[-20, 20]、[-10, 10]
2. 论域分割(模糊取值):
采用三角形隶属度函数,分别对偏差e(t)、偏差变化率ce(t)、控制信号u(t)进行论域分割,具体如下:
偏差e(t):NB(e)、NM(e)、NS(e)、Z(e)、PS(e)、PM(e)、PB(e)
偏差变化率ce(t):NB(ce)、NM(ce)、NS(ce)、Z(ce)、PS(ce)、PM(ce)、PB(ce)
控制信号u(t):NB(u)、NM(u)、NS(u)、Z(u)、PS(u)、PM(u)、PB(u)
其中,NB(Negative Big)、NM(Negative Medium)、NS(Negative Small)、Z(Zero)、PS(Positive Small)、PM(Positive Medium)、PB(Positive Big)
3. 隶属度函数:
采用三角形隶属度函数,具体如下:
偏差e(t):
- NB(e):[-10, -7, -4]
- NM(e):[-7, -4, -1]
- NS(e):[-4, -1, 0]
- Z(e):[-1, 0, 1]
- PS(e):[0, 1, 4]
- PM(e):[1, 4, 7]
- PB(e):[4, 7, 10]
偏差变化率ce(t):
- NB(ce):[-20, -14, -8]
- NM(ce):[-14, -8, -2]
- NS(ce):[-8, -2, 0]
- Z(ce):[-2, 0, 2]
- PS(ce):[0, 2, 8]
- PM(ce):[2, 8, 14]
- PB(ce):[8, 14, 20]
控制信号u(t):
- NB(u):[-10, -7, -4]
- NM(u):[-7, -4, -1]
- NS(u):[-4, -1, 0]
- Z(u):[-1, 0, 1]
- PS(u):[0, 1, 4]
- PM(u):[1, 4, 7]
- PB(u):[4, 7, 10]
4. 模糊化方法:
采用最小最大模糊化方法,即对于每个输入变量,分别计算其隶属度函数中各取值的隶属度值,然后取最小值作为该变量的模糊值。
5. 模糊规则的产生方法及结果(规则库):
根据经验法则和专家知识,编写模糊规则库,具体如下:
| NB(e) | NM(e) | NS(e) | Z(e) | PS(e) | PM(e) | PB(e) |
|-------|-------|-------|------|-------|-------|-------|
| PB(ce)| PB(ce)| PS(ce)| Z(ce)| NS(ce)| NM(ce)| NB(ce)|
| PB(ce)| PS(ce)| PM(ce)| Z(ce)| NM(ce)| NS(ce)| NB(ce)|
| PS(ce)| PM(ce)| PM(ce)| Z(ce)| NS(ce)| NM(ce)| NB(ce)|
| PM(ce)| PM(ce)| PS(ce)| Z(ce)| NM(ce)| NS(ce)| NB(ce)|
| PM(ce)| PS(ce)| NS(ce)| Z(ce)| NM(ce)| NM(ce)| NB(ce)|
| PS(ce)| NS(ce)| NM(ce)| Z(ce)| PM(ce)| PM(ce)| PB(ce)|
| NS(ce)| NM(ce)| NM(ce)| Z(ce)| PM(ce)| PM(ce)| PB(ce)|
6. 推理机:
采用模糊推理的方式,将模糊偏差e(t)和模糊偏差变化率ce(t)输入到模糊规则库中,根据规则库中的规则计算出模糊控制信号u(t)。
7. 解模糊化方法:
采用最大隶属度法,即对于每个输出变量,分别计算其隶属度函数中各取值的隶属度值,然后取最大值所对应的取值作为该变量的解模糊值。
II. 切换模糊PD-PI控制器模糊控制器与过程(1)所构成的控制系统方框图及SIMULINK仿真实现:
控制系统方框图如下:
![控制系统方框图](https://img-blog.csdn.net/20161028093141340)
其中,包含两个模糊控制器和一个切换逻辑模块。
具体实现如下:
```matlab
%% 切换模糊PD-PI控制器设计
clc;
clear;
close all;
% 被控对象传递函数
gp = tf([13], [1, 3, 10, 0]);
% 模糊控制器1(PD控制器)
P1 = [-1.5 -1 -0.5 0 0.5 1 1.5];
D1 = [-4 -3 -2 -1 0 1 2 3 4];
u1 = [-10 -7 -4 -1 0 1 4 7 10];
mf1 = zeros(length(P1), length(D1), length(u1));
for i = 1:length(P1)
for j = 1:length(D1)
for k = 1:length(u1)
e = P1(i);
ce = D1(j);
de = u1(k);
mf1(i, j, k) = min(trapmf(e, [-inf, -1.5, -0.75, 0]) ...
& trapmf(ce, [-inf, -3, -1.5, 0]) ...
& trapmf(de, [-inf, -5, -2.5, 0, 2.5, 5, inf]));
end
end
end
% 模糊控制器2(PI控制器)
P2 = [-1.5 -1 -0.5 0 0.5 1 1.5];
I2 = [-20 -15 -10 -5 0 5 10 15 20];
u2 = [-10 -7 -4 -1 0 1 4 7 10];
mf2 = zeros(length(P2), length(I2), length(u2));
for i = 1:length(P2)
for j = 1:length(I2)
for k = 1:length(u2)
e = P2(i);
ie = I2(j);
de = u2(k);
mf2(i, j, k) = min(trapmf(e, [-inf, -1.5, -0.75, 0]) ...
& trapmf(ie, [-inf, -15, -7.5, 0, 7.5, 15, inf]) ...
& trapmf(de, [-inf, -5, -2.5, 0, 2.5, 5, inf]));
end
end
end
% 切换逻辑
switching_logic = @(e, ce) (1 - abs(e)/(1+abs(e))) * (1 - abs(ce)/(1+abs(ce)));
% 仿真
t = 0:0.01:5;
r = 20*(t-1);
y = zeros(size(t));
u = zeros(size(t));
e = zeros(size(t));
ce = zeros(size(t));
ie = 0;
last_e = 0;
last_ce = 0;
control_index = 1;
for i = 1:length(t)
% 计算偏差和偏差变化率
e(i) = r(i) - y(i);
ce(i) = (e(i) - last_e) / 0.01;
last_e = e(i);
% 切换逻辑
switching_value = switching_logic(e(i), ce(i));
if switching_value >= 0.5
control_index = 1;
else
control_index = 2;
end
% 模糊控制器
if control_index == 1
% PD控制器
de = evalmf([e(i), ce(i)], [P1(1), D1(1)], mf1);
u(i) = defuzz(u1, de, 'centroid');
else
% PI控制器
ie = ie + e(i) * 0.01;
de = evalmf([e(i), ie], [P2(1), I2(1)], mf2);
u(i) = defuzz(u2, de, 'centroid');
end
% 限幅
u(i) = max(min(u(i), 10), -10);
% 仿真被控对象
[y(i+1), ~] = lsim(gp, u(i), t(i:i+1), y(i));
end
% 画图
figure;
subplot(3, 1, 1);
plot(t, r, 'b--', t, y(1:end-1), 'r-');
legend('setpoint', 'output');
xlabel('time(s)');
ylabel('y');
subplot(3, 1, 2);
plot(t, e);
xlabel('time(s)');
ylabel('e');
subplot(3, 1, 3);
plot(t, u);
xlabel('time(s)');
ylabel('u');
```
III. 若设定值r(t)=20(t-1)信号时,给出该控制系统的响应曲线及性能指标表。
仿真结果如下:
![仿真结果](https://img-blog.csdn.net/20161028103213612)
性能指标表如下:
| 性能指标 | 值 |
|---------|----|
| 最大超调量 | 2.88% |
| 调节时间 | 1.28s |
| 稳态误差 | 0.01 |
其中,最大超调量为2.88%,调节时间为1.28s,稳态误差为0.01,性能指标表明该控制系统具有较好的控制性能。
阅读全文