問題タブ [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++ - False Position メソッド (助けが必要)
偽位置法を使用して非線形方程式の根を見つけるコードを作成しようとしています。
コードは完成しましたが、まだ問題があります。たとえば、ルートが 5 ~ 6 であることがわかっている場合、上限を 7、下限を 6 と入力します。それでもルートは取得されます。2 つの最初の推測がルートを囲んでいない場合でも、false position メソッドがどのように収束するのかわかりません。
これが私のコードです:
matlab - Matlab:関数 "fminsearch(fun、x0)"x0が行列として受け入れられない
関数fminsearch(fun、x0)のMatlabドキュメントでは、x0
はスカラー、ベクトル、または行列にすることができます。しかし、私はこの関数を次のように呼び出そうとしています:
ここで、k_to_perturb_annealing_initialは101x82行列です。行k_to_perturb_annealing=fminsearch(delta_obj、k_to_perturb_annealing_initial);でエラーが発生します。
エラーメッセージ:
上記で呼び出している関数gibbs_sampling_sisim_well_testing(k_to_perturb_annealing)は次のとおりです。
r - nlsの0エラーの処理-Rスクリプト
非線形フィットを行うときに、nlsの残余誤差を0にする方法はありますか?私のデータには、行われた近似でエラーが0になるはずのケースがありますが、nlsは常に失敗し、エラーを吐き出します。
誰かが私に見せてもらえますか:
- これがnlsによって吐き出されているエラーであるかどうかをテストするにはどうすればよいですか?
- エラーケースを0にする方法は?(パーフェクトフィット)
これは私のnls呼び出しです:
matlab - 複数の方程式の複数の位相角を解く
I have several equations and each have their own individual frequencies and amplitudes. I would like to sum the equations together and adjust the individual phases, phase1,phase2, and phase3 to keep the total amplitude value of eq_total under a specific value like 0.8. I know I can normalize the signal or change the vertical offset, but for my purposes I need to have the amplitude controlled by changing/finding the values for just the phases in phase1,phase2, and phase3 that will limit the maximum amplitude when the equations are summed.
Note: I'm using constructive and destructive phase interference to adjust the maximum amplitude of the summed equations.
位相 1、位相 2、および位相 3 の値を調整/検索するだけで、eq_total の合計信号の振幅が 0.8 を超えないように、位相 1、位相 2、および位相 3 を解決する方法はありますか?
これは、このアイデアをテストした geogebra アプレットの写真です。
これは、アイデアの編集/テストに使用した geogebra ggb ファイルです。(これを使用して、私のアイデアが機能するかどうかを確認しました)アプレットと動的にやり取りする場合は、Java が必要です http://dl.dropbox.com/u/6576402/questions/ggb/sin_find_phases_example.ggb
私は matlab/octave を使用しています ありがとう
r - ランダム効果が指定されているが、nlmeエラー「グループの式が無効です」
私はこれをいくつか検索しましたが、私が見つけたメーリングリストの投稿はnlme
、私がこれを行ったのに対し、ランダム効果を指定していない人に関連付けられています. 私は、Pinheiro と Bates による本 Mixed Effect Models in S and S-Plus も所有していますが、この本から私の問題を解決することはできません。
私はまだ栄養データの分析に取り組んでおり、現在は実際のデータに移行しています. データは人口調査から得られたもので、各回答者が栄養素の 24 時間摂取量を 2 回想起するため、反復測定設計を特徴としています。
lme4 モデルをデータにうまく当てはめましたが、代わりに非線形法を使用するとどうなるかを調べようとしています。私のデータのスナップショットは以下のとおりです。
データに関する要約情報は次のとおりです。
パッケージを使用して、次を使用lme4
して線形混合効果モデルを正常に適合させました (ランダム効果は被験者からのものであり、 の変換である にIntakeDay
関連付けられた反復測定係数です):BoxCoxXY
IntakeAmt
このパッケージを使用してnlme
、非線形モデルをフィッティングして 2 つを比較しようとしましたが、構文を機能させることができません。私の最初の問題は、自分のデータに関連する SelfStart モデルがないように見えることでした。そのため、geeglm
開始値 ( というデータ フレームに保存された係数Male.nlme.start
) を生成していました。しかし、今はエラーが発生します:
私が間違っていることを理解できませんnlme
。私が使用している構文は次のとおりです。
全体的なモデル仕様に含まれている場合と含まれていない場合の両方で分析を試みましたRespondentID
が、影響はないようです。
私が非線形の方法に固執しようとしている理由は、SAS の元の分析が非線形のアプローチを使用していたからです。私の残差などは、lme 分析からは許容できるほど良好に見えますが、非線形アプローチがどのような影響を与えるかを知りたいと思っています。
参考traceback()
までに、前回の分析試行の結果RespondentID
は次のとおりです。
誰かが私が間違っている場所を提案できますか? (1) の因子レベルが多すぎRespondentID
て機能しないのnlme
か、(2) の開始パラメーターを指定した場合にのみメソッドが機能するのか、これは私のデータであるためRespondentID
、これは私が持っているデータでは無意味に思えます。サブジェクト識別子。
更新:ベンに答えるために、SASnlmixed
モデルは固定効果の一般的な対数尤度関数です:
どこ:
Scale
geeglm
=とからの分散値
Lambda.Value
= 式を介してboxcox()
変換するために使用された、以前の からの最大対数尤度出力に関連付けられたラムダ値IntakeAmt
BoxCoxXY
Male.Data$BoxCoxXY <- (Male.Data$IntakeAmt^Lambda.Value-1)/Lambda.Value
SAS コードのrandom
ステートメントは次のとおりです。
そのため、モデルには 2 つの誤差項があり、両方とも変量効果として適合しています。2 番目の角括弧は、行順にリストされた変量効果分散行列の下三角を表し、SAS 構文で SAS マクロ変数を使用して指定されます。
与えられたモデルの要約は、共変量行列 (BX) とエラー コンポーネントを示す通常の 1 行の概要であるため、ここではあまり役に立ちません。
2 番目の更新: 分析のために性別ごとに個別のデータ フレームに分割する前に、データ フレーム全体で RespondentID を因数分解したため、女性被験者に関連付けられた RespondentID レベルを削除していないことに気付きました。nlme
RespondentID の未使用の因子レベルを削除して分析を繰り返しましたが、同じエラーが発生しました。結果はlmer
同じです - これは良いことです。:)
r - Rの非線形最小二乗内のスプライン
たとえば、次の形式のRの非線形最小二乗モデルを考えてみます。
(私の実際の問題にはいくつかの変数があり、外部関数はロジスティックではありませんが、もう少し複雑です。これはより単純ですが、これを実行できれば、私のケースはほぼすぐに続くはずです)
「アルファ+ベータ*x」という用語を(たとえば)自然な3次スプラインに置き換えたいと思います。
ロジスティック関数内で非線形関数を使用してサンプルデータを作成するためのコードを次に示します。
その周りのロジスティックを必要とせずに、私がlmにいる場合、線形項をスプライン項に簡単に置き換えることができます。したがって、次のような線形モデル:
その後になります
適合値の生成は簡単であり、(たとえば)rmsパッケージを使用して予測値を取得することは十分に簡単に思えます。
確かに、元のデータをそのlmベースのスプラインフィットでフィッティングすることはそれほど悪くはありませんが、ロジスティック関数内でそれが必要な理由があります(つまり、私の問題では同等です)。
nlsの問題は、すべてのパラメーターの名前を指定する必要があることです(1つのスプラインフィットの場合は(b1、...、b5)と呼び、別の変数の場合はc1、...、c6と呼びます。 -私はそれらのいくつかを作ることができる必要があります)。
非線形関数内の線形項をスプラインに置き換えることができるように、nlsに対応する式を生成するための合理的に適切な方法はありますか?
それを行うことができると私が理解できる唯一の方法は、少し厄介で不格好であり、たくさんのコードを書かずにうまく一般化することはできません。
(明確にするために編集)この小さな問題については、もちろん手作業で行うことができます-nsによって生成された行列内のすべての変数の内積の式を書きます、パラメータのベクトルを掛けます。しかし、その後、他のすべての変数のスプラインごとに、また、いずれかのスプラインのdfを変更するたびに、またnsの代わりにcsを使用する場合は、用語ごとにすべてを書き出す必要があります。そして、いくつかの予測(/補間)を実行しようとすると、処理する必要のあるまったく新しい多数の問題が発生します。分析後の分析のために、何度も何度も、そして潜在的にはかなり多くのノットといくつかの変数に対してそれを続ける必要があります-そして私は個々の用語を書き出すよりももっときちんとした、簡単な方法があるのだろうかと思いました、大量のコードを書く必要はありません。私はそれを行うためのかなり強気な方法を見ることができますが、それは正しくするためにかなりのコードを必要としますが、Rであるため、はるかにきちんとした方法(またはおそらく3つまたは4つのきちんとした方法)があると思います' s単に私を避けています。したがって、質問。
過去に誰かがこのようなことをかなりいい方法でやっているのを見たことがあると思いましたが、私の人生では今はそれを見つけることができません。私はそれを見つけるために何度も試しました。
[より具体的には、単純なモデルを見つけることができるかどうかを確認するために、各変数のいくつかの異なるスプラインのいずれかを試してみて、いくつかの可能性を試してみたいと思います。目的には十分です(ノイズは実際には非常に低いです。フィットのバイアスは、良好な滑らかな結果を達成するために問題ありませんが、ある程度までしかありません)。推論やデータマイニングに近づくものよりも、「優れた、解釈可能な、しかし適切なフィッティング関数を見つける」ことは、この問題の実際の問題ではありません。]
あるいは、これがgnmやASSIST、または他のパッケージの1つではるかに簡単な場合、それは有用な知識ですが、上記のトイプロブレムをどのように進めるかについてのいくつかの指針が役立ちます。
r - 入力データセット間で変数の数が異なる場合、正しい回帰モデルを自動的に指定するにはどうすればよいですか?
私は、社内クライアントが栄養素摂取データを分析するために使用する作業R
プログラムを持っています. 彼らが持っているデータセットごとに、R
プログラムを再実行します。
データセットの重要な部分は、年齢のダミー変数を組み込んだnlmer
、パッケージから使用する非線形混合法分析です。lme4
子供を分析するか大人を分析するかによって、計算式に含まれる年齢層ダミーの数は異なりますが、基準となる年齢層ダミーは常に最年少になります。考えられる年齢層の数は4から6くらいだと思うので広い範囲ではありません。それに基づいて条件付けする必要がある場合、年齢層ダミーの数を数えることは簡単なことです。
数値に基づいて正しい関数とモデルが適用されるように、モデルベースのコード (lmer
開始パラメーター値、モデルの関数nlmer
、およびモデル仕様自体を提供するコード) をラップする最も効率的な方法は何ですか?nlmer
モデルの年齢層ダミーの数は?モデル内の他の変数は、データセット全体で一定です。
関連するダミーを自動的に生成し、現在の分析で使用されていないダミーをドロップするようにプログラムをセットアップしました。モデルの後のプログラムも、自動化されたものとしてかなりうまく設定されています。私は、 2 つのlme4
ベースの分析と機能を自動化する方法に固執しています。これらは、データセットごとに 1 回だけ実行されます。
lme4
関連するすべてのコードを含む関数を作成する必要があるかどうか、またはもっと簡単な方法があるかどうか疑問に思っていました。これを行う方法についてのいくつかの指針をいただければ幸いです。モデルに必要な関数を機能させる方法を理解するのに 1 日かかったので、関数に関してnlmer
はまだ初心者レベルです。
サイトで他のR
関連する自動化の質問を検索しましたが、やりたいことに似たものは見つかりませんでした。
前もって感謝します。
文字列の使用に関するコメントの提案に応じて更新します。それは私にとって簡単な方法のように思えますが、各ダミー変数レベル (参照カテゴリを除く) が の関数で使用されるため、関数に文字列コンテンツを適用する方法がわからないことを除いてnlmer
。文字列を分解して、関数内にあるダミー変数のみを使用するにはどうすればよいですか? たとえば、ある分析では AgeBand2、AgeBand3、AgeBand4 があり、別の分析では AgeBand5 とその 3 つが含まれている場合があります。これがVBA
の場合、年齢ダミー変数の数に基づいてサブ関数を作成します。でこれを効率的に行う方法がわかりませんR
。
、関数、およびパーツをwhile
ループでラップして、一連のループを作成できますか?lmer
nlmer
while
これは、自動化したいコードのセクションです。AgeBand ダミー変数の数は、分析するデータセット (子供と大人) によって異なります。これは、私が翻訳をテストしたデータセットを使用していますSAS
がR
、実際のデータセットは非常に似ています。これは、私が取り組んでいる査読済みの公開された方法の基礎であるため、非線形モデルが必要です。
これらは、データセット間で必要な変更になります。
- から割り当てる必要がある固定効果係数の数
lmer
が変わります。 - 関数では、expression、name.vec、および function.arg の部分が変更されます
- 、
nlmer
モデル ステートメント、および開始パラメータ リストが変更されます。
モデル ステートメントを変更して、lmer
AgeBand をレベルの因子として使用することができますが、後で係数の値を引き出す必要があります。
str(Male.AddSugar)
与えます:
AgeBand データは、順序付けられた係数として誤って表示されSubgroup
ます。私はそれを使用していないので、戻ってこれを単純な要因に修正していません。
c# - 一連の非線形方程式のパラメーターを同時に最適化する
未知数(m)が多数ある方程式(n)が多数あります。ここで、mはnよりも大きくなります。n個の方程式と多数の観測値を使用してmの値を見つけようとしています。
C#でのLevenberg-Marquardtの実装をいくつか見てきましたが、複数の方程式を解くものは見つかりませんでした。たとえば、http://kniaz.net/software/LMA.aspxを調べたところ、パラメータとして1つの方程式しか受け取らないことを除けば、私が望むもののようです。同時。同様に、このパッケージ:http ://www.alglib.net/には、LMの優れた実装が含まれていますが、単一の方程式のみが含まれています。
C#に優れた実装があるのか、それともこれを実行できるC#コードで使用できるのか疑問に思いました。方程式の1次差分も計算するのはコストがかかるため、小さな有限差分を使用してそれらを近似できるようにしたいと考えています。
さらに、LMがどのように機能し、どのように実装するかについて、わかりやすくわかりやすい説明はありますか?私は自分でそれを実装するためにいくつかの数学の教科書を読んでみましたが、私は数学がかなり無知なので、説明のほとんどが私に失われています。
編集:
私の問題の詳細:
1)方程式は動的に形成され、問題が実行されるたびに変化する可能性があります
2)開始パラメータについてはよくわかりません。グローバルな最小値を見つけるために、ランダム化された開始パラメーターを使用して複数回実行することを計画しています。
編集2:
もう1つの質問、私はこの論文を読んでいます:http: //ananth.in/docs/lmtut.pdfそして私はセクション2の下で次を見ました:
x =(x1; x2 ... xn)はベクトルであり、各rjはℜnからℜまでの関数です。rjは残差と呼ばれ、m>=nであると想定されます。
関数よりも多くのパラメーターがある場合、LMが機能しないということですか?たとえば、関数のAとBを解きたい場合は、次のようにします。
Y = AX + B
パラメータベクトルのサイズが2(AとB)で、関数数が1であるため、これは不可能ですか?
r - Rの非線形関数を使用した区分的非線形回帰
複数のブレークポイントを持つ非線形関数を使用して区分的に回帰を実行しようとしています。区分線形回帰を実行しましたが、任意の種類の非線形関数を指定する場合、R でどのように設定すればよいでしょうか?
具体的には、2 つのブレークポイントを使用する線形、指数、指数の 3 つの関数に興味があります。お知らせ下さい
カーシック