Я полагаю, что проблема в том, что вы определяете пределы при вызове 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
.