通信系统仿真

崔春雷

目录

  • 1 第一单元: MATLAB基础
    • 1.1 课程说明与资料
      • 1.1.1 作业参考答案
      • 1.1.2 移动22级作业答案
    • 1.2 MATLAB安装与运行环境
      • 1.2.1 MATLAB介绍
    • 1.3 基本数据类型:数值类型
    • 1.4 基本数据类型:字符类型
    • 1.5 数据类型转换与输出
    • 1.6 数组与矩阵基础
      • 1.6.1 矩阵运算进阶
    • 1.7 数组与矩阵常用函数
    • 1.8 matlab中的逻辑运算
    • 1.9 实验: MATLAB常用数学函数
      • 1.9.1 实验 作业答案
    • 1.10 元胞数组
    • 1.11 结构体数组
      • 1.11.1 结构体进阶
      • 1.11.2 元胞数组与结构体数组对比
      • 1.11.3 map 容器
    • 1.12 附录:MATLAB常用基础命令
    • 1.13 拓展内容:实时脚本
      • 1.13.1 实时脚本示例
    • 1.14 课程作业与答案
      • 1.14.1 《通信系统仿真》期末考试
  • 2 第二单元:Matlab 程序设计
    • 2.1 顺序结构程序
    • 2.2 分支结构—— if语句
    • 2.3 分支结构—— switch语句
    • 2.4 循环结构—— while语句
    • 2.5 循环结构—— for语句
    • 2.6 图像处理基础
    • 2.7 Matlab的函数
      • 2.7.1 函数内容的课外扩展
    • 2.8 本章实验:for循环的应用
      • 2.8.1 素数问题
        • 2.8.1.1 素数的螺旋线排列
      • 2.8.2 3X+1猜想
      • 2.8.3 7 行代码计算 π
    • 2.9 排序算法
      • 2.9.1 冒泡排序
      • 2.9.2 选择排序
      • 2.9.3 插入排序
      • 2.9.4 快速排序
      • 2.9.5 基数排序
      • 2.9.6 计数排序
      • 2.9.7 堆排序
    • 2.10 动态规划算法
      • 2.10.1 动态规划编程实例
      • 2.10.2 动态规划:01背包问题
      • 2.10.3 动态规划常见题目分析
      • 2.10.4 动态规划题目分析2
    • 2.11 常用算法简介
      • 2.11.1 剪枝算法
      • 2.11.2 二分查找
      • 2.11.3 递归算法
      • 2.11.4 回溯算法
        • 2.11.4.1 Leetcode回溯题目合集
        • 2.11.4.2 回溯算法总结
        • 2.11.4.3 回溯法解数独问题
        • 2.11.4.4 DFS与BFS
          • 2.11.4.4.1 DFS/BFS原理
          • 2.11.4.4.2 BFS的应用:Dijkstra算法
      • 2.11.5 n 皇后问题专题
      • 2.11.6 双指针算法
      • 2.11.7 数组模拟链表(约瑟夫环)
      • 2.11.8 Hash(哈希表)
      • 2.11.9 图论与路径规划
        • 2.11.9.1 迪杰斯特拉算法
        • 2.11.9.2 A*算法
          • 2.11.9.2.1 A*算法的MATLAB实现
        • 2.11.9.3 RRT路径规划算法
          • 2.11.9.3.1 RRT算法 MATLAB代码
          • 2.11.9.3.2 参考资料
      • 2.11.10 数据结构
        • 2.11.10.1 数据结构例题
      • 2.11.11 前缀和 差分 双指针
      • 2.11.12 位运算
      • 2.11.13 常用算法代码模板
    • 2.12 练习题库
    • 2.13 code
      • 2.13.1 简易计算器gui代码
      • 2.13.2 五子棋
      • 2.13.3 连连看小游戏
      • 2.13.4 递归算法与汉诺塔
      • 2.13.5 有理数的小数循环节
    • 2.14 MATLAB编程风格
      • 2.14.1 向量化编程专题
  • 3 第三单元:Matlab 图形图像处理
    • 3.1 二维图形绘图基础
    • 3.2 二维图形绘图进阶
    • 3.3 三维图形绘图
      • 3.3.1 MATLAB绘图小结
        • 3.3.1.1 用matlab绘制好看图像
    • 3.4 MATLAB高级绘图
    • 3.5 文件操作
    • 3.6 Matlab图像处理进阶
      • 3.6.1 补充:Matlab图像处理常用函数
      • 3.6.2 RGB/HSV/HSI颜色模型
      • 3.6.3 图片切换动画效果
      • 3.6.4 图像连通域标记
      • 3.6.5 图像旋转与插值
      • 3.6.6 图像的形态学
      • 3.6.7 空间滤波
        • 3.6.7.1 图像中常见的噪声类型与滤波方法
        • 3.6.7.2 matlab中的滤波函数
        • 3.6.7.3 BM3D 去噪算法
        • 3.6.7.4 双边滤波
      • 3.6.8 图像的频域处理
    • 3.7 本章总结
    • 3.8 实验 : matlab 绘图练习1
    • 3.9 实验: matlab 绘图练习2
    • 3.10 实验 :数学函数图像绘制
    • 3.11 实验:绘图综合练习
    • 3.12 实验:曲线拟合
    • 3.13 实验:牛顿法求解方程的根
    • 3.14 实验:信号的傅里叶变换
      • 3.14.1 傅里叶变换、小波变换、希尔伯特变换
      • 3.14.2 新建目录
    • 3.15 课外补充:图像处理基础1
    • 3.16 课外补充:图像处理基础2
    • 3.17 课外补充:图像处理基础3
    • 3.18 课外补充:PYTHON基础
  • 4 第五单元:MATLAB通信仿真
    • 4.1 现代通信系统的介绍
    • 4.2 模拟通信系统的仿真原理
    • 4.3 HDB3编解码的仿真实现
    • 4.4 SIMULINK和其模块简介
    • 4.5 数字通信系统的仿真原理
    • 4.6 模拟通信系统Simulink仿真
    • 4.7 数字通信系统Simulink仿真
    • 4.8 音频信号测处理与仿真
    • 4.9 图像数字水印技术
      • 4.9.1 三角函数到傅里叶变换再到语音识别与数字水印
    • 4.10 信息系统与算法
      • 4.10.1 递归算法
        • 4.10.1.1 递归与堆栈的关系
      • 4.10.2 哈希表
      • 4.10.3 双指针算法
        • 4.10.3.1 双指针算法实战
        • 4.10.3.2 双指针进阶:滑动窗口算法
      • 4.10.4 字符串匹配 KMP算法
        • 4.10.4.1 字符串匹配B-M算法
      • 4.10.5 快速傅里叶变换
      • 4.10.6 回溯算法
      • 4.10.7 动态规划
      • 4.10.8 分治算法
      • 4.10.9 Dijkstra算法
  • 5 第六单元: systemview通信仿真
    • 5.1 SystemView概述
    • 5.2 模拟通信系统 数字系统的仿真分析
    • 5.3 SystemView通信系统仿真进阶
    • 5.4 新建课程目录
  • 6 第四单元:MATLAB高级应用
    • 6.1 符号运算基础
      • 6.1.1 利用Matlab自动推导公式
    • 6.2 Matlab中的数值计算
      • 6.2.1 积分的计算
      • 6.2.2 龙格库塔:常微分方程的数值解法
      • 6.2.3 fmincon函数与非线性方程最小值
    • 6.3 统计、拟合、插值
      • 6.3.1 协方差与相关系数
    • 6.4 GUI设计初步
    • 6.5 matlab GUI界面编程
      • 6.5.1 gui实例
      • 6.5.2 gui编程中常用函数
      • 6.5.3 App Designer入门
    • 6.6 实验:GUI设计图像空间变换系统
    • 6.7 作业:利用GUI设计 计算器、信号发生器等
    • 6.8 MTALB数据导入方法
    • 6.9 课外补充:MATLAB的App会取代GUI吗?
    • 6.10 模拟退火算法matlab实现
    • 6.11 遗传算法的Matlab实现
      • 6.11.1 进化算法(Evolutionary Algorithm)及相关函数介绍
    • 6.12 粒子群算法 matlab实现
      • 6.12.1 粒子群算法及MATLAB实例仿真
    • 6.13 BP网络的应用
    • 6.14 matlab 结构体
    • 6.15 群智能算法合集
  • 7 拓展知识
    • 7.1 什么是算法的时间复杂度?
    • 7.2 Notepad++使用教程
    • 7.3 MATLAB常用函数总结
    • 7.4 MATLAB常用知识点总结
    • 7.5 MATLAB命令大全
    • 7.6 视频:MATLAB官方基础教程
    • 7.7 经典书籍:Matlab2012经典超强教程
    • 7.8 经典书籍:MATLAB揭秘(自学宝典)
    • 7.9 经典资料:MATLAB N个实用技巧
    • 7.10 Matlab编程小技巧
    • 7.11 寻优算法
      • 7.11.1 Dijkstra算法python实现
    • 7.12 PYTHON基础教程
      • 7.12.1 Python进阶
      • 7.12.2 Python小技巧
      • 7.12.3 Python总结
        • 7.12.3.1 Python循环语句总结
        • 7.12.3.2 24个顶级Python库
        • 7.12.3.3 魔法函数
      • 7.12.4 廖雪峰python
      • 7.12.5 正则表达式基础
      • 7.12.6 numpy
        • 7.12.6.1 101道Numpy习题
        • 7.12.6.2 Numpy简要语法教程
        • 7.12.6.3 Numpy实现全连接神经网络 (手写数字识别)
        • 7.12.6.4 图解NumPy
      • 7.12.7 matplotlib
        • 7.12.7.1 matplotlib练习50题
        • 7.12.7.2 Matplotlib速查表
        • 7.12.7.3 Matplotlib 实操指南
      • 7.12.8 Python3 模块 import
      • 7.12.9 Python 小项目
    • 7.13 参考资源:数据结构与算法
      • 7.13.1 十大经典排序算法总结
    • 7.14 机器学习概述
      • 7.14.1 反向传播算法
        • 7.14.1.1 反向传播的数学原理
      • 7.14.2 极大似然估计
        • 7.14.2.1 极大似然估计与最小二乘法
      • 7.14.3 Batch Normalization
        • 7.14.3.1 Batch Normalization&Dropout浅析
        • 7.14.3.2 ​BN层的梯度反向传播计算
        • 7.14.3.3 Batch Size的大小与神经网络的性能
        • 7.14.3.4 标准化和归一化
      • 7.14.4 主成分分析PCA与SVD奇异值分解
        • 7.14.4.1 岭回归 与 PCA
        • 7.14.4.2 PCA原理推导
        • 7.14.4.3 PCA原理新解
        • 7.14.4.4 svd
        • 7.14.4.5 PCA数学原理
      • 7.14.5 正则化
        • 7.14.5.1 L1、L2正则化和过拟合 总结
        • 7.14.5.2 L1 和 L2 正则化的直观解释
      • 7.14.6 SVM
        • 7.14.6.1 从零推导支持向量机(SVM)
        • 7.14.6.2 支持向量机(SVM)介绍
        • 7.14.6.3 SVM推导与实战
        • 7.14.6.4 支持向量机的直观理解
        • 7.14.6.5 浅显易懂的支持向量机SVM
      • 7.14.7 线性回归
      • 7.14.8 逻辑回归
      • 7.14.9 BP算法
        • 7.14.9.1 万能逼近——神经网络拟合任意函数原理
      • 7.14.10 激活与池化
        • 7.14.10.1 激活函数与损失函数 小结
      • 7.14.11 深度学习简述
        • 7.14.11.1 MATLAB2020深度学习实例
      • 7.14.12 损失函数与误差反向传播
        • 7.14.12.1 梯度下降与损失函数
      • 7.14.13 深度学习优化问题
      • 7.14.14 梯度下降法
        • 7.14.14.1 各类梯度下降算法的Python实现
        • 7.14.14.2 梯度下降的直观理解
        • 7.14.14.3 动量、RMSProp、Adam
      • 7.14.15 卷积的概念
        • 7.14.15.1 卷积的矩阵化算法
      • 7.14.16 局部连接
      • 7.14.17 RNN
      • 7.14.18 LSTM
      • 7.14.19 CNN-四大经典CNN技术浅析
      • 7.14.20 熵(Entropy)与交叉熵
      • 7.14.21 softmax函数详解
      • 7.14.22 自编码算法详细理解与代码实现
      • 7.14.23 pytorch
        • 7.14.23.1 ​PyTorch简介
          • 7.14.23.1.1 Pytorch快速入门资料
        • 7.14.23.2 CNN的PyTorch实现
        • 7.14.23.3 pytorch总结
        • 7.14.23.4 PyTorch trick 集锦
        • 7.14.23.5 在PyTorch上加载自定义数据集
        • 7.14.23.6 实战:Pytorch识别验证码
        • 7.14.23.7 实战:Transformer的最简洁pytorch实现
        • 7.14.23.8 使用PyTorch实现神经网络分类
      • 7.14.24 卷积神经网络CNN概述
        • 7.14.24.1 CNN 简易原理
        • 7.14.24.2 卷积神经网络CNN原理详解
        • 7.14.24.3 自己手写一个卷积神经网络
        • 7.14.24.4 CNN反向传播算法
        • 7.14.24.5 卷积计算、作用与思想
        • 7.14.24.6 用卷积神经网络CNN识别手写数字集
        • 7.14.24.7 卷积 池化 参数的计算
        • 7.14.24.8 im2col方法实现卷积算法
        • 7.14.24.9 卷积核的梯度计算
        • 7.14.24.10 卷积层反向传播推导及实现
        • 7.14.24.11 反向传输算法
          • 7.14.24.11.1 resnet残差网络
        • 7.14.24.12 CNN反向传播的MATLAB实现
      • 7.14.25 神经网络的调参技巧
      • 7.14.26 BP神经网络
        • 7.14.26.1 零开始搭建bp神经网络
        • 7.14.26.2 MATLAB自带的bp工具箱
        • 7.14.26.3 神经网络中偏置(bias)的作用
      • 7.14.27 聚类分析 k-means
        • 7.14.27.1 matlab做聚类分析(k-means)
        • 7.14.27.2 聚类模型探讨综述
        • 7.14.27.3 5种经典聚类算法
      • 7.14.28 深度学习的一些概念
      • 7.14.29 人工智能简述:AI的过去和现在
      • 7.14.30 k-NN(k近邻算法)
      • 7.14.31 神经网络中的优化器:BGD、SGD、MBGD、Momentum
      • 7.14.32 卷积神经网络的经典网络总结
        • 7.14.32.1 卷积神经网络中十大拍案叫绝的操作
      • 7.14.33 GAN 对抗样本攻击
      • 7.14.34 蒙特卡洛模拟
      • 7.14.35 dropout与随机部分连接
      • 7.14.36 Jupyter 等 IDE概览
      • 7.14.37 分类算法常用评价指标
      • 7.14.38 Inception 网络与不变性
      • 7.14.39 卷积神经网络的可视化
      • 7.14.40 隐马尔可夫模型HMM
        • 7.14.40.1 马尔科夫链
    • 7.15 MATLAB音频处理
      • 7.15.1 python处理音频信号
    • 7.16 图像处理
      • 7.16.1 图像处理中的指标
    • 7.17 代码集
    • 7.18 论文写作与阅读方法
      • 7.18.1 期刊投稿攻略
      • 7.18.2 论文排版教程
      • 7.18.3 SCI-HUB论文下载技巧
      • 7.18.4 几种论文写作神器,提高写作效率
      • 7.18.5 latex入门
      • 7.18.6 LaTeX教程
    • 7.19 机器学习常用的网站以及资源
      • 7.19.1 很详细的ML&DL学习博客
    • 7.20 SymPy 符号计算基本教程
  • 8 程序设计数学基础
    • 8.1 编程数学基础
      • 8.1.1 概率的历史
      • 8.1.2 概率
        • 8.1.2.1 常见概率分布
          • 8.1.2.1.1 二维正态分布
        • 8.1.2.2 蒙特卡罗方法
        • 8.1.2.3 置信区间
        • 8.1.2.4 协方差与相关系数
      • 8.1.3 矩阵 向量求导法则
      • 8.1.4 雅可比矩阵 海森矩阵
      • 8.1.5 矩阵的几种分解方式
      • 8.1.6 行列式和代数余子式
      • 8.1.7 向量
      • 8.1.8 矩阵的基本运算
      • 8.1.9 矩阵分析
      • 8.1.10 矩阵的LU分解
      • 8.1.11 矩阵奇异值分解(SVD)
        • 8.1.11.1 SVD分解2
        • 8.1.11.2 SVD分解逐步推导
        • 8.1.11.3 奇异值与特征值的意义
      • 8.1.12 随机向量
        • 8.1.12.1 随机过程简述
      • 8.1.13 投影矩阵和最小二乘
      • 8.1.14 知乎数学精选集
        • 8.1.14.1 高数问题集
      • 8.1.15 小波变换
      • 8.1.16 程序设计数学基础1:高等数学
      • 8.1.17 程序设计数学基础2:线性代数
      • 8.1.18 程序设计数学基础3:概率论和数理统计
      • 8.1.19 向量的距离与相似度计算
      • 8.1.20 复数
      • 8.1.21 高等数学——幂级数
      • 8.1.22 无穷小的本质
      • 8.1.23 数列极限和收敛性
      • 8.1.24 不定积分技巧总结
    • 8.2 有趣的数学题目
    • 8.3 高等数学
      • 8.3.1 泰勒级数
  • 9 路径规划与智能算法
    • 9.1 常见路径规划算法简介
    • 9.2 Dijkstra算法详细
  • 10 教学文档
    • 10.1 授课计划
    • 10.2 课程标准
