определенная интеграция 4D в октаве с функциями в качестве пределов - PullRequest
0 голосов
/ 14 января 2019

Мне нужно сделать 4D-интеграцию в октаве. Моя функция f(x,y,phi,theta), а некоторые пределы интегрирования являются функцией внешних пределов.

0 < theta < pi
t1(x,y) < phi < t2(x,y)
h1 < y < h2
w1 < x < w2

Я написал в октаве так (обобщение):

[q1(i)] = integral( @(x) (integral3( @(y, phi, theta) f3(x, y, phi, theta), h1 , h2 , @(x,y) t1(x,y), @(x,y) t2(x,y), 0, pi)), w1, w2, 'ArrayValued',true);

мой фактический код:

clear all;
clc;
rho_bulk = 2.44; # rho_bulk = 2.44 uOhm.cm
h = 20e-9;
p = 0.5;
lambda = 40e-9;
n = 10;
w = linspace(20e-9,80e-9,n);

  for i = 1:n
  # limit for theta
  p2    = pi;
  p1    = 0;

  # limit for phi
  p4    = @(x,y) atan(x/(h-y)) + (pi/2);
  p3    = @(x,y) -atan((h-y)/(w(i)-x));

  # limit for y
  p6    = h;
  p5    = 0;

  # limit for x
  p8(i) = w(i);
  p7    = 0;

  #   f(x, y, phi, theta); outer --> inner
  #   limits;              inner --> outer

  f1 = @(x, y, phi, theta) exp(-(h-y)/(lambda *sin(theta) *sin(phi)));  
  f3 = @(x, y, phi, theta) sin(theta).*cos(theta).^2 .* f1(x, y, phi, theta);

  [q1(i)] = integral( @(x) (integral3( @(y, phi, theta) f3(x, y, phi, theta), p5, p6, @(x,y) p3(x,y), @(x,y) p4(x,y), p1, p2)), p7, p8(i), 'ArrayValued',true);

У меня ошибка из строки интеграции

error: 'y' undefined near line 51 column 98

Я узнал об интеграции, выполнив следующие действия:

https://www.mathworks.com/matlabcentral/answers/77571-how-to-perform-4d-integral-in-matlab

Четырехкратный интеграл с использованием вложенного интеграла 2 в Matlab

1 Ответ

0 голосов
/ 14 января 2019

Я полагаю, что проблема в том, что вы определяете пределы при вызове integral3:

integral3( @(y, phi, theta) f3(x, y, phi, theta), p5, p6, @(x,y) p3(x,y), @(x,y) p4(x,y), p1, p2)

Вы пытаетесь интегрироваться в y, phi и theta с p5 до p6, p3(x,y) до p4(x,y) и p1 до p2 соответственно. integrate3 допускает функционально-значимые ограничения, но только очень специфическим образом :

q = integral3 (f, xa, xb, ya, yb, za, zb, prop, val, …)

    Numerically evaluate the three-dimensional integral of f using adaptive quadrature
    over the three-dimensional domain defined by xa,
    xb, ya, yb, za, zb (scalars may be finite or infinite). Additionally,
    ya and yb may be scalar functions of x and za, and zb maybe be scalar
    functions of x and y, allowing for integration over non-rectangular
    domains.

Это на самом деле отражает работу интеграции на бумаге. Итак, что у вас есть:

p5, p6,
@(x,y) p3(x,y), @(x,y) p4(x,y),
p1, p2

Ваши вторые пределы пытаются зависеть от двух переменных, тогда как они могут зависеть только от одной: первой переменной интегрирования. Но это нормально, поскольку x не является интеграционной переменной, это просто параметр. Поэтому я считаю, что должно работать следующее:

integral3(@(y, phi, theta) f3(x, y, phi, theta), p5, p6, @(y) p3(x,y), @(y) p4(x,y), p1, p2)

Определяя пределы как однозначные функции, мы в основном карри ваши p3 и p4 функции, чтобы иметь однозначную функцию, которая зависит от переменной интеграции y.

...