怎样用 Matlab 写出优雅的代码?
看着大家在这个问题(为什么不少程序员认为Matlab的语言设计不优雅甚至比较丑?能否举出一些例子来说明? - 数学)下面吐槽,背上凉飕飕的。因为组里的历史原因,换语言不现实。。。
我自己的体验是用matlab写小规模(1000行以内)的gui很快速,交互性不是特别强的gui可以直接用guide搞定。但是代码的复杂度随着代码长度的平方上升。
求问怎样改善用matlab写代码的程序风格,写出简明易维护的程序呢?
回复内容:
想到哪说哪,有点乱。用deal实现Python中的“一行赋多值”。
<span class="p">[</span><span class="n">H</span><span class="p">,</span> <span class="n">W</span><span class="p">,</span> <span class="n">N</span><span class="p">]</span> <span class="p">=</span> <span class="n">deal</span><span class="p">(</span><span class="mi">42</span><span class="p">);</span> <span class="c">% H = 42, W = 42, N = 42</span> <span class="p">[</span><span class="n">H</span><span class="p">,</span> <span class="n">W</span><span class="p">,</span> <span class="n">N</span><span class="p">]</span> <span class="p">=</span> <span class="n">deal</span><span class="p">(</span><span class="mi">28</span><span class="p">,</span> <span class="mi">28</span><span class="p">,</span> <span class="mi">32</span><span class="p">);</span> <span class="c">% H = 28, W = 28, N = 32, respectively</span>
并不是很会写MATLAB,我只是说一说看到的MATLAB代码的一些问题和建议。
第一是设计模式,
一些的MATLAB工程师并没有设计模式,一般都是把一个小过程式的demo扩充成为一个大程序,代码中有很多重复的代码,其实在基于命令行的demo完成之后就应该考虑要设计一个怎么样的程序,然后推倒重来,减少每一行没有必要的代码,利用每个可以利用的数据。
第二是数据结构的管理,
MATLAB提供了很方便的一些数据结构,如何善用他们是一个很大的问题,在这方面,应该说是尽量减少每一行自己手写的代码,在用每个功能前Google一下是否有内建支持,花十分钟看一下文档理解内建支持有何优劣之处,然后使用MATLAB语言设计者的思维来写MATLAB。
MATLAB使用者似乎很喜欢使用全局变量,这本身其实无可厚非,全局变量有时候会导致程序出一些问题,可以使用类似于命名空间的方法加以区分。
第三是代码的管理,
业余程序员有时候会有一个问题,就使用注释复制粘贴和压缩文件来管理代码,这样在稍微庞大的系统中代码就会变得不可读,而且工程人员自己也不知道自己在干什么,这方面我的建议是花一个下午时间学习一下git
第四是结构上的分离,
在设计GUI的时候可以尽量符合MVC,视图,控制,数据分离,尽量每个.m文件拥有各自的功能,每个函数逻辑分离。当然可以做的轻量级一些。个人不喜欢把文件放的太长。
第五是使用更高阶的编程范式,
MATLAB可以写的OO一些,不过MATLAB对于函数式编程的支持不是很好,因为写的不多就不多谈了。
以上是我读一些工程师,科学家的代码看到的一些问题,并不仅限于MATLAB,如有不当还请多指教。 唉我来慢慢更新自己的学习笔记吧。
1. 代码风格:
提完问题顺手谷歌了一下,下面这个guideline可以参考:
MATLAB Style Guidelines 2.0
2. 怎样优雅地写gui
Stackoverflow中解决gui代码糟糕的问题:matlab - What's the "right" way to organize GUI code?
官方文档:Writing Apps in MATLAB 。
范例:File Exchange 里一个使用OO写gui的范例,看起来很棒。
3. 使用APP功能“封装”程序
4. Google
没必要自己重新造轮子,大部分问题都是有人遇到过并且解决过的。因此遇到几分钟以内解决不了的问题,可以Google一下解决方法。毕竟大部分matlab使用者都不是程序开发专家,大多数时候Get things done才是好的工作态度。
这里还有另外一个问题:
基础不好,遇到问题连搜什么关键词都不知道。
我的笨办法是问师兄师弟、去stackoverflow和Mathwork网站上提问,或者干脆把书快速扫一遍,只注意概念和定义,忽略技术细节。5.用正版
如果有条件用正版的话,就用正版吧,遇到问题可以直接呼叫Mathwork技术支持,也可以节省很多时间。
唉看起来matlab好像也不是那么无药可救呢 我是做工程应用的,我觉得一个好的算法只有得到应用才是好的算法,所以我个人不推崇使用natlab的GUI,matlab做算法分析简洁高效,逻辑够复杂,人机交互没有必要做matlab的GUI。
其实上面的回答都是关于OO以上的风格,因为设计思想的原因。设计模式的思想是可以用,前提是你本来就用得比较熟,在matlab中边学边用还是算了吧。
我觉得能够直接按原文转化为C++的matlab程序才是好程序,这才是一个算法脱离理论,投入应用的终极归宿。
话说回来,当可以没有障碍地用C++做算法的时候,你就轻易不想再回来用matlab了,除非是一些中间过程要繁琐显示的才拿matlab分析一下。
话说回来,我个人觉得windows和matlab对中国大学生的伤害之大其实难以估量,我们一开始就用上了最为高大上的成熟工具,却忽视了他们的底层实现和设计思想,知道和实现过是两种层次,在需要创造性的时候经验和手段就能显现作用,不能抢了先机、失了后手,如果有读大学的孩子的话,建议用用那些开源的操作系统和数值算法,不要贪图方便,在最需要思考和实践的年龄自废武功,把思考和实践的楼阁建在了空中。 MATLAB大法真的好!但就是不喜欢。
同问为何。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