GUI设计初步

GUI是什么?


https://www.bilibili.com/video/BV1GJ41137UH?p=7


                            图形界面_GUI_程式设计

一、Graphical user interface(图形用户界面)

(一)UI(User Interface)

1、User interface is a method of interaction between a person and a computer(用户界面是人与计算机之间的一种交互方法)

(二)Starting A GUI Program

1、Set your “current folder” where you want to store the GUI program(设置要在其中存储GUI程序的“当前文件夹”)

2、Type guide (graphical user interface design environment)in the command window to create a MATLAB GUI interactively(在命令窗口中键入guide(图形用户界面设计环境)以交互方式创建MATLAB GUI)

(三)GUI Figure



(四)Align the Components(对齐组件)

Tools--Align Objects



(五)Label the Push Buttons(标记按钮)

View--Property Inspector,或者双击对象



(六)GUI Scrip Structure(脚本结构)

function varargout = untitled(varargin)
% UNTITLED MATLAB code for untitled.fig
...
% Begin initialization code - DO NOT EDIT
...
% --- Executes just before untitled is made visible.
function untitled_OpeningFcn(hObject, eventdata, handles, varargin)
...

%放入程式码的位置(1)

% --- Outputs from this function are returned to the command line.
function varargout = untitled_OutputFcn(hObject, eventdata, handles) 
...
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)

