1

2 つの期間のデータが与えられた場合に、低音拡散モデルのパラメーター p と q を見つける関数を作成したいと思います。

モデル (方程式) は次のとおりです。

n(T) = p*m + (q-p)*n(T-1) + q/m*n(T-1)^2

どこ

n(T) = number of addoptions occuring in period T
n(T-1) = number of cumulative adoptions that occured before T
p = coefficient of innovation
q = coefficient of imitation
m = number of eventual adopters

たとえば、m = 3.000.000 で、以下の年のデータが次の場合:

2000: n(T) = 820, n(T-1) = 0
2005: n(T) = 25000, n(T-1) = 18000

次に、次の連立方程式を解く必要があります (p と q の値を決定するため)。

p*m + (q-p)*0 + q/3.000.000 * 0^2 == 820
p*m + (q-p)*18000 + q/3.000.000 * 18000^2 == 25000

Matlab のドキュメントに従って、関数 Bass を作成しようとしました。

function F = Bass(m, p, q, cummulativeAdoptersBefore)

F = [p*m + (q-p)*cummulativeAdoptersBefore(1) + q/m*cummulativeAdoptersBefore(1).^2;
    p*m + (q-p)*cummulativeAdoptersBefore(2) + q/m*cummulativeAdoptersBefore(2).^2];


end

これは fsolve(@Bass,x0,options) で使用する必要がありますが、この場合、m、p、q、cummulativeAdoptersBefore(1)、および cummulativeAdoptersBefore(2) を x0 で指定する必要があり、すべての変数は単にではなく不明と見なされます。後者の2つ。

上のような連立方程式の解き方を知っている人はいますか?

ありがとうございました!

4

1 に答える 1

0

fsolve()引数として指定する関数を最小化しようとします。したがって、方程式を次のように変更する必要があります。

p*m + (q-p)*0     + q/3.000.000 * 0^2     - 820   == 0
p*m + (q-p)*18000 + q/3.000.000 * 18000^2 - 25000 == 0

そしてMatlabの構文で

function F = Bass(m, p, q, cumulativeAdoptersBefore, cumulativeAdoptersAfter)

    F = [p*m + (q-p)*cumulativeAdoptersBefore(1) ...
             + q/m  *cumulativeAdoptersBefore(1).^2 
             - cumulativeAdoptersAfter(1);
         p*m + (q-p)*cumulativeAdoptersBefore(2) ...
             + q/m  *cumulativeAdoptersBefore(2).^2 
             - cumulativeAdoptersAfter(2)];
end

注:関数にタイプミスがありますBass(合計ではなく乗算)。

これで、未知のものよりも多くのパラメーターを取る関数ができました。1 つのオプションは、未知数のみを引数として取り、クロージャーを介して他のパラメーターを修正する無名関数を作成することです。unownspqに合わせるには、次のようなものを使用できます

cumulativeAdoptersBefore = [0, 1800];
cumulativeAdoptersAfter = [820, 25000];
m = 3e6;
x = [0, 0]; %# Probably, this is no good starting guess.
xopt = fsolve(@(x) Bass(m, x(1), x(2), cumulativeAdoptersBefore, cumulativeAdoptersAfter), x0);

そのfsolve()ため、1 つの引数 (2 つの要素を持つベクトル) のみを受け取る関数が表示され、ベクトル値も返されます。

于 2012-08-23T16:04:12.680 に答える