Matlab:如何求解带有附加参数的非线性方程组?

Matlab:如何求解带有附加参数的非线性方程组?,matlab,Matlab,我想创建一个函数,在给定两个时间段的数据的情况下,找到Bass扩散模型的参数p和q 模型方程如下所示: n(T) = p*m + (q-p)*n(T-1) + q/m*n(T-1)^2 2000: n(T) = 820, n(T-1) = 0 2005: n(T) = 25000, n(T-1) = 18000 在哪里 例如,如果m=3.000.000 以下年份的数据如下: n(T) = p*m + (q-p)*n(T-1) + q/m*n(T-1)^2 2000: n(T) = 820,

我想创建一个函数,在给定两个时间段的数据的情况下,找到Bass扩散模型的参数p和q

模型方程如下所示:

n(T) = p*m + (q-p)*n(T-1) + q/m*n(T-1)^2
2000: n(T) = 820, n(T-1) = 0
2005: n(T) = 25000, n(T-1) = 18000
在哪里

例如,如果m=3.000.000 以下年份的数据如下:

n(T) = p*m + (q-p)*n(T-1) + q/m*n(T-1)^2
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
通过以下步骤,我尝试创建一个函数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,选项,但在这种情况下,应在x0中给出m、p、q、cummulativeadopterbefore1和cummulativeadopterbefore2,所有变量将被视为未知变量,而不仅仅是后两个变量

有人知道如何解上述方程组吗

谢谢大家!

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函数乘法而不是求和中有输入错误

现在你有了一个函数,它接受的参数比未知的要多。 一种方法是创建一个匿名函数,该函数只接受未知数作为参数,并通过闭包修复其他参数。 为了适应未知的p和q,可以使用

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看到一个函数只接受一个参数,一个包含两个元素的向量,它还返回一个向量值。

所以…你实际上只有一个方程,并且有几个T的nT和nT-1的数据。如果我错了,请纠正我,但这听起来很像你没有做对这件事。你确定lsqcurvefit不是更适合你的问题吗?fsolve是用于不同方程式的stystems…@RodyOldenhuis:你说得对。我会检查一下LSQ测量。非常感谢。