問題タブ [nonlinear-functions]
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.
c - 多項式回帰cコード
私はCプログラミングにとても慣れていません。多項式回帰のために「Cの数値レシピ」という本のCコードを使用していますが、実装/コンパイルに問題があります。
これが私が使用しているコードです。いくつかの//
ショーは、プログラムをC++に変更しようとしていることを示しています。Cでビルドできない場合は、C ++で動作する可能性がありますか?
int main()
私はそれを実装するためにプログラムにを追加しました。nrutil.hはヘッダーファイルですが、必要な関数(関数、、、)を.ccpファイルに転送したので使用しmatrix()
ませvector()
ん。nrerror()
SQR()
私が使用しているコンパイラはMSVC2010Expressです。
このプログラムをコンパイルしようとすると、次のエラー出力が表示されます。
matlab - MatLab で fmincon を最小化する総和目的関数の定式化
次のような合計目的関数 (非線形ポートフォリオ最適化) があります。
- wは決定ベクトルです。
- cvは既知の 10 行 10 列の行列です
制約 (プロジェクト制約用の別の .m ファイル) と fmincon の実行 (下限/上限、初期値、および引数を指定して fmincon を呼び出すための別の .m ファイル) の定式化を行いました。
目的関数の実行方法がわかりません。私は、matlab ではなく GLPK での線形プログラミングに慣れているので、あまりうまくいっていません。
私は現在持っています:
ObjectiveFunction.m
...しかし、これは機能していません。
どんな助けでも大歓迎です!前もって感謝します :)
matlab - 可変限界との積分
こんにちは、私は、matlab を使用して変数を制限として積分を解くのに苦労しています。私が抱えている 2 つの最大の問題は、matlab が明示的に積分を見つけることができず、変数以外の多くの数値メソッドがうまくいかないことです。
私は解決する必要があります
私はH、R、およびtを知っており、アイデアは積分を解いてからaの非線形方程式を解くことです。非線形方程式にfzero / fsolveを使用することは知っていますが、積分を解くのに苦労しています
wolfram-mathematica - Mathematica:関数の共役または関数のAbsを含む偏微分方程式を解く
を使用して偏微分方程式を数値的に解こうとしてNDSolve
います。次のエラーが発生し続けます。
Abs[D[f[x,y,t],x]]
またはの存在が原因でのみこのエラーが発生するようConjugate[D[f[x,y,t],x]]
です。この問題を示すために、非常に単純な関数を作成しました。
これは機能します:
これは機能しません(唯一の違いは、Absがないことです)。
今のところ、Mathematicaが私の式の導関数をとろうとしたところ、Abs
関数を導出する方法がわからないことがわかったと思います。私はこれを想定するのは正しいですか、そしてこの問題をどのように回避するのですか?
mapping - ある2D平面から別の平面にポイントをマッピングします
平面A上の点が与えられた場合、平面B上の対応する点にマッピングできるようにしたいです。2つの平面間にN個の対応する参照点のペアがありますが、全体的なマッピングは単純なアフィン変換ではありません。 (私にとってはホモグラフィはありません)。
私が試したこと:
特定の点について、平面Aで最も近い3つの参照点を見つけ、その三角形のバリーセントリック座標を計算してから、その変換を平面Bの対応する参照点に適用します。失敗した理由:最も近い3つの点がほぼ同一線上にある場合があります。エラーは巨大でした。また、国境を越えるときのマッピングには一貫性がありませんでした。とても「ぎこちない」ものでした。
N個の参照点(N ^ 3)を指定して、可能なすべての三角形を計算します。サイズ順に並べてください。与えられたポイントについて、それが入っている最小の三角形を見つけます。これにより、ポイントの線形の問題が修正されますが、それでも非常に不安定で低速でした。
三角形分割された平面Aから開始します。参照点を反復処理し、それぞれを参照平面に追加します。ポイントを追加するたびに、それは少なくとも1つの三角形に存在します。新しい参照点を頂点として使用して、その三角形を3つの三角形に分割します。最終的に平面Aが三角形になり、平面Aから平面Bに簡単にマッピングできます。問題:すべての三角形が平面の端にある点を持っていることを証明できます。これにより、参照点が平面の端から遠く離れている場合、大きなエラーが発生します。
これはかなり標準的な問題だと思います。このための標準的なアルゴリズム/ライブラリはありますか?
r - 「R」の nls.lm() の目的関数を変更する
関数 nls.lm {package: minpack.lm} を使用して、水文モデルのパラメータを最適化しています。関数は非常にうまく機能していますが、他のobjective function (OF)
. 通常、nls.lm 内のオブジェクト関数「fn」は次のように定義されます。
Nash-Sutcliff-Efficiency
今、次のように定義されているを使用したい
またはその他の OF。問題はnls.lm
、式が最小化され、sum(x)^2
のみx
が変更可能になることです。私はそれを知っていbest fit NSE = 1
ます。したがって1 - NSE
、実際の最小化問題が作成されます。
ところで:nls.lm
ヘルプ ページの例 1は良い例です。そこの
最小化されていますが、実際には
はnls.lm
関数によって最小化されますが、 がgetPred(p,xx)
返されますsim
。
どんな提案も役に立ちます。前もって感謝します。ミカ
r - 最適化のエラー: 関数は初期パラメーターで評価できません
だから私は R でこの奇妙なエラーに出くわしましたhestondifferences()
。
次の方法で極小値を見つけようとすると:
エラーメッセージが表示されます:
optim(fn = hestondifferences, par = c(vT = vT, rho = rho, k = k, : 関数は初期パラメーターで評価できません) のエラー
私を混乱させるのは、関数を初期パラメーターで直接呼び出すとhestondifferences(vT, rho, k, sigma)
正しい値が返されることです。
この関数は、シミュレーションが特定のパラメーターのセットに対して不可能な場合はいつでも、 () が期待するものと一致するものをhestondifferences()
返すように記述されています。NA
optim
r - 最適な非線形曲線の新しい値をプロットする
非線形関数に最適なものを作成しました。正しく機能しているようです。
私の観察のプロットは正しく出ています。プロットに最適な曲線を表示するのに問題があります。1000個の値を使用してxl独立変数を作成し、最適なものを使用して新しい値を定義したいと思います。「行」プロシージャを呼び出すと、次のエラーメッセージが表示されます。
xy.coords(x、y)のエラー:'x'と'y'の長さが異なりますpredict関数のみを実行しようとすると:
xlには1000個のコンポーネントがありますが、「a」には16個のコンポーネントしかないことがわかります。に同じ数の値を含めるべきではありませんか?
使用したデータ:
c - 指数関数で連立非線形方程式を解く方法は?
と を解く連立方程式がx1
ありx2
ます。
ここでB
、 とC
は負ですが、残りの定数は正です。
GSL ライブラリの multiroot 関数を使用して C で解決しようとしました。マルチルートではシステムを解決できなかったようです。非線形同時多項式関数 (指数部なし) に対して multiroot の同じ実装を試みたところ、うまく機能し、正しい結果が得られました。このようなシステムを解決する方法について何か提案はありますか? または、そのような方程式に使用できる他の強力なライブラリはありますか?
matlab - Matlab の fsolve は収束します *しかし* 間違った解を与えるようです
fsolve を使用して非線形方程式系を解こうとしています。まあ言ってみれば
F(x;lambda) = 0、ここで lambda はパラメーターのベクトル、x は解決したいベクトルです。
Matlab の fsolve を使用しています。
システムを解決したいパラメーターラムダの2つの値があります。ラムダの 1 つの値については、問題ないように思われる解決策が得られます。
ラムダの他の値については、再び解が得られます (matlab はフラグ 1 で終了します。ただし、これが実際の解ではないことはわかっています。たとえば、x の次元のいくつかは互いに等しくなければならないことがわかっています。 fsolve から取得したソリューションには当てはまりません。
trust-region と levenberg-marquardt アルゴリズムの両方を試しましたが、より良い結果が得られません。(これらの x を同じにすることを明示的に強制しても、システムのプロパティから期待されるものと一致しないソリューションが得られるようです)
私の質問は次のとおりです。 fsolve で使用されるアルゴリズムは、システムの安定性に依存しますか? 上記の 2 番目のケースでパラメーター lambda を変更すると、システムが不安定になり、fsolve が正しく解決するのに苦労する可能性がありますか?
ありがとう、ジョージ