Clear Filters
Clear Filters

Plotting the integral without getting negative domain results?

2 views (last 30 days)
So I need to graph the magnitude of equation 2 (I labeled them in the comments) but I am not getting what is expected for the plots of the magnitudes of equation 2. It should be a graph that starts out at some y value that is high up on the y scale, and then over the frequency (which is the x value) gradually slope down in a curved fashion till it hits 0. an easy way to describe what I am supposed to get would be an upside down e^x graph. Does anyone have any suggestions as to what I need to do to my code to get these results? I have been struggling trying to get the right result now for a week. :/
if true
format long
a = 1
b = 3E-7
c = 5E-8
f0 = 4E9
sigma = 0.2
t0 = 0
tmax = 2.*b
f = linspace(1E6,1E10)
t = linspace(t0, tmax)
omega = 2.*pi.*f
omega0 = 2.*pi.*f0
yt = a.*exp((-(t-b).^2)./((2*c).^2)) % equation (1)
fun = @(t) (yt.*exp(-1i.*omega.*t))
q = abs(integral(fun,0,6E-7, 'ArrayValued',1)) % equation (2)
figure(1)
plot(t,yt) % plot of (1) vs time for t:(0 to 6*10^-7)
figure(2)
plot(f,q) % plot of magnitude of F (eq 2) vs frequency for f:(10^6 to 10^10)
r = q.^2 % square of magnitude of F
figure(3)
plot(f,r) % plot of square of magnitude of F
q2 = integral(@(t) fun(t).^2,3.8E9,4.3E9, 'ArrayValued',1) % integral of square of magnitude of F
figure(4)
plot(f,q2)
% code
end
Here's part of my code that includes what I was talking about above. Any input on what I could do to get the correct result will be highly appreciated!

Answers (2)

Walter Roberson
Walter Roberson on 10 Aug 2015
A) You need to increase your resolution beyond the default number of points that linspace() generates
B) your fun is imaginary. squaring it is still imaginary. The integral of an imaginary quantity is imaginary and dependent upon the integration path. You should have noticed the
Warning: Imaginary parts of complex X and/or Y arguments ignored
  2 Comments
imarquez
imarquez on 10 Aug 2015
I put the first integral in absolute value form though, wouldn't that make the second integral also in absolute value form? I just updated my code to include it in the second integral anyways.
How do I increase the resolution?
Walter Roberson
Walter Roberson on 10 Aug 2015
Your second integral is
integral(@(t) fun(t).^2,3.8E9,4.3E9, 'ArrayValued',1)
which does not use the value of the first integral. And your fun(t) is imaginary.

Sign in to comment.


Star Strider
Star Strider on 10 Aug 2015
See if substituting with this assignment does what you want:
q2 = integral(@(t) fun(t).*conj(fun(t)),3.8E9,4.3E9, 'ArrayValued',1);
  10 Comments
Star Strider
Star Strider on 11 Aug 2015
If double variables return NaN and 0, how do you know the uint64 values that do not are accurate? I would stay with double variables, and look closely at the code to see where the errors are if the results are not supposed to be 0. The minimum double-precision floating-point number is 2.2E-308.
Walter Roberson
Walter Roberson on 11 Aug 2015
So you are using uint64() just because uint64(0)/uint64(0) returns 0 instead of NaN? Why are you not using
X(isnan(X)) = 0;
replacing the NaN with 0
Or perhaps when you do the division A./B,
Bz = B;
Bz(Bz==0) = 1;
A./Bz
so that you divide by 1 instead of 0 in that location, getting 0 as the output ?

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!