問題タブ [function-fitting]
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.
algorithm - 区間によるフィッティング関数
実数の区間の有限系列 R i = (R imin , R imax ) と実数の系列 t i , i=1..N があります。
私の目標は、関数 f:R->R を見つけることです。ここで、各 i は間隔 R iの f(t i )です。
次の図では、X 軸上の各赤い線の下に t i値があり、これは間隔 R iに対応し、緑の線は可能な解の 1 つです (この場合は定数)。
関数 f が連続的で、少なくとも 3 次まで微分可能である必要があり、「できるだけ滑らか」である必要があることも知っています。直線的であることが可能な場合、直線的である必要があります。間隔の中点をいくつかのスプラインに合わせる解決策を考えましたが、それは過剰適合の問題を引き起こし、正確なメトリックはありませんが、関数が何らかの意味で「よりスムーズ」になる可能性があることは明らかですそのために。私の例の画像では、明らかに悪い解が作成されます。これは、線形解が存在しない場合でも当てはまります。
この「滑らかさ」の基準が漠然としていることはわかっています。関数 f は時間内の 1 つの軸での機械の動きになるので、ジャンプや急激な速度変化を起こさずにできるだけ動かさないようにする必要がありますが、これを厳密に定義したくはありません。アプローチします。
仕事でも勉強でも、同様の問題に遭遇したことはありません。また、グーグルでさらに調査できる標準的な名前があるかどうかもわかりません。問題の説明とキーワードを検索しようとしましたが、成功しませんでした。
それがSOなのかMOなのかわかりませんが、関数fを見つけるためのアルゴリズムを作成する必要があるので、ここに投稿しています。
どんな助けでも大歓迎です。
マテイ
python - Python での抵抗率非線形フィット
一連の実験データの固体の抵抗率のアインシュタイン近似を当てはめようとしています。抵抗率と温度 (200 から 4 K) があります。
しかし、私はこれらの警告を受け取ります
私は厳密に正の値を持っているので、sinh にゼロによる除算があると言い続ける理由がわかりません。私の最初の推測を変えても、それに影響はありません。
編集:私のデータセットは次のように編成されています:
ここで、最初の列は温度で、2 番目の列は抵抗率です (サンプルは 6.7 ~ 6.9 K より低い温度で超伝導になる PbIn 合金であるため、負の値は試用電流のノイズによるものです。ここでは 4.5 K です)。
私が sinh に提供している引数は Numpy 配列であり、ro0 + AE*T
私のコードは線形関数で動作します。で試してみましscipy.optimize.minimize
たが、結果は同じです。ファイルに 900 近くの値があることがわかりましたが、これが問題なのでしょうか?
データセットを編集していくつかの行を削除しましたが、表示される唯一の警告は
どうすれば回避できますか?
csv - gnuplot - csv ファイル列のエントリ数をカウントするにはどうすればよいですか?
関数フィッティングルーチンを含む gnuplot コードがあります。
多数のデータ ポイントを適合させる必要がある場合、このルーチンは低速です。入力ファイルのデータ ポイントの数は、実行中のシミュレーションのパラメーターによって異なります。
100点だけ合わせたいです。これまでは、入力ファイルのエントリ数を手動で計算し、100 で割り、その結果の数をフィッティング コマンドの「N ごと」コマンドとして使用していました。
もっと詳しく:
私が使用しているフィッティングコマンドは次のとおりです。
ここで、N = integer_round_down(output_file_length / 100.0) - gnuplot スクリプトで N の値を手動で置き換える前に、電卓でこれを手動で計算します。(100 で割るのは、電卓ではなく、頭の中で行っています。)
列 1、列 4、列 9 など、いずれかの列のエントリ数を取得する方法はありますか?次に、シミュレーションを変更するたびにスクリプトを編集することなく、スクリプトで変数を使用して N を計算します。パラメーター?
plot - gnuplot - N データポイントごとに関数を適合させる方法
gnuplot と関数フィッティング機能を使用して、データの一部に最小二乗フィッティングを実行しています。
多くのデータ ポイント (場合によっては数千万) があるため、すべてのデータ ポイントに適合させることは不可能です。(または、少なくとも遅すぎて実用的ではありません。)
キーワードevery
(EDIT: Should be pointinterval
not every
!) の後に整数 N を指定してデータ ポイントをプロットし、N 番目ごとのポイントのみをプロットすることができます。
たとえばplot 'data.csv' using 1:2 pointinterval 1000
、1000 番目のデータ ポイントごとにプロットします。数千万のポイントをプロットする場合に便利です。それ以外の場合は何も役に立ちません。
フィッティングでこれを行う同様の方法はありますか、つまり、1000番目のポイントごとにのみフィッティングしますか?
fit 'data.csv' f(x) using 1:2 pointinterval 1000 via a,b
wherea
とb
are を my - のパラメーターとして試しましf(x)
たが、エラーが発生しました: ';' expected
。
また、これをグーグルで検索し、gnuplot プロットのドキュメントを読んでみましたが、何も見つかりませんでした。
または、プログラム コードを変更して、1000 ポイントごとにのみデータ ファイルに書き込むようにすることもできますが、その場合、2 つのデータ ファイルが必要になります。無駄。
every
編集:これが正しい構文だと思った理由がわかりません。pointinterval
( pi
short) の後に整数が続く必要があることが判明しました。
ただし、これは関数のフィッティングではなくプロットでのみ機能するため、問題はまだ未解決です。
variables - gnuplot - 適合パラメータのエラーを取得し、適合出力値を変数として取得し、変数を画面に出力します
最初の質問 (一部回答済み)
gnuplot のフィッティング ルーチンを使用して関数をデータに適合させ、「特性減衰時定数」を抽出しています。d
(私はフィッティング関数でこのパラメーターを呼び出します。)
スクリプト コードset fit quiet
を使用して、大量のテキストが端末に出力されるのを防ぎました。ただし、最終的な適合値が何であったかを知る方法がありません! (ログファイルを調べることを除いて...これは骨の折れる...)
最終的な適合パラメータ値を取得して変数に保存し、その変数を出力する方法はありますか?
これは 1 つで 2 つの質問だと思います... 変数の値を出力するにはどうすればよいですか?
最初の質問への回答
そのため、gnuplot をいじってみたところ、print
コマンドが変数を画面に出力できること、およびパラメーター (たとえば、d
変数として既に使用可能) が既に使用可能であることがわかりました。それらはすでに変数です。
だから私は次のことができます: print "d=",d
- ここのコンマは、印刷したいものを区切るために使用されます。したがって、最初に文字列"d="
を出力し、その後に の値を出力しd
ます。
次の問題
使用した変数のエラーを取得するにはどうすればよいですか? 例えば; パラメータ a、b、c を関数に当てはめた場合、これらの値のエラーを出力するにはどうすればよいですか?
gnuplot - gnuplot - 複素数 (未定義の値) が原因で関数の適合が失敗する
gnuplot を使用して一部のデータを適合させていますが、関数が適合しない場合があることに気付きました。これはundefined value
、負の数の平方根を取ることによって生じる によるものだと思います。(私の理解では、gnuplot fit は複素数に対応できません。)
ループを使用してすべてのデータファイルをバッチ処理していますが、この問題によりスクリプトが異常終了します。
関数に適合しないことは気にしませんが、数百のデータファイル 5 で失敗するため、バッチ処理のすべてのポイントが無意味になるため、スクリプトを中止しないでください。
有効にしましset fit quiet
たが、これで問題が解決しないようです。
continue
1 つの適合が失敗した場合でも、gnuplot に次のデータファイルの適合を試行させるにはどうすればよいですか?
参考までに、私がフィッティングしている関数は次のとおりです。
f(x) = (b c) / ( [c 2.0] + c [b 2.0 - c**2.0]*exp(x/e) ) - b、c、e は適合パラメーターです
明確にするために-フィットが「cが負のフィットに向かって収束する」ことがあり、これにより、下の平方根の評価が失敗します-これは、フィットコマンドを含むforループから抜け出します-フィットの失敗をどのように停止できますかループから抜け出す?
gnuplot - gnuplot - Does `set xrange [x_min:x_max]` limit the ranged used for function fit?
Simple question - the range drawn on a plot can be changed with the set xrange [x_min:x_max]
command.
Does this command also limit the range used when fitting a function using the data fitting tools in gnuplot? Is there a way to manually specify the ranged used for function fits? (One guess might be the command every
? Do I need to over-ride xrange
using every
?)
The reason I ask is that I am using xrange to plot outputs zoomed in on the low value x region to view transient behaviour more clearly, but I think this may be "slicing off" values from the function fitting at larger x values outside the xrange region selected?
r - 非常に高い残差二乗和
フィッティングの剰余平方和に問題があります。剰余の二乗和が高すぎます。これは、適合があまりよくないことを示しています。しかし、視覚的には、この非常に高い残余価値を持つことは問題ないように見えます...何が起こっているのかを知るのを手伝ってくれる人はいますか?
私のデータ:
次に、nlsLM 関数 (minpack.lm パッケージ) を使用して適合させます。
この値は剰余です。
平方和残差が高すぎます: 12641435 ...
そうですか、それとも調整がおかしいのでしょうか。悪いですか?