克服Matlab积分中具有不同维数的矩阵的乘法

时间:2017-04-18 19:41:22

标签: matlab math matrix matlab-figure

我在Matlab上执行以下integral2操作时遇到问题。

phi = @(x)(x>0).*exp(-1./x.^2);
R = @(xx,zz)phi(xx).*phi(1-xx).*phi(zz).*phi(1-zz);
omega = linspace(0,5,1000000);
theta = linspace(0,2*pi,1000000);
D = exp((10*1i*omega)./(40*pi)).*integral2(@(xx,zz)R(xx,zz).*exp(20.*omega.*1i.*((sin(theta)).*xx+(cos(theta)).*zz)),0,5,0,5);

我得到的错误信息是"矩阵维度必须同意"。

Matrix dimensions must agree.
Error in @(xx,zz)R(xx,zz).*exp(20.*omega.*1i.*((sin(theta)).*xx+(cos(theta)).*zz))

Error in integral2Calc>integral2t/tensor (line 228)
        Z = FUN(X,Y);  NFE = NFE + 1;
Error in integral2Calc>integral2t (line 55)
[Qsub,esub] = tensor(thetaL,thetaR,phiB,phiT);
Error in integral2Calc (line 9)
    [q,errbnd] = integral2t(fun,xmin,xmax,ymin,ymax,optionstruct);
Error in integral2 (line 106)
    Q = integral2Calc(fun,xmin,xmax,yminfun,ymaxfun,opstruct); 

我不确定如何克服这个问题。当我在numelxxthetaomegazz时,我发现它们都有1000000个元素。

我知道这可能是一个"新手"问题,但我尝试了许多事情来达到这一点,但没有用。

我想解决的等式是:

enter image description here

3 个答案:

答案 0 :(得分:3)

函数integral2一次只能计算一个积分。如果你需要 要计算许多积分,你应该使用循环(我略微减小了网格大小):

phi = @(x)(x>0).*exp(-1./x.^2);
R = @(xx,zz)phi(xx).*phi(1-xx).*phi(zz).*phi(1-zz);
    % generate the grid
[omega,theta]= meshgrid(linspace(0,5,200),linspace(0,2*pi,200));
D= zeros(size(omega)); % preallocate the memory
for ii= 1:size(omega,1)
    for jj= 1:size(omega,2)
        f= @(xx,zz)R(xx,zz).*exp(20.*omega(ii,jj).*1i.*...
            ((sin(theta(ii,jj))).*xx+(cos(theta(ii,jj))).*zz));
        D(ii,jj)= exp((10*1i*omega(ii,jj))./(40*pi)).*integral2(f,0,5,0,5);
    end
end
    % convert to Cartesian coordinates
[x,y] = pol2cart(theta,omega);
    % draw the results
figure;
surface(x,y,abs(D))
shading interp; axis square; view(3)
figure;
surface(x,y,real(D))
shading interp; axis square; view(3)
figure;
surface(x,y,imag(D))
shading interp; axis square; view(3)

被积函数xxzzR(xx,zz)的大小不一定等于1x1000000。 MATLAB文档只说

  

函数fun必须接受两个相同大小的数组并返回一个   相应值的数组。它必须按元素执行   操作

例如,在我的系统上,它的大小是14x14。

答案 1 :(得分:2)

integral2(fun, xmin, xmax, ymin, ymax)计算给定z = fun(x, y)x限制内函数y所描述的平面下的音量。

因此,对于(x, y)的一个值,fun应该只返回一个z值,而在您的示例中并非如此。您应该检查函数的含义并确定要计算的积分。

答案 2 :(得分:0)

您无法numel xx,因为它是集成功能传递的函数参数。 你实际上不知道它的大小,也不能用恒定大小的矩阵乘以它。