Error in @(t)(yt.*e​xp(-sqrt(-​1).*omega.​*t));Error in integralCa​lc/iterate​ScalarValu​ed (line 314) fx = FUN(t);

1 回表示 (過去 30 日間)
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.

採用された回答

Star Strider
Star Strider 2015 年 8 月 6 日
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 件のコメント
imarquez
imarquez 2015 年 8 月 7 日
Oh ok so its not necessary to define the squared function before putting it into the next integral? That's interesting and really helpful! Thank you!
Star Strider
Star Strider 2015 年 8 月 7 日
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.)

サインインしてコメントする。

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2015 年 8 月 6 日
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 件のコメント
imarquez
imarquez 2015 年 8 月 7 日
Both of you helped me achieve what I wanted to get out of the code, but can you tell me why omega is length 100? Is it because it is multiplied by f which is going to be length 100?
Walter Roberson
Walter Roberson 2015 年 8 月 7 日
Yes, you have 2*pi*f and f is length 100 so the outcome is length 100

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeCalculus についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by