Finding a definite integral
14 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
I want to find the definite integral ,where u and kare both a 1x100 vector and .I want to use the Matlab command "integral" to do it. But to use it, I need the integrand to be a fucntion. The u and k I have are not functions. Is there any way to find this integral? Any help wil be appreciated.
2 Commenti
VBBV
il 5 Dic 2023
Spostato: VBBV
il 7 Dic 2023
u and k are both functions of x. But I only know the values of u and k at some points of x.
you can interpolate missing values for u and k by only limited values of x
u = randn(1, 100); % assuming all known values for x
K = randn(1, 100); % assuming all known values for x
X = linspace(0,1,101);
f = @(x) 1.5*exp(-2*(1-x));
for k = 1:length(X)-1
F(k) = integral(f,0,X(k+1));
end
S = (u+K)*F.' % integral sum
Star Strider
il 5 Dic 2023
Spostato: Star Strider
il 6 Dic 2023
The vectors —
u = [0.1600 0.1600 0.1599 0.1599 0.1597 0.1596 0.1594 0.1592 ...
0.1590 0.1587 0.1584 0.1581 0.1577 0.1573 0.1569 0.1564 ...
0.1559 0.1554 0.1548 0.1542 0.1536 0.1529 0.1523 0.1515 ...
0.1508 0.1500 0.1492 0.1483 0.1475 0.1465 0.1456 0.1446 ...
0.1436 0.1426 0.1415 0.1404 0.1393 0.1381 0.1369 0.1357 ...
0.1344 0.1331 0.1318 0.1304 0.1290 0.1276 0.1261 0.1247 ...
0.1231 0.1216 0.1200 0.1184 0.1167 0.1151 0.1133 0.1116 ...
0.1098 0.1080 0.1062 0.1043 0.1024 0.1005 0.0985 0.0965 ...
0.0945 0.0924 0.0903 0.0882 0.0860 0.0838 0.0816 0.0793 ...
0.0771 0.0747 0.0724 0.0700 0.0676 0.0651 0.0627 0.0601 ...
0.0576 0.0550 0.0524 0.0498 0.0471 0.0444 0.0417 0.0389 ...
0.0361 0.0333 0.0304 0.0275 0.0246 0.0216 0.0186 0.0156 ...
0.0125 0.0095 0.0063 0.0032 0];
k = [0.7543 0.7543 0.7541 0.7537 0.7532 0.7525 0.7517 ...
0.7507 0.7496 0.7483 0.7469 0.7453 0.7436 0.7417 ...
0.7397 0.7375 0.7352 0.7328 0.7301 0.7274 0.7245 ...
0.7214 0.7182 0.7148 0.7113 0.7076 0.7038 0.6998 ...
0.6957 0.6914 0.6870 0.6824 0.6777 0.6728 0.6677 ...
0.6626 0.6572 0.6517 0.6461 0.6403 0.6343 0.6282 ...
0.6219 0.6155 0.6089 0.6022 0.5953 0.5883 0.5811 ...
0.5737 0.5662 0.5585 0.5507 0.5427 0.5346 0.5263 ...
0.5178 0.5092 0.5004 0.4915 0.4824 0.4731 0.4637 ...
0.4541 0.4444 0.4345 0.4244 0.4142 0.4038 0.3933 ...
0.3825 0.3717 0.3606 0.3494 0.3380 0.3265 0.3148 ...
0.3029 0.2909 0.2786 0.2663 0.2537 0.2410 0.2281 ...
0.2150 0.2018 0.1884 0.1748 0.1611 0.1472 0.1331 ...
0.1188 0.1044 0.0898 0.0750 0.0600 0.0449 0.0295 ...
0.0140 -0.0016 0];
.
Risposta accettata
Torsten
il 5 Dic 2023
Modificato: Torsten
il 6 Dic 2023
x = linspace(0,1,101);
u = [0.1600 0.1600 0.1599 0.1599 0.1597 0.1596 0.1594 0.1592 ...
0.1590 0.1587 0.1584 0.1581 0.1577 0.1573 0.1569 0.1564 ...
0.1559 0.1554 0.1548 0.1542 0.1536 0.1529 0.1523 0.1515 ...
0.1508 0.1500 0.1492 0.1483 0.1475 0.1465 0.1456 0.1446 ...
0.1436 0.1426 0.1415 0.1404 0.1393 0.1381 0.1369 0.1357 ...
0.1344 0.1331 0.1318 0.1304 0.1290 0.1276 0.1261 0.1247 ...
0.1231 0.1216 0.1200 0.1184 0.1167 0.1151 0.1133 0.1116 ...
0.1098 0.1080 0.1062 0.1043 0.1024 0.1005 0.0985 0.0965 ...
0.0945 0.0924 0.0903 0.0882 0.0860 0.0838 0.0816 0.0793 ...
0.0771 0.0747 0.0724 0.0700 0.0676 0.0651 0.0627 0.0601 ...
0.0576 0.0550 0.0524 0.0498 0.0471 0.0444 0.0417 0.0389 ...
0.0361 0.0333 0.0304 0.0275 0.0246 0.0216 0.0186 0.0156 ...
0.0125 0.0095 0.0063 0.0032 0];
k = [0.7543 0.7543 0.7541 0.7537 0.7532 0.7525 0.7517 ...
0.7507 0.7496 0.7483 0.7469 0.7453 0.7436 0.7417 ...
0.7397 0.7375 0.7352 0.7328 0.7301 0.7274 0.7245 ...
0.7214 0.7182 0.7148 0.7113 0.7076 0.7038 0.6998 ...
0.6957 0.6914 0.6870 0.6824 0.6777 0.6728 0.6677 ...
0.6626 0.6572 0.6517 0.6461 0.6403 0.6343 0.6282 ...
0.6219 0.6155 0.6089 0.6022 0.5953 0.5883 0.5811 ...
0.5737 0.5662 0.5585 0.5507 0.5427 0.5346 0.5263 ...
0.5178 0.5092 0.5004 0.4915 0.4824 0.4731 0.4637 ...
0.4541 0.4444 0.4345 0.4244 0.4142 0.4038 0.3933 ...
0.3825 0.3717 0.3606 0.3494 0.3380 0.3265 0.3148 ...
0.3029 0.2909 0.2786 0.2663 0.2537 0.2410 0.2281 ...
0.2150 0.2018 0.1884 0.1748 0.1611 0.1472 0.1331 ...
0.1188 0.1044 0.0898 0.0750 0.0600 0.0449 0.0295 ...
0.0140 -0.0016 0];
uk = u+k;
fun = @(t)interp1(x,uk,t).*1.5.*exp(-2*(1-t));
I = integral(fun,0,1)
I2 = trapz(x,uk.*1.5.*exp(-2*(1-x)))
5 Commenti
Torsten
il 6 Dic 2023
Modificato: Torsten
il 6 Dic 2023
Thank you very much for your kind reply and providing another method to evaluate the integral. trapz is a good method to do it. I will try it. Which method has a better approximation?
If a function is only defined at discrete points, it is reasonable to use an integration method that only needs the values of the function at these discrete points. "trapz" is a method that assumes that the function behaves piecewise linear between the discrete values given. If you supply an interpolation method for the use of "integral" that approximates your discrete values in between with higher accuracy than linear interpolation, you will get a better approximation. But usually the interpolation method is quite arbitrary because you don't know in general how u+k behaves between the discrete values. Thus higher accuracy is hard to achieve in this case (and cannot be verified).
If I use ``integral" and want to separate ``interp1" and the exponential function, can I do the following?
fun1=@(t)interp1(x,uk,t);
fun2=@(t)1.5.*exp(-2*(1-t));
fun3=@(t)fun1(t).*fun2(t);
I=integral(fun3,0,1);
Yes, you can.
For interp1, do I need to discrete t?
If you use "integral", you must provide a function that is defined for all values of x in the interval [0 1]. The easiest way is to use an interpolation function, thus using "interp1". Then instead of discrete values uk(xi) at discrete points xi you now have a function uk(x) that coincides with the array uk at the discrete points, but can be used as input function to "integral".
Più risposte (2)
Chunru
il 5 Dic 2023
Assuming that u and k are constant vectors:
u = randn(1, 100);
k = randn(1, 100);
syms x
f = (u+k)*int(1.5*exp(-2*(1-x)), [0 1])
double(f)
5 Commenti
Paul
il 5 Dic 2023
Modificato: Paul
il 5 Dic 2023
Hi Sharon,
It seems like we want to compute the following integral
syms x u(x) k(x) w(x)
I = int((u(x)+k(x))*w(x),x,0,1,'Hold',true)
w(x) has a known form
w(x) = 1.5*exp(-2*(1-x));
which can be substituded into the expression for I
I = subs(I)
Suppose for now we know the functional form of u(x) and k(x), for example
u(x) = x, k(x) = x^2
Sub those expressions into I and evaluate the integral
I = subs(I)
release(I)
Now, compute the integral numerically, assuming those same known expressions for u(x) and k(x)
clear
w = @(x) 1.5*exp(-2*(1-x));
u = @(x) x;
k = @(x) x.^2;
integral(@(x) (u(x)+k(x)).*w(x),0,1)
Same result.
But in this question we only have u and k evaluated at discrete set of values of x. For example
xval = linspace(0,1,100);
u = u(xval);
k = k(xval);
Now, to evaluate the integral we need to have some way to approximate u(x) and k(x) based on those vectors of points in order to evaluate the integrand. Here, I'm using interp1 with linear interplolation, but you may want to explore other options after plotting u and k and testing various options, which could be different for u(x) and k(x), to make sure the interpolated values are a a good approximation to the functions u(x) and k(x) (hopefully you have some idea what they should look like). The key is that the interpolation has to be performed in the evaluation of the integrand.
integral(@(x) (interp1(xval,u,x)+interp1(xval,k,x)).*w(x),0,1)
0 Commenti
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!