如何在Octave中积分偏微分方程

时间:2018-06-08 20:33:05

标签: integration octave

我需要在Octave中数值地整合一个依赖于整个体积的x,y和z的PDE:

Triple integral of 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的这种积分?

谢谢!

0 个答案:

没有答案