使用trapz在矩形框的一部分上进行三重积分

时间:2014-12-07 00:43:26

标签: matlab integral

我试图在MATLAB中使用'trapz'命令来评估三重积分。我的被​​积函数是gamma1,gamma2,s的函数...我想用数字而不是符号来评估积分。

syms gamma1; syms gamma2; syms s
f=gamma1*gamma2*exp(-s*10);
x= -20:0.3:20;
y=linspace(0.1,100000,length(x));
z=linspace(0.1,100000,length(x));
[s,gamma1,gamma2] = ndgrid(x,y,z); 
mat=eval(f).* (gamma2>gamma1);         %MY QUESTION IS HERE
out = trapz(x,trapz(y,trapz(z,mat,3),2),1);

我的问题是我的被积函数有条件,只有在gamma2> gamma1时才应该进行评估。我的代码是否正确,即我添加逻辑语句的方式是正确的吗?

1 个答案:

答案 0 :(得分:0)

是的,逻辑是正确的:mat将在条件gamma2>gamma1失败的地方有零。

您可以使用已知答案的示例来自行测试正确性。例如,在每个变量中[0,2]内f=gamma1*gamma2*s的积分得到8(用纸和铅笔),如果添加条件gamma2>gamma1,结果减半(通过对称),所以它变为4.事实上,你的代码返回大约4这个函数。


暂时不谈:考虑到尺寸的差异(40乘100000乘100000),您可能想重新考虑在每个维度中使用相同数量的样本点的可取性。