%放入程式码的位置(2)

...
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
...
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)

1、示例代码:(在上部分代码的粗体且斜体(1)的地方,即openingFcn之后)

handles.peaks = peaks(35);%handles为openingFcn的内参,cell型
handles.membrane = membrane;
%membrane是一个函数直接输入就会出三维图像,一般和mesh、surf一起用来绘制图像
[x,y] = meshgrid(-8:.5:8);
r = sqrt(x .^ 2 + y .^ 2) + eps;
sinc = sin(r) ./ r;
handles.sinc = sinc;
handles.current_data = handles.peaks;
surf(handles.current_data)

输出结果:



注意:

(1)peaks是从高斯分布转换和缩放得来的包含两个变量的函数,在演示meshsurfpcolorcontour等函数中很有用。



(2)membrane是一个函数直接输入就会出三维图像,一权般和mesh、surf一起用来绘制图像

(3)[x,y]=meshgrid(-8:.5:8);生成二维或三维网格



(4)eps是一个函数,它表示的是一个数可以分辨的最小精度。默认时它表示1到它下一个浮点数之间的距离的一半,而正好等于最大小于1的浮点数到最小大于1的浮点数之间的距离。eps=2.2204e-16

(5)surf()绘制曲面图



2、示例代码:(在上部分代码的粗体且斜体(2)的地方,即pushbutton1_Callback之后)

