- 积分
- 0
- 注册时间
- 2009-5-15
- 仿真币
-
- 最后登录
- 1970-1-1
|
我的思路是这样的:输入样本D为一个n乘3的矩阵,其中第一二三列分别表示q、r、v,然后代入方程组; f1=sum((v(i)-k*q(i)^a*r(i)^b)*q(i)^a*r(i)^b); f2=sum((v(i)-k*q(i)^a*r(i)^b)*q(i)^a*r(i)^b*log(q(i)));f3=sum((v(i)-k*q(i)^a*r(i)^b)*q(i)^a*r(i)^b*log(r(i)));中求解k、a、b并且使(x-x0)/x0误差最小。
下面是编写的程序,请帮忙改正一下吧,谢了。
clear clc
global x v k q a b r w e1 e N;
D=[5.6,15.62,1.431;5.6,22.36,1.067;5.6,29.73,0.582;5.6,36.4,0.516;5.6,43.17,0.348;9.4,20.59,1.433;9.4,27.86,0.964;12.8,27.31,1.204];%数据样本
q=D(:,1)';
r=D(:,2)';
v=D(:,3)';
%计算输入样本的组数
n=length(q);
x0=[100,0.5,-0.5];%初始值
%编写循环程序
for i=1:n
if abs(e1)>1e-4&(w<=500)
f1=sum((v(i)-k(w)*q(i)^a(w)*r(i)^b(w))*q(i)^a(w)*r(i)^b(w));
f2=sum((v(i)-k(w)*q(i)^a(w)*r(i)^b(w))*q(i)^a(w)*r(i)^b(w)*log(q(i)));
f3=sum((v(i)-k(w)*q(i)^a(w)*r(i)^b(w))*q(i)^a(w)*r(i)^b(w)*log(r(i)));
f=[f1;f2;f3];x=[k,a,b];
df=jacobian(f,x);%利用jacobian函数求微分
x=newton(f,df,x0,e,N);
x=x0-feval(f,x0)/feval(df,x0);
%利用norm函数求精度
e1=norm((x-x0)./x,inf);%取dx的无穷范数
w=w+1;
x0=x;
disp(x);
else if w>N
warning('已达迭代次数上限');
end
i=i+1;
end
end
disp(x) |
|