本文仅供学习和复习使用。 题目源于岑冠军老师,答案参考自相关课件,另外借以markdown排版成此文。由于本人水平有限且时间不够充裕,故难免有错漏或不当之处,如有建议或批评还请联系penguinpi@163.com,谢谢!
实验六 MATLAB APP的设计与实现
@Copyright 华南农业大学 数学与信息学院 数学系 主讲与制作:岑冠军
一、实验目的
- 掌握基于MATLAB的面向对象的编程;
- 熟悉MATLAB基本类的定义;
- 熟悉MATLAB uifigure 的编程;
- 掌握MATLAB APP的图形化设计。
二、实验原理
- 基本概念:MATLAB 类,属性、方法、事件,回调函数,value类、handle类;
- uifigure编程:uifigure、uibutton、uiaxes;
- APP设计:图形化设计工具的使用。
三、实验内容
- 编写一个类实现计算 a 2 + b 2 \sqrt{a^2 + b^2} a2+b2。
% classdef Sol
% properties
% a;
% b;
% result;
% end
% methods
% function obj = Sol(a, b)
% obj.a = a;
% obj.b = b;
% obj.result = sqrt(a^2 + b^2);
% end
% function show(obj)
% fprintf("result: %f", obj.result);
% end
% end
% end
- 有如下的图形用户界面,用户点击按钮Mesh、Surf和Contour3在坐标轴对象中分别绘制列表框对象所列函数的三维网格曲面图、三维曲面图和三维等高线图:
试着运用APP设计工具开发一个APP实现上述界面和功能,要求:
(1) 请将标题设置为“实验六 学生姓名APP开发”,学生姓名为你的姓名;
(2) 选择列表框中的函数,通过按钮可以绘制相应函数的三种图形;
(3) 列表框中函数参看实验三,其中Sinc函数为 sin ( x 2 + y 2 ) x 2 + y 2 ( − 8 ≤ x , y ≤ 8 ) \frac{\sin(\sqrt{x^2 + y^2})}{\sqrt{x^2 + y^2}} (-8 \leq x, y \leq 8) x2+y2sin(x2+y2)(−8≤x,y≤8);
(4) 请将你自己加入或编辑的属性、方法、回调函数注释的方式写在实验报告中,其次将APP运行中的截图插入到实验报告中。
% properties (Access = private)
% SelFunc = ''; % 选择函数
% X;
% Y;
% Z;
% end
%
% methods (Access = private)
% % 选择绘图函数
% function app = ackley(app)
% f = @(x, y) -20 * exp(-0.2 * sqrt(0.5*(x.^2 + y.^2))) - exp(0.5 * (cos(2*pi*x) + cos(2*pi*y))) + 22.71282;
% x = linspace(-8, 8, 100);
% y = linspace(-8, 8, 100);
% [app.X, app.Y] = meshgrid(x, y);
% app.Z = real(f(app.X, app.Y));
% end
% function app = rastrigin(app)
% f = @(x, y) 20 + x.^2 + y.^2 - 10*(cos(2*pi*x) + cos(2*pi*y));
% x = linspace(-8, 8, 100);
% y = linspace(-8, 8, 100);
% [app.X, app.Y] = meshgrid(x, y);
% app.Z = real(f(app.X, app.Y));
% end
% function app = sinc(app)
% f = @(x, y) sin(sqrt(x.^2 + y.^2)) ./ sqrt(x.^2 + y.^2);
% x = linspace(-8, 8, 100);
% y = linspace(-8, 8, 100);
% [app.X, app.Y] = meshgrid(x, y);
% app.Z = real(f(app.X, app.Y));
% end
% end
% % Callbacks that handle component events
% methods (Access = private)
%
% % Value changed function: ListBox
% function ListBoxValueChanged(app, event)
% value = app.ListBox.Value;
% switch value
% case 'Ackley'
% app.SelFunc = 'Ackley';
% ackley(app);
% title(app.UIAxes, "可视化图像--Ackley");
% case 'Rastrigin'
% app.SelFunc = 'Rastrigin';
% rastrigin(app);
% title(app.UIAxes, "可视化图像--Rastrigin");
% case 'Sinc'
% app.SelFunc = 'Sinc';
% sinc(app);
% title(app.UIAxes, "可视化图像--Sinc");
% end
% end
%
% % Button pushed function: MeshButton
% function MeshButtonPushed(app, event)
% mesh(app.UIAxes, app.X, app.Y, app.Z);
% end
%
% % Button pushed function: SurfButton
% function SurfButtonPushed(app, event)
% surf(app.UIAxes, app.X, app.Y, app.Z);
% end
%
% % Button pushed function: Contour3Button
% function Contour3ButtonPushed(app, event)
% contour3(app.UIAxes, app.X, app.Y, app.Z);
% end
% end