【发布时间】:2013-05-14 04:35:00
【问题描述】:
我正在尝试使用 Matlab 的 dblquad 计算积分。为此,我首先编写了一个脚本函数。我的代码是
function z = IntRect(x, y)
%The variables
z0=20;
x0=15;
y0=20;
rl=sqrt(x.^2+y.^2+(z0/2)^2);
theta=acos(z0./(2*rl));
phi=atan(y./x);
%The function
z=(x0-z0*tan(theta).*cos(phi))*(y0-z0*tan(theta).*sin(phi))*(z0/2)^4;
z=z/rl.^3;
要计算我在命令窗口中输入的数值积分
z0=20;x0=15;y0=20;
Q = dblquad(@IntRect,0,x0/2,0,y0/2,1.e-6);
我收到一个错误提示
??? Error using ==> mtimes
Inner matrix dimensions must agree.
Error in ==> IntRect at 8
z=(x0-z0*tan(theta).*cos(phi))*(y0-z0*tan(theta).*sin(phi))*(z0/2)^4;
Error in ==> quad at 77
y = f(x, varargin{:});
Error in ==> dblquad>innerintegral at 84
Q(i) = quadf(intfcn, xmin, xmax, tol, trace, y(i), varargin{:});
Error in ==> quad at 77
y = f(x, varargin{:});
Error in ==> dblquad at 60
Q = quadf(@innerintegral, ymin, ymax, tol, trace, intfcn, ...
我做错了什么?
编辑
替换
z=(x0-z0*tan(theta).*cos(phi))*(y0-z0*tan(theta).*sin(phi))*(z0/2)^4;
与
z=(x0-z0*tan(theta).*cos(phi)).*(y0-z0*tan(theta).*sin(phi))*(z0/2)^4;
我收到一个新错误
??? Index exceeds matrix dimensions.
Error in ==> quad at 85
if ~isfinite(y(7))
Error in ==> dblquad>innerintegral at 84
Q(i) = quadf(intfcn, xmin, xmax, tol, trace, y(i), varargin{:});
Error in ==> quad at 77
y = f(x, varargin{:});
Error in ==> dblquad at 60
Q = quadf(@innerintegral, ymin, ymax, tol, trace, intfcn, ...
【问题讨论】:
-
开始调试。第一个错误发生的第 8 行变量的维度是多少?
-
@Schorsch:非常感谢您的评论。那是我不确定的事情...我知道问题出在
theta和phi变量中,但我无法确定。我所知道的是,它们的尺寸完全相同。所以我在第 8 行使用了phi'而不是phi,但我得到了完全相同的错误......
标签: matlab integration numeric numerical