Long Numerical Integration: Is this possible with MATLAB?

Click For Summary
SUMMARY

MATLAB can perform long numerical integration using functions such as 'quad', 'quad8', and 'trapz', but users must ensure proper variable definitions and syntax. The discussion highlights an integration problem involving a complex equation for pressure response in a horizontal observation well, where the integral is computed from 0 to td, with td ranging from 0.001 to 10000. The user encountered errors due to undefined variables and incorrect integration syntax, which can be resolved by defining 'td' as a symbolic variable and ensuring the function is evaluated before integration.

PREREQUISITES
  • Understanding of MATLAB syntax and functions, specifically 'syms' and 'int'
  • Familiarity with numerical integration techniques in MATLAB, including 'quad' and 'trapz'
  • Knowledge of error functions, specifically 'erf' in MATLAB
  • Basic understanding of series summation and its implementation in MATLAB
NEXT STEPS
  • Learn how to define symbolic variables in MATLAB using 'syms'
  • Research numerical integration methods in MATLAB, focusing on 'integral' and 'integral2'
  • Explore the use of loops and vectorization in MATLAB for efficient computation
  • Study the implementation of series summation in MATLAB, particularly using 'sum' and 'arrayfun'
USEFUL FOR

This discussion is beneficial for MATLAB users, particularly those working in engineering or scientific fields, who need to perform complex numerical integrations and troubleshoot common coding errors.

Edgarg
Messages
3
Reaction score
0
Please, I am new in MATLAB and need some help as to whether MATLAB can perform this integration, and how to go about it. I have tried 'quad', 'quad8', 'trapz' and even a sum approach but it returns either a not-a-number answer or mtimes error or mrdivide error message. What I want to do is this (Pressure response of a horizontal observation well at a distance xd, yd and zd from a producer)
integral= (1/(sqrt(td)))*(exp(yd^2/(4*td)))*(erf((1+xd)/(2*sqrt(td)))+erf((1-xd)/(2*sqrt(td))))*(1+2*(exp((-n^2*pi^2*td)/hd^2)*cos(n*pi*zwd)*cos(n*pi*((zd/hd)+zwd))));
xd, yd, zd, hd and zwd are constants.
i am integrating from 0 to td for td values of 0.001 to 10000
for each of the integral segment, 0.001 to 10000, (exp((-n^2*pi^2*td)/hd^2)*cos(n*pi*zwd)*cos(n*pi*((zd/hd)+zwd))) will be summed for n=1 to infinity. ie Ʃ(exp((-n^2*pi^2*td)/hd^2)*cos(n*pi*zwd)*cos(n*pi*((zd/hd)+zwd))) for n=1 to ∞

This is my recent attempt: where I did td =1 to 10000; and n= 1 to 100 just for it to work first.
----------------------
clc
x=2800;
y=0;
z=50;
zw=50.165;
kx=300;
ky=300;
kz=100;
l=1000; %well half length
h=100;
% t=150;
% td=(0.0002637*ky*t)/(phi*mu*ct*xf.^2)
k=nthroot(kx*ky*kz,3);
xd = x/l*sqrt(k/kx);
yd = y/l*sqrt(k/ky);
zd = z/h;
zwd=zw/h;
hd = h/l*sqrt(k/kz);
for i = 1:1e+1:10000
for j=1:100
int(i,j)= (1./(sqrt(td(i)))).*(exp(yd.^2./(4.*td(i)))).*(erf((1+xd)./(2.*sqrt(td(i))))+erf((1-xd)./(2.*sqrt(td(i))))).*(1+2.*(exp((-n(j)^2.*pi^2.*td(i))./hd.^2).*cos(n(j)*pi*zwd).*cos(n(j)*pi*((zd./hd)+zwd))));
end
end
p=sum(int*10,3)

Error: ? Undefined function or method 'td' for input arguments of type 'double'.
**The attached document contains the equation.
 
Physics news on Phys.org
I'm having trouble understanding this. Is this all of your code? You don't have a definition for td.
 
Yes, I am integrating with respect to td. So, I did not define td.
Lower integral limit is zero, and I will have several upper limits of 0.001 to 10000 with varying intervals. The equation contains a sum series within.
Equation is:
integral= (1/(sqrt(td)))*(exp(yd^2/(4*td)))*(erf((1+xd)/(2*sqrt(td)))+erf((1-xd)/(2*sqrt(td))))*(1+2*Ʃ(exp((-n^2*pi^2*td)/hd^2)*cos(n*pi*zwd)*cos(n*pi*((zd/hd)+zwd))))
the sigma is for n=1 to infinity.
 
If you're using it as a symbolic variable, you need to define it using
Code:
syms td;

I don't know if there are alternate syntaxes for integrating, but AFAIK it's normally

Code:
int(expr,var)

so your code would be

Code:
syms td
int((1./(sqrt(td(i)))).*(exp(yd.^2./(4.*td(i)))).*(erf((1+xd)./(2.*sqrt(td(i))))+erf((1-xd)./(2.*sqrt(td(i))))).*(1+2.*(exp((-n(j)^2.*pi^2.*td(i))./hd.^2).*cos(n(j)*pi*zwd).*cos(n(j)*pi*((zd./hd)+zwd)))),td)

or something like that. If you're trying to integrate numerically rather than symbolically, then you should evaluate the function first and then integrate it, and you would need to define td.
 
Thanks, let me try it.
 

Similar threads

  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
4K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 10 ·
Replies
10
Views
3K
  • · Replies 13 ·
Replies
13
Views
3K
Replies
3
Views
3K
Replies
27
Views
4K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 12 ·
Replies
12
Views
2K