示例代码:

handles.peaks = peaks(35);
handles.membrane = membrane;
%membrane是一个函数直接输入就会出三维图像,一般和mesh、surf一起用来绘制图像
[x,y] = meshgrid(-8:.5:8);
r = sqrt(x .^ 2 + y .^ 2) + eps;
sinc = sin(r) ./ r;
handles.sinc = sinc;
handles.current_data = handles.peaks;
surf(handles.current_data)

输出结果:



3、What If We Have Two axes?(如果有两个axes,会咋样呢)

---会显示在第二个,即最后一个axes上

(七)handles - Parents of the GUI Object(GUI对象的父对象)



1、Setting the axes for Plotting(设定绘制的轴ID)

示例代码:

%将上面的代码中
surf(handles.current_data) 
%改为 
%(1)
axes(handles.axes1);%呼叫axes1,后面所作的操作都是在axes上操作
surf(handles.current_data);
%或者
%(2)
surf(handles.axes1,handles.current_data);%surf的操作在axes1上进行

输出结果:



(八)Review - set() and get()

1、get() acquires properties:获取特性

2、set() sets properties:设置特性

示例代码:

a = get(handles.slider1,'Value');
set(handles.text2,'String',num2str(a));

输出结果:



注意:

·添加位置在 slider1_Callback 

