小朋友,你学会了吗?
matlab程序优化
matlab程序调试
matlab执行速度优化
matlab内存管理
matlab程序优化
优化方法:Profiler程序进行分析 通过tic和toc函数进行程序运行分析
无力吐槽教程了,找客服要素材文件一天了都没发给我。这里参照帮助自学。(淦)
Profiler程序进行分析
在主页或编辑器中点击运行并计时按钮,开启探查器(或在命令行窗口中,键入 profile viewer)
这几种方法有神马差别吗? 是的,如果在编辑器中点击运行并计时的话,探测器会自动对编辑器下的代码进行分析。
如果是另外两种方法的话,需要自己输入代码。
如果自己输入代码,运行效果如下
此时间不是运行语句所用的实际时间。它是从您点击开始探查一直到探查停止所用的时间。如果报告的时间与您预期的时间差别很大(例如,一个简单语句花费数百秒),则探查时间比所需的时间长。此时间与探查摘要报告统计信息中报告的时间不匹配,默认情况下后者基于 performance 时钟时间。要查看使用不同类型时钟的探查统计信息,请使用 profile 函数而非探查器。
详细的探查结果在 探查摘要报告 中
探查摘要报告显示有关函数的总体执行情况的统计信息,并提供调用的每个函数的摘要统计信息。
下图很直观的显示了ode23函数即调用的其他函数的调用次数,执行时间等数据。
如果还想了解更详细的信息,只需要点击你想了解的内容(蓝色的,你不会想点什么0.014s吧)
2019a版本的同学注意!!!
是不是探查再要没有显示?为什么一模一样的代码和操作却没有预期的效果?是人性的扭曲还是道德的沦丧?
答案在这里:在预设中修改成这个样子。就可以显示了。(此处查阅了matlab中文论坛,原帖链接感谢大佬的指导。)
注意事项:1.过早优化的代码可能带来无谓的复杂性,而不会显著改善性能。2.第一次实施应尽可能简单。此后,如果速度成为问题,请使用探查功能来找出瓶颈所在。如果对完全相同的代码进行两次探查,每次获得的结果可能略有不同,这是与代码无关的固有时间波动所导致的。3.如果代码用大部分时间来调用少数内置函数,则表示您可能已对代码进行了最大程度的优化。
通过tic和toc函数进行程序运行分析
启动和关闭秒表计时器,用于比较同一功能不同写法所需时间的长短。
直接上帮助实例,就像掐秒表一样的计时方式。
试一试刚刚学过的探查器
两种优化程序的小技巧
循环向量化
matlab对矩阵的单位元素计算时速度不高。因此在编写程序的时候尽量编写矩阵和向量,而非直接对它的元素编程。(个人理解就是1.我设定一个数据0 1 2 3.把它组成一个一维向量;2.我设定一个一维向量[0 1 2 3];相比1而言,我并没有先输入数据在组装,而是直接作为一个整体写入。)
数组内存预分配
如果数组内容不断增加,意味着需要一块更大的连续内存区域,效率低。预分配就是先将足够的空间给出去,就不需要运行一次添加一次。可以用zeros函数(创建全零数组,先用0把空间占上,后期修改)进行分配(用法见帮助)
matlab程序调试
又是略讲,上帮助。
matlab常见错误包括语法错误和逻辑错误
语法错误:matlab会出现提示。会出现红色标志提示。
调试工具:单步执行 设置断点
设置断点可暂停执行 MATLAB 文件,以便检查你认为可能存在问题的值或变量。
有三种不同类型的断点:标准、条件和错误。
标准断点在文件的指定行暂停。单击左侧栏即可添加。
条件断点,MATLAB 只在满足指定条件时才在文件的指定行处暂停。在标准断点的基础上右键-设置/修改条件,输入你想满足的运行条件,红色圆点就会变成黄色圆点。
错误断点,MATLAB 会在遇到问题时暂停执行程序并进入调试模式。
是程序运行遇到错误后自行暂停,设置在运行的子选项中
帮助中还讲到了无效断点等其他断点性质,可以查阅帮助了解。
matlab执行速度优化
1.向量化的运算代替循环操作。
2.必须使用循环的情况下,在循环包含循环的情况下,尽量让内循环次数较大,外循环次数较少。
matlab内存管理
使用system_dependent memstats进行内存检查
在使用中,如果内存不足,可以在命令行窗口输入pack来清理内存。clear可以把一些系统中的临时变量进行清除。