是否可以在matlab中对函数脚本进行矢量化?
如果我有显式函数,我可以向量化它。如果我有一个函数脚本呢?例如,如果我有一个脚本Fun.m,Fun(x,y,z)给出了一个值,我想计算x=[1,2,3]和y=[4,5](即,(1,4),(1,5),(2,4),(2,5),(3,4),(3,5)),当z=10时,除了使用For循环外,还有其他可能的方法吗?实际上,我可能需要计算长向量的x,y。我想使用bsxfun(@(x,y)Fun(x,y,10),[1,2,3],[4,5]),但它不起作用。它说矩阵尺寸不匹配 让我来发布函数Fun.m我有:是否可以在matlab中对函数脚本进行矢量化?,matlab,Matlab,如果我有显式函数,我可以向量化它。如果我有一个函数脚本呢?例如,如果我有一个脚本Fun.m,Fun(x,y,z)给出了一个值,我想计算x=[1,2,3]和y=[4,5](即,(1,4),(1,5),(2,4),(2,5),(3,4),(3,5)),当z=10时,除了使用For循环外,还有其他可能的方法吗?实际上,我可能需要计算长向量的x,y。我想使用bsxfun(@(x,y)Fun(x,y,10),[1,2,3],[4,5]),但它不起作用。它说矩阵尺寸不匹配 让我来发布函数Fun.m我有: f
function density=HittingDensityOUlevel0(beta,r0,sigma,lambda,t0,i,p,MinOrMax)
g=zeros(1,i);
g(:,1)=-1.*MinOrMax.*2.*Integrand(r0,sigma,lambda,t0+p,t0,beta,r0);
for k=2:size(g,2)
Sum=0;
weight=zeros(1,k-1);
for m=1:k-1
R1=mod(k,2); Q1=floor(k./2);
R2=mod(m,2); Q2=floor(m./2);
if R1==0 && R2==1 && Q2<=Q1-1
weight(:,m)=4./3;
elseif R1==0 && R2==0 && Q2<=Q1-2
weight(:,m)=2./3;
elseif R1==1 && R2==1 && Q2<=Q1-2
weight(:,m)=4./3;
elseif R1==1 && R2==0 && Q2<=Q1-3 && Q1>=3
weight(:,m)=2./3;
elseif R1==1 && R2==0 && m==2*(Q1-1)
weight(:,m)=17./24;
elseif R1==1 && m==2*Q1-1 && Q1>=1
weight(:,m)=9./8;
elseif R1==1 && m==2*Q1 && Q1>=1
weight(:,m)=9./8;
end
end
TimeTicker=(t0+p):p:(t0+(k-1)*p);
Sum=Sum+2.*p.*sum(weight.*g(:,1:(k-1)).*arrayfun(@(t)Integrand(r0,sigma,lambda,t0+k.*p,t,beta,beta),TimeTicker));
g(:,k)=-1.*MinOrMax.*2.*...
Integrand(r0,sigma,lambda,t0+k.*p,t0,beta,r0)+MinOrMax.*Sum;
end
density=g(:,end);
function ret=Integrand(r0,sigma,lambda,t,tau,x,y)
ret=(lambda.*r0.*exp(-lambda.*t)./2+...
(x-r0.*exp(-lambda.*t))./2.*lambda.*cosh(lambda.*(tau-t))./sinh(lambda.*(tau-t))-...
(y-r0.*exp(-lambda.*tau))./2.*lambda./sinh(lambda.*(tau-t))).*...
...
(1./sqrt(pi.*sigma.^2./lambda.*(1-exp(-2.*lambda.*(t-tau))))).*...
...
(exp(-((x-r0.*exp(-lambda.*t)-exp(-lambda.*(t-tau)).*(y-r0.*exp(-lambda.*tau))).^2)./...
(sigma.^2./lambda.*(1-exp(-2.*lambda.*(t-tau))))));
函数密度=HittingDensityOUlevel0(β、r0、西格玛、λ、t0、i、p、MinOrMax)
g=零(1,i);
g(:,1)=-1.*MinOrMax.*2.*被积函数(r0,sigma,lambda,t0+p,t0,beta,r0);
对于k=2:尺寸(g,2)
总和=0;
重量=零(1,k-1);
对于m=1:k-1
R1=mod(k,2);Q1=地板(k./2);
R2=mod(m,2);Q2=地板(m/2);
如果R1==0&&R2==1&&Q2用于为函数生成所有可能的输入对
[tt0,rr0]=meshgrid([1,2,3],[4,5])
所以tt0=[1,2,3,1,2,3]
和rr0=[4,4,4,5,5]
然后将其传递给bsxfun。它应该可以工作。在我们找出你做错了什么之前,你需要发布一个竞争示例。好的,让我显示我的代码