可以用fsolve直接求出。计算方法如下:
1、
%p=x(1);q=x(2);
%例如数据X随机给出
X=round(100*rand(10,1))
n=length(X);
F=@(x)[sum(X.^x(1).*log(X))./sum(X.^x(1))-1/x(1)-sum(log(X))/n;
x(2)-(sum(X.^x(1))/n).^(1/x(1))];
options=optimset('MaxFunEvals',2000,'MaxIter',1000);
x = fsolve(F,[0.1;5],options)
p=x(1)
q=x(2)
2、由于你的方程组的特殊性,两个变量之间没有耦合,q没有出现在第一个方程中。于是更加方便的,能每次求出的结果的解法是:
clear
%p=x
X=round(100*rand(10,1))
n=length(X);
F=@(x)sum(X.^x.*log(X))./sum(X.^x)-1/x-sum(log(X))/n;
options=optimset('MaxFunEvals',2000,'MaxIter',1000);
[x fval]= fsolve(F,0.1,options)
p=x
q=(sum(X.^x)/n).^(1/x)
个人推荐用第二种方法。因为解方程组,有事fsolve会出现求解失败。
希望对你有帮助,如若解决,望采纳