0

次の方程式の非線形最小二乗法を取得しようとしています。

y = 1 / (1 + a (ln(期間)^b))

これを当てはめたいデータは、 nlinfit 関数を使用して解決しようとする試みと同様に、以下に示されています...

x = [1.99000000000000;3.01000000000000;4.01000000000000;5.09000000000000;5.77000000000000;6.85000000000000;7.72000000000000;8.87000000000000;9.56000000000000;];
y = [1;1;0.800000000000000;0.730000000000000;0.470000000000000;0.230000000000000;0.270000000000000;0.100000000000000;0.100000000000000;];

plot(x,y,'o','linestyle','none');

p(1) = 1;
p(2) = 1;

fun = @(p,x) 1 / (1 + p(1).*(log(x).^p(2)));

myfit = nlinfit(x,y,fun,p);

私の問題は、nlinfit 関数 (上記の例では「p」) に必要な 4 番目の入力を定義することにあるようです。ドキュメントには、これが機能するために何が必要かについて明確な説明がありません。また、受け取ったエラー メッセージに基づいて問題を解決できません。

??? 128 MODELFUN で ==> nlinfit を使用するとエラーが発生し、Y と同じ長さの適合値のベクトルが返されます。

==> 14 でのフィッティングのエラー myfit = nlinfit(x,y,fun,p);

p を repmat(1,9,1) と repmat(1,1,9) に設定しようとしましたが、どちらも問題を解決していないようです。どんな助けでも大歓迎です!

4

1 に答える 1

1

関数で要素ごとの削除を行うためにドットを忘れたと思います:

fun = @(p,x) 1 ./ (1 + p(1).*(log(x).^p(2)));
               ^
于 2013-04-11T21:13:05.903 に答える