39、MATLAB GUI与Simulink基础教程

MATLAB GUI与Simulink基础教程

1. 优化 “ready_aim_fire” 程序

在 “ready_aim_fire” 程序中,我们可以通过一些改进来增强其功能。首先,我们希望能够控制目标位置,并且在击中目标时显示爆炸效果。

1.1 移动目标位置

在 GUIDE 布局编辑器中为 GUI 添加一个滑块条来移动目标。为了使 GUI 更整洁,将其他控件移到一侧,并添加一个静态文本框来标记滑块。从滑块属性检查器中,将 Max 属性的值更改为 1000,以与图形的比例相对应;将 Value 属性的值更改为 275,使滑块从原始目标位置开始。最后,点击 GUIDE 布局编辑器上的绿色运行按钮执行更改。

在滑块回调函数中,使用以下代码来获取滑块位置并绘制目标:

handles.location = get(hObject,'Value');
hold off;
plot(handles.location,0,'s','Markersize',10,'Markerfacecolor', 'r');
axis([0,1000,0,1000]);
title('Trajectory');
xlabel('Horizontal Distance');
ylabel('Vertical Distance');
text(handles.location-25,50,'Target');
hold on;
guidata(hObject, handles);

这里,滑块的位置存储在 handles 结构数组中,最后一行代码更新了整个程序的 handles 结构,以便其他函数可以使用 handles.location 值。

1.2 修改重置按钮回调函数

为了使目标在重置时保持在滑块所在的位置,修改重置按钮的回调函数:

hold off;
plot(handles.location,0,'s','Markersize',10,'MarkerFaceColor','r');
text(handles.location,50,'target');
axis([0,1000,0,500]);
title('Projectile Trajectory');
xlabel('Horizontal Distance, m');
ylabel('Vertical Distance, m');
hold on;
1.3 显示爆炸效果

在 fire_pushbutton 回调函数中添加代码,以在击中目标时显示爆炸效果:

time=0:0.001:100;
h=time*handles.vel*cosd(handles.theta);
v=time*handles.vel*sind(handles.theta)-1/2*9.81*time.^2;
pos=find(v>=0);
horizontal=h(pos);
vertical=v(pos);
comet(horizontal,vertical);
land=pos(end);
goal=handles.location;
if (h(land)<goal+50 && h(land)>goal-50)
    x=linspace(goal-100, goal+100, 5);
    y=[0,80,100,80,0];  
    z=linspace(goal-200,goal+200,9);  
    w=[0,40,90,120,130,120,90,40,0];
    plot(x,y,'*r',z,w,'*r');
    text(goal,400,'Kaboom!');
end

注意,如果滑块从未移动,handles.location 参数将不会被创建,因此需要在打开函数中定义该参数:

handles.location = 275;
1.4 添加获胜文本框

在 GUIDE 布局编辑器中添加另一个静态文本框,使用属性检查器将其 String 属性更改为空白,并将标签属性值更改为有意义的名称,如 textout。在 Fire_pushbutton_Callback 的 if 语句中添加以下代码,在击中目标时显示获胜消息:

set(handles.textout,'string', 'You Win !','fontsize',16);

在 Reset_pushbutton_Callback 中添加以下代码,使文本框在重置时返回空白:

set(handles.textout,'string', ' ');
2. MATLAB 内置 GUI 模板

除了空白 GUI 模板,MATLAB 还提供了三个示例 GUI 模板,可作为新项目的起点或帮助理解如何设计自己的 GUI。

2.1 GUI with UIcontrols

从 GUIDE 快速启动窗口中选择该模板。该 GUI 可使用英制或公制单位进行质量计算,由一个包含两个编辑文本框和七个静态文本框的面板,以及一个包含两个单选按钮和两个推送按钮的按钮组组成。当单选按钮添加到按钮组中时,一次只能激活一个。

2.2 GUI with Axes and Menu

该模板展示了如何使用弹出菜单。MATLAB 还提供了一个视频演示,展示了如何使用弹出菜单、推送按钮和坐标轴等图形对象。

2.3 Modal Question Dialog

模态问题对话框用于在继续操作之前要求用户做出响应,例如在保存文件时询问是否覆盖现有文件。

3. Simulink 简介

Simulink 是一个交互式的基于图形的程序,它使用一组内置的“块”来创建模型,从而解决问题。它是 MATLAB 软件套件的一部分,需要 MATLAB 才能运行。

3.1 Simulink 的应用

Simulink 主要用于分析动态系统,即随时间变化的系统。它在信号处理领域得到了广泛应用,类似于模拟计算机的编程方式。虽然它最初用于分析电气系统,但也可用于描述动态机械系统、反应性化学系统和动态流体系统的行为。

3.2 开始使用 Simulink

要启动 Simulink,打开 MATLAB 并在命令窗口中输入 simulink ,或者从工具条中选择启动 Simulink 图标。打开 Simulink 起始页后,选择空白模型创建新模型。在模型窗口中,点击图标打开库浏览器,其中包含用于创建 Simulink 模型的可用库。