這兩張圖片是截取官網上提供的展示效果圖:主題切換簡單的主題切換,由於當前視窗上組件很少,所以感覺效果不明顯,但是當組件佈局很多時就會很好看。 importttkbootstrapasttkfromttkbootstrap.constantsimport*root=ttk.Window()style=ttk.Style()theme_names=style.theme_names()#以清單的形式傳回多個主旨名稱theme_selection=ttk.Frame(root,padding=(10,10

scilab與matlab的差別:1、註解符號;2、預設變數的表示;3、運算子的用法;4、矩陣的定義與呼叫;5、程式的編輯與執行;6、資料型別;7、函數庫;8、圖形介面;9、社區支援與生態系統;10、跨平台相容性;11、價格。詳細介紹:1、註解符號,在Scilab中,註解是用「//」引導,而在Matlab中,註解是用「%」引導;2、預設變數的表示,在Scilab中等等。

在平時工作學習當中,我們經常會編寫一些簡單的 Python GUI 工具,以此來完成各種各樣的自動化任務,例如批量處理文件,批量處理圖片等等。當我們進行這些工具的編寫之時,往往只關注了功能的實現,而忽略了頁面的美化,這也使得在人們的眼中,Python 構建的GUI 程序都是比較low 的,今天我們先忽略掉功能,著眼於頁面的美化,來看看純Python 的編寫的GUI 程式也可以很美觀!頁面佈局我們先完成一個基本的 GUI 佈局假設我們想要做一個進位轉換的工具,那麼大致的佈局如下圖:上圖是

Curses首先出場的是 Curses[1]。 CurseCurses 是一個能提供基於文字終端視窗功能的動態庫,它可以: 使用整個螢幕建立和管理一個視窗使用8 種不同的彩色為程式提供滑鼠支援使用鍵盤上的功能鍵Curses 可以在任何遵循ANSI/POSIX標準的Unix/Linux 系統上運作。 Windows 上也可以運行,不過需要額外安裝 windows-curses 庫:pip install windows-curses 上面圖片,就是一哥們用 Curses 寫的 俄羅斯

如果說程式設計師有什麼怕的,那我想可能就是- 需求又變了!這不,客戶在筆者開發完一個基於瀏覽器的Web 應用程式之後說:程式需要在內(無)部(網)環境中運作…這就意味著無法安裝Python 環境!誰叫咱是程式設計師呢,不就開發一個GUI 版本嗎,難不倒我…可是聽到給的時間後,就不淡定了… …為了不影響客戶的評測,只能給出一周時間!構思GUI 雖然也不難,不過需要梳理一遍服務以及與用戶的交互接口,弄不好就得為GUI 單獨編寫接口,這點時間顯然不夠呀。不行,就再想辦法…不然直接將 Web

1.Frame的tkraise()方法介紹通常,一個Tkinter應用程式由多個Frame組成。而且您經常需要在Frame之間切換以顯示與使用者選擇相關的Frame。 Tkinter允許將Frame堆疊在一起。要顯示特定Frame,只需按堆疊順序將一個放在另一個之上。頂部Frame將可見。要將Frame置於頂部,可以使用Frame小部件的tkraise()方法,如下所示:frame.tkraise()2、tkraise用法範例下面將實現一個溫度轉換小應用,華氏溫度和攝氏溫度分別使用兩個不同的Fram

1取得滑鼠在全螢幕位置畫面左上角為座標原點,取得滑鼠位置和取得滑鼠像素顏色建議和while循環或timer函數結合使用:importjava.awt.MouseInfo;mousepoint=MouseInfo.getPointerInfo().getLocation();mousepoint =[mousepoint.x,mousepoint.y]2取得目前剪切板內容importjava.awt.Toolkitimportjava.awt.datatransfer.DataFlavorclip=

圖形使用者介面(GUI)圖形使用者介面(GUI)只不過是一個桌面應用程序,可幫助我們與電腦進行互動像文字編輯器這樣的GUI應用程式可以建立、讀取、更新和刪除不同類型的檔案數獨、西洋棋和紙牌等應用程式則是遊戲版的GUI程式還有GoogleChrome、Firefox和MicrosoftEdge之類的GUI應用程式是用來瀏覽Internet的這些都是我們日常在電腦上使用的一些不同類型的GUI應用程序,其實我們透過Tkinter也是可以建立簡單的類似應用程式的今天我們作為GUI的入門,將創建一個非常簡
