Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在matlab中对函数脚本进行矢量化?_Matlab - Fatal编程技术网

是否可以在matlab中对函数脚本进行矢量化?

是否可以在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

如果我有显式函数,我可以向量化它。如果我有一个函数脚本呢?例如,如果我有一个脚本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我有:

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。

它应该可以工作。在我们找出你做错了什么之前,你需要发布一个竞争示例。好的,让我显示我的代码