さあ、始めましょう!これはJulia言語でのグローバルフィットの例です。指定されたパラメータ $x_0 = 1.8$ と $\gamma = 0.002$、およびドメイン $ \text{dom} = \text{Domain}(1.77:0.0005:1.81) $ を使用します。
ステップバイステップの例
-
**GModelFit.jlのインストール
using Pkg Pkg.add("GModelFit")
-
共有するパラメータを指定しつつモデルを規定する:
using GModelFit # Define the domain dom = Domain(1.77:0.0005:1.81) # Define a shared parameter for the width shared_gamma = Parameter(:gamma, 0.002) # Define the model for the real part with shared gamma model_real = Model(dom, :real => GModelFit.Lorentzian(1.8, shared_gamma)) # Define the model for the imaginary part with shared gamma model_imag = Model(dom, :imag => GModelFit.Lorentzian(1.8, shared_gamma)) # Combine both models combined_model = Model(dom, :main => SumReducer(:real, :imag))
-
データを生成する
# Example data (replace with your actual data) x = 1.77:0.0005:1.81 real_data = 1 ./ ((x .- 1.8).^2 .+ 0.002^2) .+ 0.1 .* randn(length(x)) imag_data = 1 ./ ((x .- 1.8).^2 .+ 0.002^2) .+ 0.1 .* randn(length(x)) # Create Measures data_real = Measures(dom, real_data, 0.1 .* ones(length(x))) data_imag = Measures(dom, imag_data, 0.1 .* ones(length(x))) # Combine data combined_data = vcat(data_real, data_imag)
-
モデルフィット:
best, res = fit(combined_model, combined_data)
-
結果のプロット:
using Plots plot(x, real_data, label="Real Data", lw=2) plot!(x, imag_data, label="Imaginary Data", lw=2) plot!(x, best[:real], label="Fitted Real", lw=2, linestyle=:dash) plot!(x, best[:imag], label="Fitted Imaginary", lw=2, linestyle=:dash)
説明しよう!
- モデル定義: 実部と虚部の両方に共通のパラメータを持つローレンツモデルを定義する。 (\gamma).
- データ生成: 実数部と虚数部の両方に合成データを生成しますが、ノイズも追加します。
- 回帰分析: 結合モデルを結合データに適合させます。
- プロット: 実数データと虚数データをフィッティング結果とともに視覚化します。
可視化
フィッティング結果の視覚化は次のとおりです。Jupyterに上のコードを貼り付けて実行してみてください