3.3 创建简单的 Simulink 模型

我们先创建一个简单的模型来演示问题解决过程,即添加两个数字。
1. 从源库或常用块库中,将常数块拖到模型窗口中,重复此过程,使模型中有两个常数块。
2. 将求和块拖到模型中,该块有两个“端口”,通过点击并拖动端口之间的连线,将常数块与求和块连接起来。
3. 双击每个常数块,将常数的值更改为所需的值,例如顶部块为 5,底部块为 6。
4. 从 Sink 库中拖动显示块到模型中,并将其连接到求和块的输出端口。
5. 在菜单栏的框中调整仿真时间为 0,然后点击工具栏上的运行按钮或从菜单栏中选择 Simulation > Run 来运行仿真。

该求和块既可以用于加法,也可以用于减法。双击模型中的求和块,在块参数窗口中,将输入从 ++ 更改为 +- 可将其变为减法块;将符号列表字段更改为包含三个加号可调整块以添加三个输入。

3.4 随机数示例

下面我们使用 Simulink 创建一个模型,模拟在正弦波上添加噪声的效果,方程为 y = 5*sin(2t) + noise ,其中噪声由范围在 0 到 1 的均匀随机数生成器产生。
1. 问题陈述 :创建上述方程的 Simulink 模型。
2. 输入和输出描述
- 输入 :使用 Simulink 的内置正弦波生成器提供正弦波,使用内置随机数生成器模拟噪声。
- 输出 :使用 Simulink 示波器块查看结果。
3. 手工示例(MATLAB 解决方案)

t = 0:0.1:10;
noise = rand(size(t));
y = 5*sin(2*t)+noise;
plot(t,y);
title('A sine wave with noise added');
xlabel('time,s'), ylabel ('function value');
  1. Simulink 解决方案
    • 从源库中找到正弦波生成器块和均匀随机数生成器块,同时需要一个加法块和一个示波器块。
    • 双击正弦波块,在源块参数窗口中将振幅更改为 5,频率更改为 2。
    • 双击随机数生成器块,将最小值设置为 0,最大值设置为 1。
    • 点击黑色开始仿真三角形或选择 Simulation > Start 运行模型,双击每个示波器查看输出,必要时可选择缩放图标调整图像。

通过以上步骤,我们可以创建和运行简单的 Simulink 模型,并对信号进行处理和分析。Simulink 的强大之处在于它能够通过图形化的方式直观地解决复杂的动态系统问题。

以下是创建简单 Simulink 模型的流程图:

graph TD;
    A[打开 MATLAB] --> B[启动 Simulink];
    B --> C[选择空白模型];
    C --> D[打开库浏览器];
    D --> E[拖动常数块到模型窗口];
    E --> F[重复拖动常数块];
    F --> G[拖动求和块到模型窗口];
    G --> H[连接常数块和求和块];
    H --> I[修改常数块的值];
    I --> J[拖动显示块到模型窗口];
    J --> K[连接显示块和求和块];
    K --> L[调整仿真时间];
    L --> M[运行仿真];

在这个流程中,每个步骤都紧密相连,按照顺序执行可以顺利创建并运行一个简单的 Simulink 模型。希望这些内容能帮助你更好地理解 MATLAB GUI 和 Simulink 的使用。

MATLAB GUI与Simulink基础教程(续)

4. 基于MATLAB GUI的问题实践

为了更好地掌握 MATLAB GUI 的使用,我们可以通过一些实际问题进行练习。

4.1 两数相加 GUI

使用 GUIDE 创建一个用于两数相加的 GUI,具体要求如下:
- 一个位于静态文本框中的标题。
- 两个编辑文本框,用于输入要相加的数字。
- 静态文本框,用于显示 + = 符号。
- 一个静态文本框,用于显示相加的结果。

这个 GUI 的外观应类似于指定的示例图形。

4.2 多功能运算 GUI

创建一个与上一个问题类似的 GUI,它可以接受两个数字作为输入,并允许用户通过选择单选按钮来选择以下操作:
- 加法
- 减法
- 乘法
- 除法

以下是一个简单的实现思路表格:
| 操作 | 功能描述 |
| ---- | ---- |
| 加法 | 将两个输入数字相加 |
| 减法 | 用第一个输入数字减去第二个输入数字 |
| 乘法 | 将两个输入数字相乘 |
| 除法 | 用第一个输入数字除以第二个输入数字 |

4.3 交通监控 GUI

创建一个用于模拟交通监控的 GUI,警察可以输入车辆的牌照号码和记录的速度。该 GUI 应显示车辆的速度是否超过 90 mph 的限速,并根据速度显示应给予的罚款金额。实现步骤如下:
1. 在 GUIDE 中设计 GUI 界面,包含用于输入牌照号码、速度的编辑文本框,以及用于显示结果的静态文本框。
2. 在回调函数中编写逻辑,判断速度是否超过限速,并计算罚款金额。
3. 将结果显示在相应的静态文本框中。

4.4 电话拨号 GUI

