目次
回复内容:

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

ttkbootstrap を使用して Python GUI の美しいインターフェイスを作成するにはどうすればよいですか? ttkbootstrap を使用して Python GUI の美しいインターフェイスを作成するにはどうすればよいですか? May 07, 2023 pm 03:40 PM

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

Matlab に付属する Java 操作は何ですか? Matlab に付属する Java 操作は何ですか? May 03, 2023 pm 04:07 PM

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

Python のヒントでは、Gui を使用しなくてもグラフィカル インターフェイスを実装できます Python のヒントでは、Gui を使用しなくてもグラフィカル インターフェイスを実装できます Apr 12, 2023 pm 04:43 PM

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

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 を使用して書いたものです。

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 Tkinter GUI プログラミングでフレーム切り替えを実装する方法 Python Tkinter GUI プログラミングでフレーム切り替えを実装する方法 May 11, 2023 pm 04:25 PM

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

Python GUIレイアウトツールTkinterの使い方 Python GUIレイアウトツールTkinterの使い方 May 09, 2023 pm 02:16 PM

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

Matlab で座標を変更する方法 Matlab で座標を変更する方法 Dec 15, 2023 am 10:40 AM

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

See all articles