(九)Practice

1、Write a GUI program

2、It contains 2 sliders each of which is associated with a variable with value ranged from 0 to 100

3、Display the summation of the slider variables as an integer

4、You may need these function:get()、set()、 int16()、num2str()



答案代码:

a = int16(get(handles.slider1,'Value'));
b = int16(get(handles.slider2,'Value'));
c = (a + b);
set(handles.text5,'String',num2str(c));
set(handles.text9,'String',num2str(a));
set(handles.text11,'String',num2str(b));

输出结果:



注意:

在 slider1_Callback 和 slider2_Callback 中都要加入上述程序

(十)Using handles to Store Variables

1、Variables in callback functions are local variables(回调函数中的变量是局部变量)

2、handles is also used to pass variables from one GUI object to another(handles也用于将变量从一个GUI对象传递到另一个GUI对象)

3、Store variable into handles

示例代码:(guidata()固定配合,不可变更)

handles.myData = a;
guidata(hObject,handles);

4、Retrieve variable from handles

示例代码:

a = handles.myData;

(十一)Compiling the GUI Program(编译GUI程序)

deploytool




=====================================

======================================

1, GUIDE

网上很多简化教程都是基于GUIDE模式的,这样的构建挺好的。

但是,这不利于搭建自有工具包和编译exe,所以选用命令流。

