matlab中两种求积规则的嵌套求积

matlab中两种求积规则的嵌套求积,matlab,math,integral,Matlab,Math,Integral,坚持数值计算这个积分,并且只有做简单的求积方案的经验,所以请容忍我,如果这看起来很业余的话。下面使用高斯-厄米特(-inf,+inf)和高斯-拉盖尔格式(0,+inf)的一种变体在高斯和伽马(v/2,2)密度上进行嵌套积分。我几乎完成了积分,中间步骤看起来不错,但我一直在研究如何组合权重来计算整体积分。如果有人建议修改代码/其他想法,编写更好的正交方案来解决问题,我将非常感激。 \开始{等式} \int^{\infty}{-\infty}\int^{\infty}{0}\prod{i=1}^n\

坚持数值计算这个积分,并且只有做简单的求积方案的经验,所以请容忍我,如果这看起来很业余的话。下面使用高斯-厄米特(-inf,+inf)和高斯-拉盖尔格式(0,+inf)的一种变体在高斯和伽马(v/2,2)密度上进行嵌套积分。我几乎完成了积分,中间步骤看起来不错,但我一直在研究如何组合权重来计算整体积分。如果有人建议修改代码/其他想法,编写更好的正交方案来解决问题,我将非常感激。 \开始{等式} \int^{\infty}{-\infty}\int^{\infty}{0}\prod{i=1}^n\Phi\left(\frac{\sqrt{w/v}\,C{i}-a{i}Z}{\sqrt{1a{i^2}\right)f{Z}(Z)f{w}(w)dwdz \结束{方程}

%脚本定义节点、权重和参数,然后调用一个主函数和一个子函数

rho=0.3;nfirms=10;h=repmat(0.1[1,nfirms]);T=1;R=0.4;v=8;alpha=v/2;GaussPts=15

% Quadrature nodes - gaussian and gamma(v/2) from Miranda and Fackler CompEcon
    % toolbox
[x_norm,w_norm] = qnwnorm(GaussPts,0,1);
[x_gamma,w_gamma] = qnwgamma(GaussPts,alpha);
L_mat=zeros(nfirms+1,GaussPts);

for i=1:1:GaussPts;
     L_mat(:,i) = TC_gamma(x_norm(i,:),x_gamma(i,:),h,rho,T,v,nfirms);
end; 

w_norm_mat= repmat(w_norm',nfirms+1,1);
w_gamma_mat = repmat(w_gamma',nfirms+1,1);
% need to weight L_mat by the gaussian and chi-sq i.e, (gamma v/2,2)?
ucl = L_mat.*w_norm;%?? HERE
ucl2 = sum(ucl.*w_gamma2,2);% ?? HERE


function [out] = TC_gamma(x_norm,x_gamma,h,rho,T,v,nfirms)
% calls subfunction feeds into recursion

qki= Vec_CondPTC_gamma(x_norm,x_gamma,h,rho,T,v)' ;

fpdf=zeros(nfirms+1,nfirms+1);
% start at the first point on the tree
 fpdf(1,1)=1; 
    for i=2:nfirms+1 ;
     fpdf(1,i)=fpdf(1,i-1)*(1-qki(:,i-1));
       for j=2:nfirms+1;
       fpdf(j,i)=fpdf(j,i-1)*(1-qki(:,i-1))+fpdf(j-1,i-1)*qki(:,i-1);
     end
   fpdf(i,i)=fpdf(i-1,i-1)*qki(:,i-1);
  end
out=fpdf(:,end);
end% of function TC_gamma


function qki= Vec_CondPTC_gamma(x_norm,x_gamma,h,rho,T,v) 
PD = (1-exp(-kron(h,T)));DB = tinv(PD,v);

a=rho.^0.5; sqrt1_a2 = sqrt(1-sum(a.*a,2));

aM = gtimes(a, x_norm'); Sqrt_W=gamcdf(x_gamma,v/2,2).^0.5;

DB_times_W= gtimes(DB,Sqrt_W); DB_minus_aM = gminus(DB_times_W',aM);

qki=normcdf(grdivide(DB_minus_aM,sqrt1_a2));
end% of function Vec_CondPTC

你的代码很难阅读;你能缩进它吗?还有,为什么你不能只使用matlab中的
quad
函数呢?嗨,Issac,很抱歉添加缩进来提高可读性;原因有三:1.我没有看到/使用内置函数来集成两种不同的密度(这里是N(0,1)&Chi sq),2 quad无法轻松处理这种情况下的无限限制;3 dblquad-需要将区域映射到一个矩形,但不确定如何在此处执行。接受建议。这种方法在数学上似乎很合理,我不知道足够的matlab帮助,但您将有2个嵌套循环,您只需乘以权重。嗨,Alexandre,您能指出是什么吗你会用C或其他语言来做这件事吗?这可能是我对权重的缩放问题,但简单的元素对元素的乘法无法给出所需的结果。LaTeX标记似乎已损坏;我试图将其重新渲染(在此处插入屏幕截图),但无法理解你所说的
\sqrt{1a{I^2}