問題タブ [matlab-coder]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
matlab - Matlab Coder の可変サイズ入力データの定義
Matlab コーダーを使用して .m ファイルから mex コード ファイルを生成しようとしています。そのコードは
固定サイズの場合、次を使用して取得できます
A と x のサイズを制限せずにそれを行うにはどうすればよいですか?
c - Matlab c 埋め込みコーダー コード
このコードは、h または u1 の最小値を取得するために min 関数と比較されます。なぜ matlab がそのような構文を生成するのか教えてもらえますか? whileブロック内に変更が見られないのに、なぜwhileループなのか!
matlab コード
max min 関数には 2 つのループがあることに注意してください
c - C ルーチン内で matlab コードを開始する最も効率的な方法
私の修士論文の一部として、次のような力要素として機能するために、MBS ソフトウェアの外部 C サブルーチンをプログラミングしています。
これを行う Matlab コードがあり、C で実装するには非常に時間がかかります。
したがって、これを克服するために私が考えた次のオプションが最も効率的な方法です。
1. Matlab-Compiler を使用して .exe を作成し、C から起動する
とても素敵で簡単な解決策。ただし、問題は、mbs-solver が関数を 10000 回以上呼び出し、コンパイルされた Matlab 実行可能ファイルが毎回 MCR (Matlab Compiler Runtime) をロードする必要があることです! 処理時間は非常に短い(~0.001 秒)ですが、MCR の読み込みには各反復ステップで約5 秒 (!)かかります。これにより、残念ながらこのオプションは役に立たなくなります。
http://www.mathworks.de/support/solutions/en/data/1-1ARNS/
「コンパイルされた実行可能ファイルを起動するたびに、基本的に MATLAB の別のインスタンスを起動します。」
2. Matlab-Compiler を使用して共有ライブラリなどを作成します。
私はこれを試していません。私が調査した限りでは、これらのオプションについても、オプション 1 のように MCR をすべてのステップで開始する必要があることがわかりました。
3. Matlab-Coder を使用して C コードを生成する
私が時々試した限り、それは簡単なオプションではありません。生成されたコードは最適化する必要があります。それは本当に効率的でしょうか?
4. Matlab-Executable を閉じずに初回のみ起動し、ファイルを介して C コードを通信する
単なる構想: Matlab-Exe を起動したいと思います。最初の繰り返しステップで、「変位」を含むファイルを書きます。次に、新しい値が来たら、Matlab からファイルをミリ秒ごとにスキャンします。それを処理して別のファイルに書き込むと、ミリ秒ごとに結果ファイルをスキャンする C ルーチンが新しい値を見つけて動作し続けます。
これはより速く動作すると想像できますが、バグがなくなるまで実装するのは少し難しいです.
あなたの経験やアイデアについてのレポートに感謝します。
multithreading - codegen と parfor を使用する場合、Matlab はいつスレッドを選択しますか?
オンラインでの議論やヘルプがほとんどないという事実から判断すると、私は Matlab コーダー (codegen コマンド) を使用して高速化を実現している数少ない人の 1 人に思えます。場合によっては、それから信じられないほどのスピードアップが得られました。文書化されているのを見たことはありませんが、parfor ループを含む Matlab スクリプトから codegen を使用して MEX ファイルを作成すると、多くの場合、結果の MEX がスレッド化されます。関数内の Parfor は複数のプロセスを生成しますが、これは単にスレッド化するよりも効率が悪いことがよくあります (Linux で top を見て、Matlab 関数で複数の 100% プロセスを見て、変換された MEX を実行すると単一の 1000% プロセスが表示されることから、これらすべてを推測しています)。私は現在、スピードアップを実際に使用できるケースに取り組んでいますが、parfor が基本関数で機能しているにもかかわらず、MEX で複数のスレッドが使用されているという証拠は見当たりません。
matlab - 空行列への添え字はサポートされていません。
私は正常に動作するmatlabファイルを持っています、
オートコーダーで変換しようとしているのですが、エラーが出て、
??? Subscripting into an empty matrix is not supported.
エラーが発生したため、ループの前に宣言しようとしました:
??? Undefined function or variable 'flowDt'.'
今、私はこの問題の原因がわからないままになっています:
??? Subscripting into an empty matrix is not supported.
c - Embedded Coder を使用して MATLAB で Level-2 .m S-Function をインライン化する方法
既存のコンパイル済み C ライブラリ (Windows x64 では .dll) を Simulink で使用しようとしています。基本的なライブラリと、必要なレベル 2 S-Function (.m ファイル) およびコード生成変換ファイル (.tlc) を作成しました。私のコードはシミュレーションで正常に動作し、コード生成はエラーなしで実行されますが、.tlc ファイルで指定されたカスタム コードはいずれも出力されません。ただし、.tlc ファイルのいずれかに構文エラーがある場合、コード生成は失敗するため、少なくともファイルを解析しています。コード生成用のサンプル コードを参照しても、不足していると思われるものは何も明らかになりませんでした。
ここでのファイル数とコード量を考慮して、すべてGithub リポジトリに入れました。x64 MATLAB 2011b 以降を実行している Windows を使用している場合は、すぐにすべてを実行できるはずです。の最終出力には、TestLibGet.tlc で指定されているように、TestLibTest_grt_rtw/TestLibTest.c:TestLibTest_output()
への 2 つの呼び出しが含まれている必要があります。TestLibGet()
c# - Matlab Coder - .m ファイルからの EXE の生成
私の主な目標は、matlab(.m) で記述されたコードを別の c# アプリケーションと統合することです。私は2つのオプションを検討しました:
- Matlab Builder NE を使用する
- メリット:使うから使う!
- 短所: 今まで持っていないライセンス ($$) が必要です。エンド ユーザーの PC に MCR をインストールする必要があります。
- .m ファイルからスタンドアロン EXE ファイルを生成する
- 長所: 何も実行する必要はありません。
- 短所:初心者には使いにくい。すべての機能をサポートしていません。
これまでのところ、オプション 2) の「概念実証」を試みていますが、成功していません。質問の始め方すらわかりません。ツールボックスについてもう少し詳しく知るとすぐに、質問を改善します。質問が基準を満たしていない場合はお知らせください。
- Matlab Coder、Real-Time Workshop(RTW)、RTW Embedded Coder の関係は? 両方の RTW ライセンスを持っていることは確かですが、「Matlab Coder」を持っているかどうかはわかりません
- 「emlc」コマンドを使用して EXE を生成しようとしています。それは正しいコマンドですか?私はそれを機能させることができませんでした。C/C++ コードを正しく生成しましたが、EXE が生成されません (既に MEX セットアップを構成しています)。
- 「emlc」によって生成された C/C++ コードを Visual Studio にインポートして、EXE をコンパイルおよびビルドできますか? 超簡単ですか?
- 「Emlc」はどのツールボックスに属していますか?
- %#codegen ディレクティブは何を表していますか?
- .m ファイルに 2 つの関数 (functionA、functionB) があるとします。また、EXE を生成できたと想像してください。exeのエントリポイントは何ですか? それは機能Aまたは機能Bでしょうか?データ型を定義するにはどうすればよいですか?