integrate function
古いコメントを表示
Hi!!!
I would like to ask if anyone knows what's the appropriate way to calculate the integral of this function
function out = Gr(u,x,Kt,i)
out= exp(-(u.^2)).*frustration_function2(u,x,Kt,i);
end
The integrating variable is u, and the limits are [1e-4,1e4]
Thanks!!
回答 (2 件)
Andrei Bobrov
2011 年 8 月 25 日
variant
x = ...;
Kt = ...;
i = ...;
quad(@(u)exp(-(u.^2)).*frustration_function2(u,x,Kt,i),
1e-4,1e4)
7 件のコメント
kostas
2011 年 8 月 25 日
Walter Roberson
2011 年 8 月 25 日
What error does it give?
Are you taking in to account that for quad(), "The function y = fun(x) should accept a vector argument x and return a vector result y, the integrand evaluated at each element of x." ?
kostas
2011 年 8 月 25 日
Walter Roberson
2011 年 8 月 25 日
As I noted above, quad() will pass in vectors for the first argument and expect a vector result. quad() does not, however, define how long the vector will be; it could even be different lengths on different calls.
Your anonymous function in intd will be passed a vector, which it will pass in as "x" to d(). d() will then call quad, which will pass a vector in to the anonymous function there, dummy variable "u". But you have no reason to expect that the length of the vector quad created for "u" will be the same as the length of the vector quad created in the outer call for "x".
You would also run in to problems if Kt or i are not scalars.
You are going to have to recode d, such as to
d = @(x,Kt,i) arrayfun(@(X) quad(@u) u+X+Kt+i,0,1), x);
kostas
2011 年 8 月 25 日
Andrei Bobrov
2011 年 8 月 25 日
Hi Walter! Your last comment - the correct answer.
Bellow example, with use Maple Toolbox.
>> intd=@(Kt,i1)quad(@(x)exp(x).*arrayfun(@(X)quad(@(u)u+X+Kt+i1,0,1),x),0,1)
intd =
@(Kt,i1)quad(@(x)exp(x).*arrayfun(@(X)quad(@(u)u+X+Kt+i1,0,1),x),0,1)
>> intd(3,3)
ans =
12.169
>> syms Kt i1 x u
int(exp(x)*int(u+x+Kt+i1,u,0,1),x,0,1)
ans =
1/2 - Kt - i1 + 1/2 exp(1) + exp(1) Kt + exp(1) i1
>> double(subs(ans,[Kt,i1],[3,3]))
ans =
12.169
>>
Walter Roberson
2011 年 8 月 25 日
Ah good... it was around 4 AM when I wrote that, so I'm glad to see that I didn't do much worse than miss a "(" in the inner anonymous function!
kostas
2011 年 8 月 25 日
0 投票
1 件のコメント
Walter Roberson
2011 年 8 月 25 日
The results of the quad cannot be scalar. My sentence "The function y = fun(x) should accept a vector argument x and return a vector result y, the integrand evaluated at each element of x." was a direct quote from the reference documentation for quad. quad does not just do one evaluation at a time: it selects a number of x and requests that the fun do the evaluation with respect to each of them and return the vector of corresponding answers.
カテゴリ
ヘルプ センター および File Exchange で Programming についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!