在matlab中集成一个调用另一个函数的函数
In matlab integrate a function that calls another function
我正在使用 integral2 matlab 命令对二重积分进行数值计算。我的代码如下:
l1=0; m1=0;
funn = @(theta,phi)(Y_hsph_new(l1,m1,theta,phi));
q = integral2(funn,0,pi/2,0,2*pi);
其中'Y_hsph_new'是我自己设计的MatLab函数写成:
function [ YYY ] = Y_hsph_new(l1,m1,theta,phi)
% OUTPUT: (I x (N+1)^2) matrix
I = length(theta);
Y=zeros(I,(l1+1)^2);
for i=1:I
k=1;
for n=0:l1
P=legendre(n,2*cos(theta(i))-1); % (2*x-1) for transformation
for m=-n:n % degree
if m>0
Y(i,k)=(sqrt(((2*n+1)*factorial(n-abs(m)))/((2*pi)*factorial(n+abs(m)))))*P(abs(m)+1)*sqrt(2)*cos(m*phi(i));
elseif m == 0
Y(i,k)=(sqrt(((2*n+1)*factorial(n))/((2*pi)*factorial(n))))*P(1);
else
Y(i,k)=(sqrt(((2*n+1)*factorial(n-abs(m)))/((2*pi)*factorial(n+abs(m)))))*P(abs(m)+1)*sqrt(2)*sin(abs(m)*phi(i));
end
k=k+1;
end
end
end
YYY = Y(:,m1+l1+1+(l1)^2);
我在其他常用代码中使用了 Y_hsph_new 函数,它工作正常。我相信功能代码可能没问题,但与将在集成中使用的配置相关的某些内容导致了问题。我在 运行 时遇到的错误是:-
Error using integral2Calc>integral2t/tensor (line 241)
Integrand output size does not match the input size.
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);
经过多次尝试,我真的很紧张。如果有人可以在这方面帮助我,那将非常有帮助。谢谢。
funn
的定义方式与integral2不一致。例如,如果我向 funn
输入一个 theta 和 phi 值数组,我希望输出的数组大小相同,但这不是 funn
产生的结果。例如:
[th ph]=meshgrid(linspace(0,pi/2),linspace(0,2*pi))
>> size(th)
ans =
100 100
鉴于:
>> size(funn(th,ph))
ans =
100 1
因此 funn
不能正常用于 integral2。我认为函数的第一个开始位置是 I = length(theta);
行,因为如果 theta 是二维数组,则 theta 的长度不合适。
我正在使用 integral2 matlab 命令对二重积分进行数值计算。我的代码如下:
l1=0; m1=0;
funn = @(theta,phi)(Y_hsph_new(l1,m1,theta,phi));
q = integral2(funn,0,pi/2,0,2*pi);
其中'Y_hsph_new'是我自己设计的MatLab函数写成:
function [ YYY ] = Y_hsph_new(l1,m1,theta,phi)
% OUTPUT: (I x (N+1)^2) matrix
I = length(theta);
Y=zeros(I,(l1+1)^2);
for i=1:I
k=1;
for n=0:l1
P=legendre(n,2*cos(theta(i))-1); % (2*x-1) for transformation
for m=-n:n % degree
if m>0
Y(i,k)=(sqrt(((2*n+1)*factorial(n-abs(m)))/((2*pi)*factorial(n+abs(m)))))*P(abs(m)+1)*sqrt(2)*cos(m*phi(i));
elseif m == 0
Y(i,k)=(sqrt(((2*n+1)*factorial(n))/((2*pi)*factorial(n))))*P(1);
else
Y(i,k)=(sqrt(((2*n+1)*factorial(n-abs(m)))/((2*pi)*factorial(n+abs(m)))))*P(abs(m)+1)*sqrt(2)*sin(abs(m)*phi(i));
end
k=k+1;
end
end
end
YYY = Y(:,m1+l1+1+(l1)^2);
我在其他常用代码中使用了 Y_hsph_new 函数,它工作正常。我相信功能代码可能没问题,但与将在集成中使用的配置相关的某些内容导致了问题。我在 运行 时遇到的错误是:-
Error using integral2Calc>integral2t/tensor (line 241)
Integrand output size does not match the input size.
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);
经过多次尝试,我真的很紧张。如果有人可以在这方面帮助我,那将非常有帮助。谢谢。
funn
的定义方式与integral2不一致。例如,如果我向 funn
输入一个 theta 和 phi 值数组,我希望输出的数组大小相同,但这不是 funn
产生的结果。例如:
[th ph]=meshgrid(linspace(0,pi/2),linspace(0,2*pi))
>> size(th)
ans =
100 100
鉴于:
>> size(funn(th,ph))
ans =
100 1
因此 funn
不能正常用于 integral2。我认为函数的第一个开始位置是 I = length(theta);
行,因为如果 theta 是二维数组,则 theta 的长度不合适。