問題タブ [function-handle]
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.
performance - MATLAB の最適化: 大きな行列の計算を高速化
私は次の機能を使用しています:
次の方法で、一連のカーネルを計算します。
ただし、featureVectors
は巨大な行列 (10000x10000 など) であるため、カーネルの計算に非常に長い時間がかかります (例: K
)。
どういうわけか計算を高速化することは可能ですか?
編集:コンテキスト
libsvm
変数名とセマンティクスからお気づきかもしれませんが、ガウス カーネルを使用して を介して分類子を使用しています。
私は今(多かれ少なかれ)#terms~=10000
と#docs~=10000
. この #terms は、ストップワードの削除とステミングの結果です。このコースは、10000
機能を持つことが理にかなっていることを示しています。
残念ながら、libsvm
Gaussian カーネルは自動的に実装されません。したがって、手で計算する必要があります。私はここからアイデアを取り入れましたが、カーネルの計算 (参照された質問で示唆されているように) は本当に遅いです。
matlab - パッケージ内の「localfunctions」
localfunctionsは、m ファイル内のすべてのローカル関数への関数ハンドルを返します。ただし、これはパッケージでは機能しません。たとえば、「am」として保存された次のコードは正常に実行されます。
MATLAB コンソールから呼び出されます。
しかし、「+aaa/bm」としてパッケージ内にある場合、何も得られません:
この動作は十分に文書化されているとは思いません。どうすればこれを克服できますか?localfunctions
パッケージ内のいくつかの機能を単体テストするために使用する必要があり、このためだけにパッケージの外に保持したくありません。
matlab - 2 つの関数ハンドルを乗算し、結果に ode45 を適用する
私は次の関数を離散形式で持っています(つまり、それらは配列です):
関数p1_1, p1_2, p1_3
は のポイント で評価されてx1 = 0:(10/199):10
おり、 関数p2_1, p2_2, p2_3
はポイント で評価されていx2 = 0:(10/199):10
ます。
関数の値と関数が評価されたポイントがあるので、次のことができます。
と
そして、次のことができる必要があります。
ついに
-valuesgamma
は単なる定数 (実数値定数) です。を定義した後last_fun
、それに適用ode45
する必要がありますが、その方法がわかりません。試してみました:
しかし、うまくいきません。実際、私が行ったすべてが正しいかどうかはわかりませんので、フィードバックをいただければ幸いです。
matlab - 2 つの変数の関数ハンドルのプロット
次のコードがあります。
簡単にプロットするf1_p1
には、次のようにします。f2_p2
私の質問
2 番目の関数 ( ) をプロットするにはどうすればよいnew_p1x1
ですか? 以前と同じことを試しましたが、うまくいきません....( fplot(new_p1x1, [30,70])
)
ご協力いただきありがとうございます!!!
matlab - 柔軟な関数ハンドルを作成する
私はMATLABで数値積分を使用しています.1つの変数を積分しますが、関数にはデータの次元に応じて可変数の項も含まれています。現在、2 次元の場合は次のようになります。
次の用語のそれぞれに任意の数のデータポイントが存在する可能性があるという意味で、この関数を柔軟にしたいと思います。
これが理解できることを願っています。
matlab - 複数の入力を持つ関数を使用する際のエラー
複数の入力を使用して MATLAB でダフィング オシレーターを評価しようとしていますが、奇妙なエラーが発生します。
コードは次のとおりです。
ダフィング関数を呼び出すファイル:
実行すると、次のエラーが表示されます。
引数の使用エラー (92 行目) DUFFING は長さ 1 のベクトルを返しますが、初期条件ベクトルの長さは 2 です。DUFFING によって返されるベクトルと初期条件ベクトルは、同じ数の要素を持つ必要があります。
しかし、関数 duffing を次のように定義すると
そして通過
上記と同じでy0
、正常に動作し、プロットできます。
私は何を間違っていますか?
matlab - MATLAB 匿名関数で変数の評価を強制する
MATLAB は変数を無名関数と共に格納します。これがドキュメントからどのように機能するかの例を次に示します。
式の変数:
関数ハンドルは、式だけでなく、式の評価に必要な変数も格納できます。
たとえば、係数 a、b、c を必要とする無名関数の関数ハンドルを作成します。
a、b、および c は放物線の作成時に使用できるため、関数ハンドルにはこれらの値が含まれます。変数をクリアしても、値は関数ハンドル内に保持されます。
おそらく、ab と c の値は、関数が保存され、mat ファイルから再読み込みされた場合でも、関数と共に保存されます。実際には、特に関数を最初に作成したコードが編集された場合、これらの値は保持されないことがわかりました。
変数の数値に関して関数ハンドルを定義する方法はありますか? 私はフォームの何かをしたいです
編集:おそらく私の問題はファイルの関連付けにありますが、最初に匿名関数を定義したファイルを編集すると、次のようなエラーが表示されます:
関数 @(ydata)nr/(na*dt)*normpdf(ydata,mu(j),s(j))./normpdf(ydata,mu_a(j),s_a(j)) が C: 内に見つかりません。 ..\mファイル名.m. (ここで、mfile の名前を mfilename に変更しました)
この種のものに対する私の通常の解決策は、 func2str() を使用してファイルの依存関係を削除することですが、これにより、パラメーター値を含むワークスペース情報も削除されます。そのため、関数定義ですべてのパラメーターに数値を強制的に適用したいと思います。