imuncle.github.io
imuncle.github.io copied to clipboard
大叔的个人小站
最近上的材料测试方法课程有一个大作业,要求根据原理做一种材料分析仪器的演示装置。像这种大制作的东西,毫无疑问我承担了其中的编程部分。在“产品经理”的强烈要求下,我用MATLAB写了一个串口通信的程序,可以获取STM32发送的数据,并绘制出曲线。 # MATLAB GUI 之前也没用过MATLAB GUI,这次是因为时间比较紧,技术比较菜,MATLAB代码量挺少的,就选择了MATLAB,之前一直用的Qt,本来也想尝试electron的,但是好像它不能访问USB设备。 所以现学了一波MATLAB GUI操作,实在是很简单,正所谓MATLAB一时爽,一直MATLAB一直爽。 首先在命令行输入'guide'新建一个空白GUI。 ```matlab >> guide ```  然后简单添加,效果如下图所示:  其中下拉菜单我一直添加到了COM23口,可谓是丧心病狂。 # 实现逻辑 其实GUI开发很简单,全程写回调函数就行了,界面设计又是图形化拖动,简直没难度有木有。 我这里只有一个下拉菜单,两个按钮,所以有三个回调函数,再加上一个串口接收中断回调函数,一共四个函数。 ## 下拉菜单回调函数 ```matlab % --- Executes on selection change...
随着博客写的越来越多,寻找内容越来越麻烦,于是萌生出了做一个文章搜索的功能。 # GitHub API 在查阅了GitHub API后,发现可以很方便地搜索issue,repository,commit,author等,还支持多条件查询,可以说是非常方便了,详情见[Search | GitHub Developer Guide](https://developer.github.com/v3/search/) 我这里只需要查询我自己发布的issue,这里的查询条件有以下五个: * 查询关键词 * 作者:imuncle * 对象:open状态的issue * 范围:标题和内容 * 排序:匹配程度递减排序 所以我的查询链接为: ```javascript var search_url = 'https://api.github.com/search/issues?q='+search+' author:imuncle+in:title,body+is:open+is:public+sort:interactions'; ``` 关于以上的查询条件设置可以查看这两个链接了解:...
整理电脑文件的时候发现了去年的奋斗史,截个图纪念一下  **RM2019继续加油!** 🥇
当我们要分享一段代码的时候,通常流程是使用截图工具,然后增加一些备注等等。最近发现一个小工具 - carbon。 carbon是一个在线工具,它负责生成更加漂亮不同风格的代码图片,绝对比截图工具更加搞逼格。 效果图:  地址:[Carbon](https://carbon.now.sh/)
寻路算法学习
前几天搞美赛,题目是怎么逃离卢浮宫最快,感觉应该是一个路径规划的问题。于是死磕了几天的寻路算法。 寻路算法主要见于即时战略游戏(RTS)中,分为静态路径寻路和动态路径寻路,这里只讨论静态寻路。 静态寻路算法中最常见的就是**A-Star算法**和**Dijkstra算法**,其中**A-Star算法**是基于**Dijkstra算法**的。 ## Dijkstra算法 Dijkstra算法又称为最短路径算法,是由荷兰著名的计算机科学家Dijkstra提出来的。它是一种集中式的静态算法,用来求解图中指定节点到其他节点的最短距离。 Dijkstra算法的具体算法如下: 如下图,首先以终点(图中红圈处)为原点,然后访问四周相邻的方格,如果不是障碍块,则给改方格记录上从终点到达该方格的步数。接下来在此基础上进一步访问更多的方格,直至遍历完所有的方格。  可以查看这个[在线示例](https://howtorts.github.io/examples/2-dijkstra-path-building/),如果没有蓝线则说明没有找到路径,刷新页面即可(因为障碍是随机生成的,不一定能找到路径)。 ## A-Star算法 1968年,Hart,Nillsion等提出了基于启发式函数的最短寻路算法A-Star,用于解决静态路由网中的最短路径问题。它与Dijkstra算法同属于求最短路径搜索算法,但是A-Star算法使用了启发式信息,不会盲目的搜索路径,而是评估地图上任意点到目标点的费用,更好地选择搜索方向,优先搜索最有希望的节点。A-Star算法通过估价函数(Heuristic Function)$$f(h)$$来估计图中的当前点S到目标点G的距离,并由此决定它的搜索方向,其公式表示为: =h(n)+g(n)$$) 其中`n`代表地图上的某个节点,`g(n)`是从起始点S到当前节点n的实际花费,`h(n)`为当前节点`n`到目标节点的最佳路径代价估计,用于估计当前节点到目标节点的最佳距离,而并非是实际的距离,估计得时候并不需要考虑地图中的障碍物的存在。常用的距离估计有:曼哈顿距离、欧几里得距离、平方欧式距离、对角距离等。不同的估计方法使用与不同的地图场景中,这也是A-Star算法的一大缺点,如果估计方法选择的不对,那么可能找不出最短路径。  上图展示的是一个使用A-Star算法计算出的最短路径,方格中有两个数字,第一个数字`g(n)`,第二个数字是`h(n)`,从上图可以清晰地看出A-Star算法的工作过程。 关于A-Star算法的讲解,这个网址讲解的非常详细: [Introduction to the A* Algorithm](https://www.redblobgames.com/pathfinding/a-star/introduction.html) 最后贴上一些在线示例,这些示例全部来自博客[How To RTS](https://howtorts.github.io/) [最基本的Dijkstra算法查找的路径](https://howtorts.github.io/examples/2-dijkstra-path-building/) [基本的Flow Field模型](https://howtorts.github.io/examples/5-flow-field-improvements/index.html)...
开始学习ROS啦,我以胡春旭编写的《ROS机器人开发实践》作为参考书籍。 首先是装了ubuntu 16.04系统,然后安装ROS,结果就安装ROS这一步就卡了一下午。 下载ROS需要添加镜像源,可以添加国内的也可以添加国外官方的镜像源,书上写的镜像源链接如下: ```bash sudo sh -c 'echo "deb http://packages.ros/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.lis' sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.lis' sudo...
 今天给Ubuntu重装系统,在Ubuntu镜像文件下载界面发现了**rufus**这个小巧的软件,下载地址如下: [下载地址](https://rufus.ie/) 只需要注意在**Boot Selection**这一栏选择FreeDOS,其他的就傻瓜操作就行了。
# 符号说明 符号|含义 :--:|:--: m|训练样本的数目 x|特征/输入变量 y|目标变量/输出变量 (x,y)|训练集中的实例 h(hypothesis)|学习算法的解决方案或函数 # hypothesis function  # 代价函数 如何确定hypothesis function中的两个参数呢?如何评估这个函数的效果是否好呢?需要用到代价函数(cost function): 我们的目标便是选择出可以使得建模误差的平方和能够最小的模型参数。 即使得代价函数为:  代价函数也被称作平方误差函数,有时也被称为平方误差代价函数。我们之所以要求出误差的平方和,是因为误差平方代价函数,对于大多数问题,特别是回归问题,都是一个合理的选择。 还有其他的代价函数也能很好地发挥作用,但是平方误差代价函数可能是解决回归问题最常用的手段了。  # 梯度下降 梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数的最小值。  想象一下你正站立在山的这一点上,站立在你想象的公园这座红色山上,在梯度下降算法中,我们要做的就是旋转360度,看看我们的周围,并问自己要在某个方向上,用小碎步尽快下山。这些小碎步需要朝什么方向?如果我们站在山坡上的这一点,你看一下周围,你会发现最佳的下山方向,你再看看周围,然后再一次想想,我应该从什么方向迈着小碎步下山?然后你按照自己的判断又迈出一步,重复上面的步骤,从这个新的点,你环顾四周,并决定从什么方向将会最快下山,然后又迈进了一小步,并依此类推,直到你接近局部最低点的位置。 批量梯度下降(batch...
重装了电脑之后突然想尝试一下最新版的keil MDK,之前一直用的是MDK 520版本,这次直接升级到了MDK 526版本。 新版本其他都还挺好,但就是调试的时候会跳出这样一个提示框:  出现提示框不久调试就会自动终止,调试起来非常费劲。 百度了一下发现是因为高版本的MDK自带的jlink驱动与jlink调试器里面的驱动版本不兼容,需要手动更换驱动。 只需要把驱动下载下来,解压,用里面的文件替换掉keil安装目录下的`ARM\Segger\`文件夹里的同名文件,就行了。 # 下载地址 点[这里](https://download.csdn.net/download/breakingdawn0/10700757)下载。
机器学习分为两大类:**监督学习**和**无监督学习**。 # 监督学习 假如这里有一些房价的数据。你把这些数据画出来,看起来是这个样子:横轴表示房子的面积,单位是平方英尺,纵轴表示房价,单位是千美元。那基于这组数据,假如你有一个朋友,他有一套750平方英尺房子,现在他希望把房子卖掉,他想知道这房子能卖多少钱。  我们应用学习算法,可以在这组数据中画一条直线,或者换句话说,拟合一条直线(上图中品红色线),根据这条线我们可以推测出,这套房子可能卖150,000$。 当然这不是唯一的算法。可能还有更好的,比如我们不用直线拟合这些数据,用二次方程去拟合可能效果会更好。根据二次方程的曲线(上图中蓝色线),我们可以从这个点推测出,这套房子能卖接近200,000$。 可以看出,监督学习指的就是我们给学习算法一个数据集。这个数据集由“正确答案”组成。在房价的例子中,我们给了一系列房子的数据,我们给定数据集中每个样本的正确价格,即它们实际的售价然后运用学习算法,算出更多的正确答案。比如你朋友那个新房子的价格。用术语来讲,这叫做回归问题。我们试着推测出一个连续值的结果,即房子的价格。 回归这个词的意思是,我们在试着推测出这一系列连续值属性。 监督学习基本思想是,我们数据集中的每个样本都有相应的“正确答案”。再根据这些样本作出预测,就像房子和肿瘤的例子中做的那样。我们还介绍了回归问题,即通过回归来推出一个连续的输出,之后我们介绍了分类问题,其目标是推出一组离散的结果。 学习算法可以处理两种问题:**回归问题**和**分类问题**。假设有一个公司,想开发学习算法解决下面两个问题: 1. 你有一大批同样的货物,想象一下,你有上千件一模一样的货物等待出售,这时你想预测接下来的三个月能卖多少件? 2. 你有许多客户,这时你想写一个软件来检验每一个用户的账户。对于每一个账户,你要判断它们是否曾经被盗过? 问题一是一个回归问题,因为你知道,如果我有数千件货物,我会把它看成一个实数,一个连续的值。因此卖出的物品数,也是一个连续的值。 问题二是一个分类问题,因为我会把预测的值,用 0 来表示账户未被盗,用 1 表示账户曾经被盗过。所以我们根据账号是否被盗过,把它们定为0 或 1,然后用算法推测一个账号是 0 还是 1,因为只有少数的离散值,所以我把它归为分类问题。 以上就是监督学习的内容。 # 无监督学习 在无监督学习中,不同于监督学习的数据的样子,无监督学习中**没有任何的标签**。所以我们已知数据集,却不知如何处理,也未告知每个数据点是什么。别的都不知道,就是一个数据集。针对数据集,无监督学习就能判断出数据有两个不同的聚集簇。这是一个,那是另一个,二者不同。是的,无监督学习算法可能会把这些数据分成两个不同的簇。所以叫做**聚类算法**。...