0

最小二乗曲線適合関数 lsqcurvefit の使用方法の例を誰かに教えてもらえますか? 私が使用しようとする前にnls()、私は次のようなものを得ました:

Error: step factor 0.000488281 reduced below 'minFactor' of 0.000976562

パッケージpracmaに関数 lsqcurvefit がありますが、使い方がわかりません。

たとえば、私はいくつかのデータを持っています:

time output_cut
1 0.627100000000041
4 -0.0988999999999578
7 0.257100000000037
10 0.614100000000008
13 1.62310000000002
16 -0.814899999999966
19 -0.321899999999914
22 2.10810000000004
25 -2.38589999999999
28 2.9941
31 1.97210000000007
34 -1.53689999999995
37 -1.36789999999996
40 1.0231
43 -0.24389999999994
46 -1.55189999999993
49 -0.330899999999929
52 -0.597899999999981
55 -0.254900000000021
58 0.587100000000078
61 1.2491
64 0.654100000000085
67 -0.916899999999941
70 -2.00889999999993
73 -1.83789999999999
76 -3.53089999999997
79 -2.72489999999993
82 -3.69989999999996
85 -2.53589999999997
88 -6.20389999999998
91 -4.93989999999997
94 -6.41489999999999
97 -5.08989999999994
100 -7.59589999999992
103 -8.29689999999994
106 -6.86889999999994
109 -8.30689999999993
112 -9.61989999999992
115 -6.96889999999996
118 -8.26289999999995
121 -7.74689999999998
124 -8.08989999999994
127 -9.08589999999992
130 -6.7989
133 -9.36789999999996
136 -7.93689999999992
139 -10.9019
142 -9.84089999999992
145 -9.30589999999995
148 -8.59289999999999
151 -9.73489999999993
154 -9.30089999999996
157 -10.3379
160 -10.1378999999999
163 -9.79089999999997
166 -10.0998999999999
169 -9.74090000000001
172 -10.4168999999999
175 -11.2479
178 -11.2089
181 -10.9529
184 -11.1279
187 -10.5958999999999
190 -8.12689999999998
193 -9.81189999999992
196 -12.6999
199 -9.18489999999997
202 -12.8949
205 -9.15589999999997
208 -12.2448999999999
211 -13.0979
214 -12.2609
217 -10.8849
220 -9.48789999999997
223 -11.3959
226 -10.9109
229 -11.4458999999999
232 -9.03890000000001
235 -12.1829
238 -9.72589999999991
241 -11.2719
244 -10.5908999999999
247 -10.9669
250 -9.01789999999994
253 -11.5138999999999
256 -10.9358999999999
259 -9.71589999999992
262 -9.65389999999991
265 -11.0708999999999
268 -9.0299
271 -9.7989
274 -11.0579
277 -11.2379
280 -10.9418999999999
283 -11.9038999999999
286 -11.0808999999999
289 -12.6269
292 -11.0149
295 -10.6649
298 -11.6659
301 -10.9178999999999

nls()私が書くを使用して:

model_iner2 <- nls(output_cut ~ k*(1 - 1/(con1 - con2) * (con1 * exp(-time/con1) + con2 * exp(-time/con2))), start=list(k=-3, con1=100, con2=2000), trace=T)

例を検索しましたが、まだ理解できません。ばかげた質問で申し訳ありませんが、私はRを初めて使用します

4

1 に答える 1

1

私はパッケージ pracma を使用したことがなく、ここで使用する必要もありません。このパッケージは、Matlab から関数を移植しているように見えますか?

問題が発生した場合は、パッケージ minpack.lm を使用することをお勧めしますnlsnlsこれは、Levenberg-Marquardt アルゴリズムを使用する修正バージョンを提供します。あなたのデータで:

library(minpack.lm)
model_iner2 <- nlsLM(output_cut ~ k*(1 - 1/(con1 - con2) * (con1 * exp(-time/con1) + con2 * exp(-time/con2))), 
                     start=list(k=-100, con1=2000, con2=0), data=DF, trace=T)
summary(model_iner2)

# Parameters:
#        Estimate Std. Error t value Pr(>|t|)    
#   k     -14.337      1.184 -12.105  < 2e-16 ***
#   con1  149.426     24.073   6.207 1.30e-08 ***
#   con2   18.020      2.168   8.313 5.43e-13 ***

plot(output_cut ~ time,data=DF)
lines(DF$time,predict(model_iner2))

データと予測値

開始値を調整したことと、フィットが開始値にかなり敏感であることに注意してください。正しい開始値を使用すると、 を使用して適切な適合を達成することもできますnls。適切な開始値を見つけるのに問題がある場合は、 package を使用nls2して、ブルート フォースを使用してグリッドの開始値を検索できます。

于 2013-05-26T12:12:51.440 に答える