問題タブ [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関数ブロックで動的メモリがサポートされない場合の回避策
バックグラウンド:
離散イベントシミュレーションMATLABモデルを継承しており、その実行を自動化して高速化したいと考えています。sim(modelName)を呼び出してMATLABにインタープリターされたコードを実行させるのではなく、system('modelName.exe ...')を呼び出すのと同じようなソリューションが必要です。これに対する私の動機は、ほぼ1000%の速度の増加を示唆する初期テストから来ています。RapidSimulationターゲットでReal-TimeWorkshopを使用して、静的メモリ割り当てのあるexeを作成することができました。問題は、モデルに埋め込まれたMATLAB関数ブロックがあり、実行ごとにパラメーターのサイズと形状が異なることです。そして、数千とは言わないまでも数百の実行があります。
MathWorksのドキュメントによると:
組み込みMATLAB関数ブロックではサポートされていない動的メモリ割り当て:
「EmbeddedMATLABFunctionブロックの可変サイズデータに動的メモリ割り当てを使用することはできません。無制限の可変サイズデータの代わりに制限付きを使用してください。」
質問:
この制限の潜在的な回避策は何でしょうか?
考え:
- 十分に大きい静的変数サイズを使用し、さらにint変数/調整可能なパラメーターを渡して、範囲を超えるデータの部分を明示的にウィンドウ化します。
- S-関数?
- 今日実装しているもの:静的コードを動的に生成するために呼び出されるたびに、プログラムでシミュレーションを再コンパイルします。
- すべてをPythonやC++などの実際の/最新のプログラミング言語に移植します。
キーワード: MATLAB動的メモリ割り当て組み込み離散イベントシミュレーションリアルタイムワークショップSimulinkSimEvents調整可能パラメーター
matlab - Simulink の埋め込み Matlab 関数で構造体を反復処理するにはどうすればよいですか?
SIMULINK の EML (Embedded Matlab) 関数ブロック内の MATLAB ワークスペースで形成された構造を反復しようとしている障害にぶつかりました。コード例を次に示します。
MyElements は、SIMULINK の MATLAB Function ブロック (EML) のバス型パラメーターです。以下は、私が問題を抱えている領域です。構造体内の要素の数と名前を知っていますが、要素の数は構成によって変わる可能性があります。したがって、要素名に基づいてハードコードすることはできません。EML ブロック内の構造体を反復処理する必要があります。
SIMULINK で構造体型を反復処理する方法について何か考えはありますか? また、これはターゲット システムでコンパイルされるため、num2str のような外部関数は使用できません。
matlab - 定数と Matlab Coder
一部の関数は、Matlab Coder で実行する場合、入力が定数である必要があります。問題のある状況の例として、入力が入力される前に入力を定数として宣言する方法を見つけたいと思います。
これにより、 「すべての入力は定数でなければなりません」というエラーが返されます
butter() が満足するように x と y を定数として宣言するにはどうすればよいですか? 私は多くの解決策を試しましたが、残念ながら本当に満足のいくものは見つかりませんでした. コマンド ライン操作coder.newtype('constant',x)
を使用できれば、すべてが簡素化されます。
c++ - codegenmatlabからc++へ:-cではなくc ++ベースの.exeをビルドしようとしたときの問題?
codegenの使用(GUIインターフェース経由)でいくつか問題があります。
次の2つのファイルに基づいて、非常に単純なcベースの.exeプログラムを正常に構築できました。
coderand.m
main.c
ここで、main.cppの同じコードのmain.cを変更しようとすると、
main.cpp
次のコンパイルエラーが発生します。
どんな助けでも大歓迎です。
編集:-自分で解決...
同じ問題に苦しんでいる人のために...
コーダー->その他の設定->すべての設定->詳細設定->言語..CをC++に変更
matlab - Simulink 内の Matlab 関数で RMS がサポートされていない
Simulink には「Matlab Function」というモジュールがあり、Simulink フロー ダイアグラムでカスタム関数を作成できます。
Simulink Matlab 関数モジュールに単純な関数を実装しました。私の関数には、Matlab のビルトイン への呼び出しが含まれていますrms()
。Simulink モデルを実行すると、次のエラーが発生します。
rms
Simulink モデルの Matlab 関数から削除すると、エラーはなくなり、モデルは問題なく実行されます。
質問:
rms
Simulink でMatlab を使用する方法はありますか?- Simulink 内で使用できないネイティブの Matlab 呼び出しは他にもたくさんありますか?
c - Matlab コーダーを使用した Matlab コードから C への変換
Matlab コーダーを使用して C コードに変換しようとしているいくつかの実用的な Matlab コードがあります。このエラーが発生しています:
私には非常にC特有のように見えます(私は熟練したCプログラマーではありません)。このエラーを克服するために、誰かが私を正しい方向に向けることができますか? ありがとう。
PS:
以下は、いくつかの適応された Matlab コードです。
ここで、「パラメーター」は構造体です。私は自分の構造体に固執したいと思いますが、特に Matlab コーダーと C のコンテキストで上記を達成するためのより良い方法があれば、私に知らせてください。
matlab - 列挙型の文字列を取得する - matlab coder
私は次のような列挙型を持っています:
次のように「要素の文字列表現」を取得できます。
=>
残念ながら、matlab コーダーはこれを好みません。代替手段はありますか?
matlab - 無制限の長さの 1 次元 double 配列をアサートする (matlab coder)
私は現在このコードを使用しています:
値を 1 次元配列にするように matlab コーダーを説得します。最終的な目的は、C# と PInvoke を介してインターフェイスできるようにすることです。これにより、以下を含む C 署名が作成されます。
長さが 1000 未満の 1 次元配列でもこれを使用できるようです。上記を実現するためのより適切な方法はありますか (つまり、値が無制限の長さの 1 次元配列であると主張します)?
PS:
私も使用しました:
しかし、作成された構造体は非常に複雑なようで (こちらも参照)、C# からデータを取り込む方法がわからないため、今のところこれを棚上げしました。
c# - emxArray_real_TからC#構造体と初期化
このC#構造体の「コンストラクター」を作成しようとしています(最初の試行が含まれています)。
Cに対応するC構造体は次のようになります。
ここで説明します。
コメント/回答を楽しみにしています。ありがとう!
c# - 2 次元の場合にラッパー クラスを適応させる
この質問は、この質問の延長です。
ラッパーを 2 次元の場合に適応させたいと思います。これは私の最初の試みです:
PS:
元の matlab コードは次のようになります。
次のように呼び出すことができます。
生産:
残念ながら、生成された C は、Matlab が達成できることを達成できません (つまり、配列を返します)。