目錄
回复内容:
首頁 後端開發 Python教學 怎样用 Matlab 写出优雅的代码?

怎样用 Matlab 写出优雅的代码?

Jun 06, 2016 pm 04:23 PM
gui 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大法真的好!但就是不喜欢。
同问为何。
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
如何使用ttkbootstrap為Python GUI創建優美的介面? 如何使用ttkbootstrap為Python GUI創建優美的介面? May 07, 2023 pm 03:40 PM

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

scilab和matlab的差別 scilab和matlab的差別 Dec 11, 2023 am 11:13 AM

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

誰說Python寫GUI程式醜?那是你不會美化! 誰說Python寫GUI程式醜?那是你不會美化! Apr 11, 2023 pm 01:52 PM

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

Python 文字終端 GUI 框架,太酷了 Python 文字終端 GUI 框架,太酷了 Apr 12, 2023 pm 12:52 PM

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

Python小技之不用 Gui,照樣實現圖形介面 Python小技之不用 Gui,照樣實現圖形介面 Apr 12, 2023 pm 04:43 PM

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

Python Tkinter GUI程式設計怎麼實現Frame切換 Python Tkinter GUI程式設計怎麼實現Frame切換 May 11, 2023 pm 04:25 PM

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

Matlab中自備的Java操作有哪些 Matlab中自備的Java操作有哪些 May 03, 2023 pm 04:07 PM

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

Python GUI佈局工具Tkinter使用方法是什麼 Python GUI佈局工具Tkinter使用方法是什麼 May 09, 2023 pm 02:16 PM

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

See all articles