计算科学人:
标题就是问题。我正在尝试在 Octave (开源 Matlab 克隆)中的一个正方形上数值计算某个积分。我得到错误的答案。为了证明确实出了问题,我创建了以下玩具问题: Let ( if,否则 )。然后。我写了一个 Octave 脚本来计算这个:
junk=10; %this is here just so Octave doesn't complain about the file name
function out =R1(t)
if t < 1
out = 1;
else
out =0;
end%if
end%function
dIF = @(t1,t2) ones(size(t1))* R1(t1(1))*R1(t2);
dblquad(dIF, 0, 3, 0, 3) %should be 1. Octave incorrectly gives 3.
tx=0:0.1:3;
ty=0:0.1:3;
[xx, yy] = meshgrid (tx, ty);
z=zeros(31,31);
for i=1:31
for j=1:31
z(i,j)=dIF(xx(i,j),yy(i,j));
end%for j
end%for i
mesh(xx,yy,z) %graph is correct
%end script
Octave 返回作为双积分的值,它应该是。如您所见,脚本绘制被积函数,如预期的那样,如果和都在和,。我按照我的方式定义了函数 dIF,因为在我的实际问题中,我需要将其他参数传递给我正在集成的函数,这是我知道如何做到这一点的唯一方法。
在我的实际问题中,我可能只是将我的双积分切成九块,不需要分段函数,然后添加它们。但我想知道是否有更好的方法来做到这一点,以防我将来遇到类似的问题。
我没有在 Matlab 中尝试过,只有 Octave。我刚刚用我今天从一个有信誉的来源下载的 Octave 副本对其进行了测试。