Error in @(t)(yt.*exp(-sqrt(-1).*omega.*t));Error in integralCalc/iterateScalarValued (line 314) fx = FUN(t);
2 views (last 30 days)
Show older comments
Can someone help me understand what the error in this code is please?
if true
format long
a = 1
b = 3*10.^-7
c = 5*10.^-8
f0 = 4*10.^9
sigma = 0.2
t0 = 0
tmax = 2.*b
f = linspace(10.^6, 10.^10)
omega = 2.*pi.*f
omega0 = 2.*pi.*f0
yt = a.*exp((-(t-b).^2)/((2*c).^2))
figure(1)
plot(t,yt)
fun = @(t) (yt.*exp(-sqrt(-1).*omega.*t))
q = integral(fun,0,6*10^-7)
% code
end
I'm trying to integrate fun and have tried many ways but I still cant get it.
0 Comments
Accepted Answer
Star Strider
on 6 Aug 2015
This runs. You didn’t define ‘t’ in the code you posted, so I created it. Otherwise, I changed your integral call to specify your function to be 'ArrayValued'. I have no idea if it produces the result you want, so experiment with it:
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); % Created To Define ‘t’
omega = 2.*pi.*f;
omega0 = 2.*pi.*f0;
yt = a.*exp((-(t-b).^2)./((2*c).^2));
fun = @(t) (yt.*exp(-1i.*omega.*t));
q = integral(fun,0,6E-7, 'ArrayValued',1);
figure(1)
plot(t,yt)
6 Comments
Star Strider
on 7 Aug 2015
My pleasure!
You have to define the function you want to integrate specifically in the integrand. (Your function is complex, so note that squaring it is not the same as multiplying it by its complex-conjugate, or taking its absolute value.)
More Answers (1)
Walter Roberson
on 6 Aug 2015
Your omega is 1 x 100. For omega.*t to work, your t would have to be either scalar or 1 x 100. But http://www.mathworks.com/help/matlab/ref/integral.html#inputs
For scalar-valued problems, the function y = fun(x) must accept a vector argument, x, and return a vector result, y.
That is, the value passed in (your "t") will be a vector of arbitrary length and you need to return a value for each entry in "t". But your omega is length 100 so which one value do you want to return?
Perhaps you want each integral call to be a single t and that you return one value for each omega. If so then pass 'ArrayValued', 1 to the int() call:
q = integral(fun,0,6*10^-7, 'ArrayValued', 1);
I note, though, that you define yt in terms of t, and you do so at a point that t is not defined. Is the t there intended to be the same t as in fun? If so then you need to define yt as a function and invoke it as a function:
yt = @(t) a.*exp((-(t-b).^2)/((2*c).^2));
fun = @(t) (yt(t).*exp(-sqrt(-1).*omega.*t));
q = integral(fun,0,6*10^-7, 'ArrayValued', 1);
This will return q the same size as omega; the values in q will be complex.
2 Comments
See Also
Categories
Find more on Waveform Generation in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!