我试图在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时才应该进行评估。我的代码是否正确,即我添加逻辑语句的方式是正确的吗?
答案 0 :(得分:0)
是的,逻辑是正确的:mat
将在条件gamma2>gamma1
失败的地方有零。
您可以使用已知答案的示例来自行测试正确性。例如,在每个变量中[0,2]内f=gamma1*gamma2*s
的积分得到8(用纸和铅笔),如果添加条件gamma2>gamma1
,结果减半(通过对称),所以它变为4.事实上,你的代码返回大约4这个函数。
暂时不谈:考虑到尺寸的差异(40乘100000乘100000),您可能想重新考虑在每个维度中使用相同数量的样本点的可取性。