f(s) =
integrate with the upper limit is a function
古いコメントを表示
Hello!
How to integrate a function on Matlab with the upper limit is a function, for exemple the following integral:

i tried this code:
U= vpa(int(f,s,0,t^2))
but it returns int(f,s,0,t^2)!!
is there any method to do it?
9 件のコメント
The Symbolic Math Toolbox appropriately considers
an otherwise undefined function.
Define it and you get an actual result —
syms s t
f(s) = 1 / (s^2 + 2*s + 1)
U = vpa(int(f,s,0,t^2))
.
L.GREEN
2024 年 7 月 31 日
移動済み: Star Strider
2024 年 8 月 4 日
Torsten
2024 年 7 月 31 日
移動済み: Star Strider
2024 年 8 月 4 日
Why i dont have the result of the integral?
MATLAB cannot compute an analytical antiderivative of f. And such an antiderivative would be necessary because the result is not a numerical value, but a function of the symbolic variable t.
L.GREEN
2024 年 7 月 31 日
移動済み: Star Strider
2024 年 8 月 4 日
Is there any other alternative to do it on Matlab?
If you want to keep t symbolic: no.
If you give t numerical values, you can use "integral" for evaluation.
f = @(s) sin(0.008414709848078965066525023216303*exp(-2*s.^(1/2)) + 0.00008414709848078965066525023216303*cos(s).^2 + 0.008414709848078965066525023216303) + 1;
F = @(t)integral(f,0,t^2);
tnum = 0:0.1:5;
Fnum = arrayfun(@(t)F(t),tnum);
plot(tnum,Fnum)
grid on
The int function is not doing the integration (or the subsequent substitution). Not all functions have analytic integrals, and yours is apparently one of them.
syms s t
f(s) = sin(0.008414709848078965066525023216303*exp(-2*s^(1/2)) + 0.00008414709848078965066525023216303*cos(s)^2 + 0.008414709848078965066525023216303) + 1
U1 = int(f,s)
% U = vpa(int(f,s,0,t^2))
% U = simplify(U, 100)
Consider instead integrating this numerically if you want a numeric result, using the integral function.
.
L.GREEN
2024 年 7 月 31 日
移動済み: Star Strider
2024 年 8 月 4 日
If you have working with a mix of scalar constants and scalar symbolic variables, then you can use ^ and / instead of .^ and ./ . You only need .^ and ./ if you are working with non-scalar values.
syms s t
f1 = sin(0.008414709848078965066525023216303*exp(-2*s^(1/2)) + 0.00008414709848078965066525023216303*cos(s)^2 + 0.008414709848078965066525023216303) + 1
f2 = sin(0.008414709848078965066525023216303*exp(-2*s.^(1/2)) + 0.00008414709848078965066525023216303*cos(s).^2 + 0.008414709848078965066525023216303) + 1
isAlways(f1 == f2)
The inconvient of the intergal function is that we need to use '.^ 'and/or './'
If you have a symbolic function and want to convert it to a function that can be used together with "integral", use "matlabFunction". Here, you will also get .^, ./ and .* operators.
Another way is to use the 'ArrayValues',true option for "integral" that passes one value for s to the function at a time. The disadvantage is that this option might slow down the integration:
f = @(s) sin(0.008414709848078965066525023216303*exp(-2*s^(1/2)) + 0.00008414709848078965066525023216303*cos(s)^2 + 0.008414709848078965066525023216303) + 1;
F = @(t) integral(f,0,t^2,'ArrayValued',1);
tnum = 0:0.1:5;
Fnum = arrayfun(@(t)F(t),tnum);
plot(tnum,Fnum)
grid on
回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Calculus についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



