How to calculate Electric field analytically on Matlab?

Greetings!
I need to analytically calculate an Electric field.Here's the equation:
With my very basic knowledge of the software, here's the code:
if true
%function [E]= Etemp(x,y,z,x0,y0,z0,E0,t,c)
if z<z0,
E=E0;
else
E=-(1./(2*pi))*dblquad('E2(x0,yo)',inf,inf,inf,inf);
E2=(Rgv/(Rg^2))*((1/c)*z./norm(z)*diftE+((1/Rg)*z./norm(z)*E0));
clear,
syms ro Rg c t;
f=E0;
diftE=diff(f,t);
end
end
Beside the feeling of missing something with the code, I have encountered so far a problem with calculating the double indefinite integrals using "dblquad" because it doesn't seems right. Same with using "diff" with indefinte differentials.
I have no experience in this domain and I'm definitely afraid that I'm missing something here (too good to be true. This has to be more complicated then that ). So I'll be eternally grateful for any help.
Thanks very much for any kind of help!

7 Comments

Do you have E(r0,t) in analytic form? If not, then I don't see how you can go much further then what you've already got. Where does your original equation come from? Are you sure that you don't need to solve the equation numerically?
Thanks for the reply!
Well, basically E(ro,t) is to be provided by measurements on a point in a scanning plane, but so far I haven't precisely studied the actual means to do so.
Actually, it's an analytical calculation of the Electric and Magnetic fields in the time domain, by using green's function equation instead of the numerical methods such as Finite Difference Time Domain and Fintite Elements Time Domain.
What are you ultimately wanting to calculate? E(r,t) in the half-space opposite your field source? Are you wanting E(r,t) in analytical form or numerical? When you use quadrature (dblquad) and finite difference methods (diff), then you are doing numerical calculations. If E0 comes from a scanning plane, then I envision E0 as a mesh of data points in time. Maybe even a 3D matrix, where two dimensions are spatial and the third is time. With such data, you should then be able to calculate E(r,t) in on a discrete space. r0 is your spatial probing point, right? It's been awhile since I've studied Classical EM, so my knowledge is a little rusty.
Now that I think about it, are you wanting to solve for E (and B/H) in the half-space opposite your source given knowledge of E on the plane dividing your space?
yes, I intend to calculate the numerical value of the field from this equation. And E0 in terms of r0 and a temporal delay, will be in the form of a matrix containing spatial and temporal data points in the scan plane z=z0. The idea is that from the measurement of E0 in terms of its value in the scan plane, one can calculate the field at any point of the half space z>zo, even far field.
So, do you think I'm doing this right with this code? Assuming that I have the E0 field from measurement, is it able to provide the field calculation? I have doubts about using "dblquad" and "diff" for an indefinite evaluation, should I use something else. Also, I can't help but think that I'm missing something important in the code. When I see the Finite Difference method matlab code's complexity, I have a bad feeling for my work. I'm not familiar with Matlab coding in fact, I used to rely on FETD with Comsole for this kind of stuff.
Thanks
Do you have an example of E0? It's format will determine how you calculate d/dt[E0]. It might be a good idea to work out the cross products in the integrand, so that you can evaluate each of the field components separately. In the snippet of code you posted, you use the standard multiplication operator (*). Matlab has a cross product function (cross), but you need to look at it's documentation before you use it. I'm not familiar with dblquad, so I can't really say much about it. I can say that using inf for your limits of integration is probably not a good idea. There are probably practical limits you can use, but they will be problem specific. In fact, you might have to run some simulations to determine what good limits will be.
The calcuation of E0 is the next level of the work, I'll need another set of equations for calculating fields in a certain point and I'll be looking into it very soon... Thanks of the "cross" tip, I'll need to study its case further. As for dblquad I'm looking into a symbolic way for evaluating integrals, which is more approriate then this operator. Thanks for the help. I'll see what I can do for now

Sign in to comment.

 Accepted Answer

Going through what you have written, it appears that your E0 is a numeric matrix. If that is the case, then you cannot do a symbolic differentiation on it. Your f=E0 would be numeric, and diff(f,t) would try to apply the numeric diff() routine (numeric difference between adjacent points) which would promptly complain because the numeric diff() routine cannot accept a symbolic argument for the number of the dimension to operate on.
If E0 is indeed numeric, then diff(sym(f),t) would try to apply the symbolic diff() routine (symbolic differentiation), but since none of the symbolic values would involve the reference variable "t", the differentiation result would be a matrix of symbolic zeros.

3 Comments

Is R2012a being used? R2012a introduced new integration routines that accept infinite limits.
dblquad() is not suitable for infinite limits. quadgk is one of the few pre-R2012a routines that accepts infinite limits.
Is the use of infinite limits still a good idea? I'm not familiar with these routines or their underlying algorithms, so I don't know. I've always sought out finite limits (practical infinities) to use instead.
Thanks. I suspected as much. I'll look into quadgk and I'll see how to replace the diff with a more convienent operator.

Sign in to comment.

More Answers (2)

Here you have the full MATLAB code explained (in spanish but the first comment is the code): https://www.youtube.com/watch?v=k9srU6aQfL0
Now I'm concentrating in the calculation of the EO, so I searched for equations to calculate the electric field in a point emitted by an electric elementary dipole. Here's the forumla:
So, would I be able to calculate the field using this equation on MATLAB? Is it programmable without eventual problems?
Thanks so much!

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!