0

私は、2 つのリストを受け入れる関数を使用して、MathLink アプリケーションを開発しています。

:Pattern: g[zi_List, fi_List]

手動で関数に引き込むつもりでした。どちらのリストも実数または複素数のいずれかであり、いずれかのパラメーターが複素数の場合、結果は複素数になります。さらに、fi正方行列のリストにすることもできますがzi、1 次元のリストのままです。

MathLink C API内で使用する最も単純な関数は、配列の最も内側にあるようにMLGetReal64Array、実数と複素数の両方のデータ型を処理できる関数です。また、複雑さが決定されたら、必要に応じて配列をC99 複合型にキャストできます。現在、は non-rectangular を処理しないため、各要素は他の要素の次元を持ち、同じ型 (実数または複素数) である必要があります。ただし、奇妙なことに、単一のパラメーターを受け入れる関数では、最も外側の要素として1 つの要素を持つデータ構造が返されます。つまり、C 側で return を入力します。ComplexHeadstd::complex<double>MLGetReal64ArrayListsListListMLGetReal64ArrayListh[ {1, 3, 5} ]List[List[1,3,5]]

のような 2 つのリスト関数の場合g、 を 1 回呼び出すと、MLGetReal64Array両方のパラメータが同時に返されます。つまり、 receive が返されgますList[ zi, fi ]。構造と要素の型を統一するために各リストを前処理する予定なので、両方の要素の型が同じであることを確認しても問題ありません。fiしかし、行列のリストにしたいのですMLGetReal64Arrayが、MLEGSQ: MLGet() called out of sequenceエラーが発生します。

だから、私の質問は: を使用MLGetReal64Arrayして両方のリストを取得できますか? どうすればいいですか?そして、私が使えない場合MLGetReal64Array、私の代替手段は何ですか?

MLGetReal64Array構造が正しければ、各パラメーターに使用できるようにすることで、外側Listをリンクから外すことができると考えています。今のところ、まだ試していません。しかし、それまでの間、何か提案をいただければ幸いです。MLGetFunctionMLGetReal64Array

4

1 に答える 1

1

ケースごとに別々の関数を作成します。Cのリンクを介して何が起こっているのかを理解するよりも、Mathematica側でこのロジックを処理する方がはるかに簡単です。

于 2011-07-13T04:01:59.363 に答える