怎样用 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 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











これらの 2 つの写真は、公式 Web サイトで提供されている表示レンダリングのスクリーンショットです: テーマの切り替えは単純なテーマの切り替えです。現在のウィンドウ上のコンポーネントが少ないため、効果は明らかではありませんが、コンポーネントが多い場合には見栄えが良くなります。レイアウト。 importttkbootstrapasttkfromttkbootstrap.constantsimport*root=ttk.Window()style=ttk.Style()theme_names=style.theme_names()#複数のテーマ名をリストの形式で返しますtheme_selection=ttk.Frame(root,padding=(10,10)

1. マウスの全画面位置を取得します。画面の左上隅が座標の原点です。マウスの位置を取得し、マウスのピクセルの色を取得するには、while ループまたはタイマーと組み合わせて使用することをお勧めします。 function: importjava.awt.MouseInfo;mousepoint=MouseInfo.getPointerInfo().getLocation();mousepoint =[mousepoint.x,mousepoint.y]2 現在のクリップボードの内容を取得する importjava.awt.Toolkitimportjava.awt.datatransfer.DataFlavorclip=

プログラマが恐れていることがあるとすれば、それはニーズが再び変化したことかもしれません! いいえ、作者がブラウザベースの Web アプリケーションを開発した後、顧客はこう言いました: プログラムは内部 (いいえ) 内部のものである必要があります。 (ネットワーク) ) 環境... これは、Python 環境をインストールできないことを意味します! プログラマと呼ばれるのは誰ですか? GUI 版を開発すればいいのではありませんか? それは私にとって問題ではありません... しかし、与えられた時間を聞いた後、落ち着かなかった... ...お客様の評価に影響を与えないために、1週間しか猶予がありません! GUIを考えるのは難しくありませんが、サービスと対話型インターフェイスを整理する必要があります。そうでない場合は、GUI 用に別のインターフェイスを作成する必要がありますが、明らかに時間が足りません。いいえ、別の方法を考えましょう...それ以外の場合は、Web を使用するだけです

Curses 最初に登場するのは Curses[1] です。 CurseCurses は、テキストベースのターミナル ウィンドウ機能を提供する動的ライブラリです: 画面全体を使用してウィンドウを作成および管理する 8 つの異なる色を使用する プログラムにマウス サポートを提供する キーボードのファンクション キーを使用する Curses は任意の ANSI/POSIX で使用可能-準拠 標準の Unix/Linux システム上で実行します。 Windows 上でも実行できますが、さらに Windows-curses ライブラリをインストールする必要があります: pip install windows-curses. 上の画像は、友人が Curses を使用して書いたものです。

scilab と matlab の違い: 1. 注釈シンボル; 2. プリセット変数の表現; 3. 演算子の使用法; 4. 行列の定義と呼び出し; 5. プログラムの編集と実行; 6. データ型; 7. 関数ライブラリ; 8. グラフィカルインターフェイス; 9. コミュニティサポートとエコシステム; 10. クロスプラットフォーム互換性; 11. 価格。詳細な紹介: 1. コメント記号: Scilab ではコメントは "//" によってガイドされますが、Matlab ではコメントは "%" によってガイドされます; 2. Scilab でのプリセット変数の表現など。

1. Frame の tkraise() メソッドの概要 通常、Tkinter アプリケーションは複数の Frame で構成されます。また、ユーザーの選択に関連するフレームを表示するには、フレームを切り替える必要があることがよくあります。 Tkinter では、フレームを互いに積み重ねることができます。特定のフレームを表示するには、1 つのフレームを別のフレームの上に重ねて配置します。上部のフレームが表示されます。 Frame を最上部に配置するには、以下に示すように、Frame ウィジェットの tkraise() メソッドを使用できます。 . 異なるフレーム

グラフィカル ユーザー インターフェイス (GUI) グラフィカル ユーザー インターフェイス (GUI) は、コンピュータとの対話に役立つデスクトップ アプリケーションにすぎません。テキスト エディタなどの GUI アプリケーションでは、さまざまな種類のファイルを作成、読み取り、更新、削除できます。ソリティア、チェス、ソリティアなどのアプリケーションは GUI プログラムのゲーム バージョンであり、Google Chrome、Firefox、Microsoft Edge などの GUI アプリケーションはインターネットの閲覧に使用されます。これらは、コンピュータで使用されるさまざまな種類の GUI の一部です。アプリケーション 実際、Tkinter を使用して同様の単純なアプリケーションを構築することもできます。今日は GUI の入門として、非常に単純なアプリケーションを作成します。

MATLAB では、関数 "set" を使用してグラフの軸のプロパティを変更できます。詳細な導入: 1. 座標軸の範囲を変更します: set(gca, 'XLim', [0 10], 'YLim', [0 10]); 2. 座標軸のラベルを変更します: set(gca, 'XLabel', 'My X-axis', 'YLabel', 'My Y-axis'); 3. 座標軸のスケールなどを変更します。