如果对于GUIDE模式感兴趣

doc GUIDE


2,Model,View,Control

% 预清除
clc
clear
clf

View界面

就是写出来要用户看到的界面。

比较特殊的是按钮。按钮除了能显示出来被看到外,还有一个回馈机制,叫做Callbacks。点击就会运行它调用设置好的函数,此文为更新函数(Update)。

建议使用断点模式,一行一行运行理解。如果对这个层不熟悉了,请去看此专栏(003)

%建议使用断点模式,一行一行运行理解。
% 第一层 figure,如果对这个层不熟悉了请去看此专栏(003)
fig = figure(1);            % 声明一家之主

% 第二层 #1 axes             % 大儿子能划线,画面,画体,反正就是画画画
ax.Parent = fig;
ax.Units = 'normalized';
ax.Position = [0.15,0.3,0.5,0.6];
ax.Box = 'on';
ax.Title.String = '拟合工具';
ax = axes(ax);

% 第二层 #2 预制 文字        % 二儿子能 显示,复制字符
txtFit.Parent = fig;
txtFit.Style = 'edit';
txtFit.Units = 'normalized';
txtFit.Position = [0.7,0.4,0.25,0.4];
txtFit.String = '点击拟合,开始运行';
txtFit.Enable = 'off';    % 关闭提示信息编辑
txtFit.Max = 3;
txtFit = uicontrol(txtFit);