创建一个模拟电话拨号行为的 GUI,带有一个结束按钮用于清除屏幕。可以通过以下步骤实现:
1. 在 GUIDE 中创建按钮来模拟拨号键,以及一个结束按钮。
2. 创建一个静态文本框用于显示拨号数字。
3. 为每个按钮编写回调函数,当点击拨号键时,将数字添加到显示框中;当点击结束按钮时,清空显示框。

4.5 数组绘图 GUI

创建一个 GUI,它可以接受 x、y 和 z 数组的名称作为输入(这些数组应事先在 MATLAB 中计算好),然后允许用户从以下绘图选项中进行选择:
- 表面图(surf)
- 网格图(mesh)
- 等高线图(contour)
并在 GUI 中的坐标轴上显示图形。实现步骤如下:
1. 在 GUIDE 中设计输入数组名称的编辑文本框和选择绘图类型的单选按钮。
2. 创建一个坐标轴对象用于显示图形。
3. 在回调函数中根据用户输入的数组名称和选择的绘图类型,调用相应的绘图函数并在坐标轴上显示图形。

4.6 力的合成 GUI

创建一个 GUI,它可以接受三个力的大小和与水平方向的夹角作为输入,然后在坐标轴上绘制这些力的首尾相连图,并绘制合力,报告合力的大小和与水平方向的夹角。实现步骤如下:
1. 在 GUIDE 中设计输入力的大小和夹角的编辑文本框。
2. 创建一个坐标轴对象用于绘制图形。
3. 在回调函数中根据输入的力的大小和夹角,计算合力的大小和夹角,并在坐标轴上绘制图形。

4.7 三维力的合成 GUI

重复上一个问题,但在三维空间中进行。需要使用三维绘图函数,如 quiver3 来绘制力的向量。实现步骤与二维类似,但需要考虑三维坐标的计算和绘图。

5. 总结

通过以上内容,我们深入学习了 MATLAB GUI 和 Simulink 的相关知识。在 MATLAB GUI 方面,我们对 “ready_aim_fire” 程序进行了优化,添加了目标位置控制、爆炸效果显示和获胜文本框等功能,同时了解了 MATLAB 内置的 GUI 模板,这些模板为我们设计自己的 GUI 提供了很好的起点。在 Simulink 方面,我们学习了如何启动 Simulink,创建简单的模型,如两数相加模型和随机数添加到正弦波的模型,掌握了 Simulink 中各种块的使用和参数设置。

以下是一个总结的表格,对比了 MATLAB GUI 和 Simulink 的特点:
| 类型 | 特点 |
| ---- | ---- |
| MATLAB GUI | 通过 GUIDE 布局编辑器创建,可实现用户交互,用于输入输出数据和控制程序流程 |
| Simulink | 基于图形化的建模工具,使用内置块表示数学过程,适合分析动态系统 |

通过不断实践上述的问题,我们可以进一步提高对 MATLAB GUI 和 Simulink 的使用能力,更好地解决实际问题。无论是在信号处理、机械系统分析还是其他领域,MATLAB 和 Simulink 都能发挥重要的作用。

以下是创建基于 MATLAB GUI 解决两数相加问题的流程图:

graph TD;
    A[打开 GUIDE] --> B[设计 GUI 界面];
    B --> C[添加标题文本框];
    B --> D[添加输入编辑文本框];
    B --> E[添加符号文本框];
    B --> F[添加结果文本框];
    C & D & E & F --> G[设置文本框属性];
    G --> H[编写回调函数];
    H --> I[获取输入数字];
    I --> J[进行加法运算];
    J --> K[显示结果];

这个流程图展示了创建两数相加 GUI 的主要步骤,从界面设计到功能实现,每个步骤都有明确的顺序。希望这些内容能帮助你更深入地理解和应用 MATLAB GUI 和 Simulink。

六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)内容概要:本文档围绕六自由度机械臂的ANN人工神经网络设计展开,详细介绍了正向逆向运动学求解、正向动力学控制以及基于拉格朗日-欧拉法推导逆向动力学方程的理论Matlab代码实现过程。文档还涵盖了PINN物理信息神经网络在微分方程求解、主动噪声控制、天线分析、电动汽车调度、储能优化等多个工程科研领域的应用案例,并提供了丰富的Matlab/Simulink仿真资源和技术支持方向,体现了其在多学科交叉仿真优化中的综合性价值。; 适合人群:具备一定Matlab编程基础,从事机器人控制、自动化、智能制造、电力系统或相关工程领域研究的科研人员、研究生及工程师。; 使用场景及目标:①掌握六自由度机械臂的运动学动力学建模方法;②学习人工神经网络在复杂非线性系统控制中的应用;③借助Matlab实现动力学方程推导仿真验证;④拓展至路径规划、优化调度、信号处理等相关课题的研究复现。; 阅读建议:建议按目录顺序系统学习,重点关注机械臂建模神经网络控制部分的代码实现,结合提供的网盘资源进行实践操作,并参考文中列举的优化算法仿真方法拓展自身研究思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值