function qth=quantle(p)
A=-5;
M2=100;
qth=0;
for i=1:length(k)
for j=1:M2
B=A+j*(0-A)/M2;
if simprl(gst(B),A,B)-P<=0.00001
qth(i)=B;
break
end
end
qth;
function s=simprl(f,a,b)
M1=10000
h=(b-1)/(2*M1);
s1=0;
s2=0;
for k=1:M1
x=a+h*(2*k-1);
s1=s1+feval(f,x);
end
for k=1:(M1-1)
x=a+h*2*k;
s2=s2+feval(f,x);
end
s=h.*(feval(f,a)+feval(f,b)+4.*s1+2.*s2)./3;
function f=gst(x)
global k n lambda sigma
slambda=(1+3.*lambda.^2-4.*lambda.^2.*beta(2./k,(n-1)./k).^2.*beta(3./k,(n-2)./k).^(-1)).^1/2;
c=0.5.*k.*beta(1./k,n./k).^(-3/2).*beta(3./k,(n-2)./k).^1/2.*slambda.*sigma.^(-1);
theta=(k./(n-2)).^1/k.*beta(1./k,n./k).^1/2.*beta(3./k,(n-2)./k).^(-1/2).*slambda^(-1);
if x<0
f=c.*(1+(k./(n-2)).*theta.^(-k).*(1-lambda).^(-k).*(abs(x./sigma)).^k).^(-(n+1)./k);
else
f=c.*(1+(k./(n-2)).*theta.^(-k).*(1+lambda).^(-k).*(abs(x./sigma)).^k).^(-(n+1)./k);
end
f;
前面的是三个程序,第一个程序是主程序要调用第二个程序,第二个程序要调用第三个程序。
其中第一个程序是计算分位数的,当函数gst在A-B区间的面积与q的差小于0.0001时就把B作为对应q水平下的分位数,
第二个程序是用来计算函数gst在A-B区间的积分的,
第三个函数是定义函数gst的。
其中已知的变量是 k ,n, lambda 和sigma 都是个数在2000个左右的序列,为函数gst 的参数是时变的,且是已知的。
要求当 k ,n, lambda 和sigma 为某一组值时求函数gst函数对应的分位数。也就是要求2000个左右的分位数,对应于2000个左右的gst参数。
运行提示:
>> quantle(0.5)
??? Error using ==> times
Matrix dimensions must agree.
Error in ==> gst at 5
theta=(k./(n-2)).^1/k.*beta(1./k,n./k).^1/2.*beta(3./k,(n-2)./k).^(-1/2).*slambda^(-1);
Error in ==> quantle at 6
if simprl(gst(B),A,B)-P<=0.00001
哪位高手帮帮忙,刚开始学matlab编程没有几天,实在是急着要,没有办法,谢谢大家了。