問題タブ [matlab-deployment]
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 でコンパイルされた関数から .m ファイルを実行する
バックグラウンド
MATLAB で次の単純な関数をコンパイルするとします。
この関数は、 .mfoo
ファイルへのパスを取得し、それを実行しようとします。
ただし、実際foo
にコンパイルして実行しようとすると、次のようになります。
ここpath_to_m_file
で、次のようなステートメントを含む単純な.mファイルです。
次のエラーが表示されます。
ただし、それが正しいパスをfoo
取得することはわかっています。たとえば、行を次の2行に置き換えてみるとrun
foo
foo
ファイルの対応する行を読み取り.m
ます。したがって、.m
ファイルはそこにあり、MATLAB エンジンはそれを「見る」ことができます。eval
実際、 で読み取った文字列でも実行できtextscan
ます。
だから私の質問は:
上記のエラーが表示されるのはなぜですか? ファイルを
foo
実行しないのはなぜですか?.m
更新:この質問に対する回答と思われるものについては、以下の @strictlyrude27 の回答を参照してください。
上記がうまくいかない場合。元の関数をコンパイルした後に変更された可能性のある.mファイルを実行するために MATLAB でコンパイルされた関数を取得する方法はありますか?
私の2番目の質問の動機:
.m
プロジェクト全体を再コンパイルすることなく、プロジェクトの一部であるファイルを「更新」できるようにしたいと考えています。これについてのアイデアは大歓迎です。
c++ - matlabコードから静的ライブラリを作成します
matlabからスタンドアロンの実行可能ファイルと共有ライブラリを作成できることはすでに知っています。ただし、構成管理プロセス(バージョンと配布)では、静的ライブラリを使用する方が適切です。静的ライブラリは、作成しているdll(C ++)に含まれています。
これはまったく不可能かもしれませんが、私は興味があります。誰かが以前にそれをしたことがありますか?
c# - 関数はMATLABからは正しく機能しますが、.NETから呼び出された場合は機能しません
相互運用性のためにMATLABBuilderNEを使用して、オープンソースアプリケーションClearCanvasのプラグインとして構築されたC#.NETプログラムからMATLAB関数を呼び出しています。.NETプログラムから通常どおりコードを実行すると、通常(常にではありませんが)エラーメッセージが表示されます。
MWMCR::EvaluateFunctionエラー...セル配列の存在しない要素への参照。178行目の=>ComputeT1Maps.mのエラー。
問題のMATLABコードの行は次のとおりです。
ヘッダーはMATLABのdicominfo関数によって指定された形式の構造体であり、MetaData{n}はn番目の画像ファイルのファイル名と画像ヘッダー構造体を含む構造体です。
ComputeT1Maps関数の関数シグネチャは次のとおりです。
このバグを理解するために、ComputeT1Maps関数の先頭に次の行を挿入して状態を保持し、.NETからMATLABに渡された値を確認できるようにしました。
したがって、この関数への入力(それを呼び出した.NETプログラムから受け取った)を保持した後、保存された変数を読み込んだ後、インタラクティブなMATLABセッションからComputeT1Maps関数を実行してみました。これにより、MATLABのデバッグツールを利用して計算を行うことができます。エラーが発生した理由を説明します。それは物事が本当に奇妙になったときです。この関数は、.NETプログラムから呼び出されたときに与えられたものとまったく同じオペランドが与えられた場合、インタラクティブなMATLABセッションから問題なく機能します。どうすればいいの?C#.NETから呼び出されたときに関数が失敗するのに、インタラクティブなMATLABセッションでまったく同じ入力が与えられた場合に正しく実行されるのはどうしてですか?また、これと同じコードは以前は機能していましたが、MATLABのローカルインストールとMCRの両方を最新バージョン(2011b)に更新した後にのみエラーが発生し始めました。
.NET側では、data
MATLABに渡されるは次の関数によって作成されます。
c# - .NET データテーブルを MATLAB に渡す
私も構築している別の.NETアプリケーションによって維持されるデータを分析するために使用されるMatlabコンポーネントのインターフェイスレイヤーを構築しています。.NET データテーブルを数値配列としてシリアル化し、MATLAB コンポーネントに (より一般化されたシリアル化ルーチンの一部として) 渡そうとしています。
これまでのところ、数値データのテーブルを渡すことにはかなり成功していますが、 datatype の列を追加しようとすると問題が発生しましたDateTime
。これまで私が行ってきたことは、値をDataTable
double 配列に詰め込むことでした。これは、MATLAB が実際に double のみを気にするためです。次に、MWNumericArray
本質的に行列である a に直接キャストします。
これが現在のコードです。
Conversion.ConvertToDouble
これも、Matlab がすべての NULLS を NaN として扱うため、NULL、DBNull に対応し、double.NaN を返す私自身のルーチンです。
これが問題です。複数のデータ型を持つ連続した配列を渡すことができる MATLAB データ型を知っている人はいますか? 私が考えることができる唯一の回避策は、 of を使用することMWStructArray
ですMWStructArrays
が、それはハッキーに思えますし、MATLAB コードでうまく機能するかどうかもわかりません。そのため、できればより洗練された解決策を見つけたいと思います。の使用を検討しましたが、MWCellArray
インスタンス化しようとするとコンパイル エラーが発生します。
次のようなことができるようになりたいです。
しかし、私が言ったように、オブジェクト配列をコンストラクターに渡すことでもコンパイルエラーが発生します。
ばかげたことを見逃した場合はお詫び申し上げます。私はいくつかのグーグルを実行しましたが、Matlab から .NET インターフェイスへの情報は少し軽いように思われるため、ここに投稿しました。
前もって感謝します。
[編集]
提案してくれたみんなに感謝します。
私たちの特定の実装のための最も迅速で最も効率的な方法は、SQL コードで Datetime を int に変換することでした。
ただし、他のアプローチのうち、MWCharArray アプローチを使用することをお勧めします。それは大騒ぎを最小限に抑え、私が間違ったことをしただけであることが判明しました.MWNumericsまたはあなたが行くようにあなたの空想を取るものは何でも。注意すべきことの 1 つは、MWArray が 0 ベースではなく 1 ベースであることです。それは私を捕まえ続けます。
時間があれば、今日の後半でより詳細な議論に入る予定ですが、今はしていません。ご協力いただきありがとうございます。
matlab - なぜこの警告が私の.m&.figファイルからスタンドアロンの.exeを作成するときに来るのですか?
その.mファイルのスタンドアロン.exeファイルを作成するために、その.mファイルに関連付けられたGUI機能用の.mファイルと.figファイルが1つあることを参照してください。
使ってます
これを行った後、私はこのような警告を受け取ります
この警告が表示される理由がわかりませんか?
&この後、すべてのma exeの準備が整いますが、一部の関数を実行しても100%動作せず、クラッシュしますか?なぜこれがすべてここで起こっているのですか?exeファイルをより適切に機能させるにはどうすればよいですか?
windows - C:Windows7でのドライブアクセス許可
matlabでは、Windowsスタンドアロンアプリケーションを使用しました。このアプリケーションには、にファイルを書き込む行がありますC:\...\...\
。このWindowsスタンドアロンアプリケーションから生成された出力exeファイルを実行すると、exeが書き込まれC:\...\...\
ず、そのパーティションにセキュリティの問題があることも通知されません。実行するのは何もありません。しかし、exeを右クリックして管理者として実行すると、正しく実行されます。
右クリックせずに管理者として実行したい。それを行うことができるmatlabのコマンドはありますか?
c# - Matlabを使用して、C#コンソールアプリからグラフまたはプロットを作成しますか?
C#に2次元配列がある場合、この配列の内容を2次元グラフとしてMatlabにプロットするにはどうすればよいですか?私は拡張メソッドを求めています。
matlab - ビルド実行m-file+simulinkモデル(1つのエラーのあるプログラムがあります!)
私はMATLABでプログラムを作成しました:
- すべてクリア; clc
- data.datをロードします
- a = data + 2;
- b = fun(a);
- sim('new_equ2')
- c = b + A;
- new_datac-asciiを保存します
->私のプログラムは「test.m」という名前で保存されています</p>
4行目:「fun」は関数です。
5行目:'new_equ2'はSimulinkモデルです。
6行目:「A」はSimulinkモデルの出力です。
test.mから実行ファイルを作成したかったので、コマンドウィンドウに次のように記述しました。
mcc-mテスト
その後、Windowsのコマンドプロンプトでtest.exeを実行しました。このエラーが発生しました:
「未定義の関数またはメソッド'sim'。。。「</p>
test.mからエラーなしで実行できる実行ファイルを作成したい。
matlab - コンパイル後にuitableが正しく表示されない
セル構造の GUI に埋め込まれた uitable があり、編集可能です。Matlab 環境内ではすべて正常に動作しますが、コンパイル後、uitable は空白でしか表示されません。まだ編集可能ですが、GUI には何も表示されません。
PS: arrayviewfunc とその他の関連関数をコンパイルに含めました。したがって、この場合、関数の欠落が潜在的な原因になることはありません。このバグは 2008b で修正されていますが、私は 2008a のライセンスしか持っていません。とはいえ、これは私のプログラムにとって非常に重要なので、2008a での回避策があればここで相談したいと思います。
どうもありがとう!
matlab - 管理者権限なしで MCR をインストールできる最新の Matlab バージョンはどれですか?
GUI を Windows スタンドアロン アプリケーションにコンパイルしたい ( *.exe
)。主なアイデアは、アプリケーションを実行するための特権を必要とせずに、異なるコンピューターでアプリケーションを実行することです。
これらの手順を実行しているときにvcredist_x86.exe
、別のコンピューターで実行する場合は管理者権限が必要であることに気付きました。公式フォーラムで質問したところ、それは不可能であることが確認されました。
ここには、古いバージョンの別の興味深い代替手段もありました: How can I install the Matlab Component Runtime without Administrator rights when using MATLAB Compiler 4.6 (R2007a)
現在サポートされている方法がないという事実にもかかわらず、Matlab のどのバージョンまで特権なしでスタンドアロン アプリを実行できましたか?
私のバージョンは 2010b ですが、特権なしで MCR を実行できる可能性をサポートする最新バージョンを使用できます。私はMatlabコンパイラを持っていますが、Matlabコードジェネレータは持っていません(別の言語に自動翻訳するため)。