Matlab:如何求解带有附加参数的非线性方程组?
我想创建一个函数,在给定两个时间段的数据的情况下,找到Bass扩散模型的参数p和q 模型方程如下所示: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,
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测量。非常感谢。