% 第三层 #3 预制 按钮        % 三儿子就是个按钮
btn.Parent = fig;
btn.Style = 'pushbutton';
btn.Units = 'normalized';
btn.Position = [0.4,0.05,0.2,0.1];
btn.String = '拟合';
btn.TooltipString = '点击拟合';
btn.Callback = {@Update,ax,txtFit}; % V通知到C
btn = uicontrol(btn);% 代码运行到这里可以先看下界面了;但是点击按钮会报错,因为没有写那个要用的更新函数





Control 控制

当接收到View的通知(点击按钮),控制就会运行其它函数,并控制View更新显示。

function ax = Update(obj,event,ax,txtFit)  % obj,event这是默认出现的参量,是调用按钮所附加的。
[dataX,dataY] = ReadXlsxData;
[fr,gof] = FitData(dataX,dataY);
plot(ax,dataX,dataY,'ro');
hold on
plot(fr)
hold off
str = sprintf('y = %0.2d x + %0.2d \n sse is : %0.2d \n r^2 is : %0.2d',fr.p1,fr.p2,gof.sse,gof.rsquare);
txtFit.String = str;
txtFit.Enable = 'on';            %新的内容会覆盖掉旧的内容,可反复拟合不同.xlsx里的数据
end

Model模型

核心内容的就一个函数拟合,因为只有它做最核心的计算出拟合系数的活。

function [fr,gof] = FitData(dataX,dataY)
ft = fittype('poly1');
[fr,gof] = fit(dataX,dataY,ft);
end

其它辅助函数

% 载入数据 把数据按图写入excel表格,并保存为.xlsx的文档。
function [dataX,dataY] = ReadXlsxData
fileName = uigetfile('*.xlsx');
tempData = importdata(fileName);
dataX = tempData.data(:,1);
dataY = tempData.data(:,2);
end






把Part3下面所有代码贴到一个.m文件(2017a支持在一个文件,如果2014b以后有不支持的,额外贴两个function就是了),自己准备两三个不同数据.xlsx,运行一下APP的快感吧。再次点击拟合是会让你选新的数据组的呦。


App明白过程就好,先试试修修改改这个流程,然后再改进升级吧。