我需要在Octave中数值地整合一个依赖于整个体积的x,y和z的PDE:
其中phi是具有我将提供的系数的有理函数,x,y和z是唯一的可变参数。
我无法使 triplequad 函数工作,因为它需要一个函数句柄作为参数并计算PDE中的laplacian我需要一个符号表达式(使用符号包)。
function J_dv = f(b200,b002,b202,b220,b222,lap)
Lx = 10;
Ly = 10;
Lz = 200;
a000 = Lx^2 * Ly^2 * Lz^2;
a200 = -Ly^2 * Lz^2;
a002 = -Lx^2 * Ly^2;
a220 = Lz^2;
a202 = Lx^2;
a222 = -1;
cA = 0.002;
cB = 1;
phi = @(x,y,z)(a000+a200*(x .^2+y.^2)+a002*(z.^2)+a220*...
(x.^2*y.^2)+a202*(y.^2*z.^2+x.^2*z.^2)+a222*(x.^2*y.^2*z.^2))/(1 + b200*(x.^2+y.^2)...
+b002*(z.^2)+b220*(x.^2*y.^2)+b202*(y.^2*z.^2+x.^2*z.^2)+b222*(x.^2*y.^2*z.^2))
lap_h = function_handle(lap);
EDP = @(x,y,z) (1/(Lx*Ly*Lz)) * (cA*phi(x,y,z) + cB*lap_h(x,y,z));
triplequad(EDP,0,10,0,10,0,200)
endfunction
phi_s = (a000+a200*(x^2+y^2)+a002*(z^2)+a220*(x^2*y^2)+a202*(y^2*z^2+x^2*z^2)+a222*(x^2*y^2*z^2))/(1 + b200*(x^2+y^2)+b002*(z^2)+b220*(x^2*y^2)+b202*(y^2*z^2+x^2*z^2)+b222*(x^2*y^2*z^2));
lap = laplacian(phi_s);
我尝试做的是在函数外面象征性地计算laplacian,然后将结果作为参数传递,所以在函数内部我使用function_handle将符号结果转换为函数句柄,然后在句柄内使用该句柄对于整个PDE本身。
如果有一种方法来计算phi相对于函数内部的x,y和z的二阶导数,使用单个函数句柄,那么我认为它会起作用。从现在开始我使用符号包,它不起作用。
我在三连续行中得到一个'x'未定义的错误。
任何想法如何解决拉普拉斯对dV的这种积分?
谢谢!