Error in @(t)(yt.*exp(-sqrt(-1).*omega.*t));Error in integralCalc/iterateScalarValued (line 314) fx = FUN(t);
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
imarquez
le 6 Août 2015
Commenté : Walter Roberson
le 7 Août 2015
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 commentaires
Réponse acceptée
Star Strider
le 6 Août 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 commentaires
Star Strider
le 7 Août 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.)
Plus de réponses (1)
Walter Roberson
le 6 Août 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 commentaires
Walter Roberson
le 7 Août 2015
Yes, you have 2*pi*f and f is length 100 so the outcome is length 100
Voir également
Catégories
En savoir plus sur Calculus dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!