integral with vectoric varying coeficient
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hello , i have a basic function
exp(-x.^2).*log(x).^2
which i integrate in a certain interval.
i want to multiply my basic function with a vectoric coefficient called coef_vec that varies with the interval.
so if the integral is at 5 my basic function whould be multiplied with coef_vec(5).
i know that its some how turning the integral into a loop.
Is it possible in matlab?
Thanks.
coef_vec=linspace(1,10,100)
fun = @(x)coef_vec*exp(-x.^2).*log(x).^2;
q = integral(fun,1,10);
0 commentaires
Réponse acceptée
Ameer Hamza
le 6 Mai 2020
Modifié(e) : Ameer Hamza
le 6 Mai 2020
You need to consider that value of x is not always an integer, it can be a floating-point too. In that case, coef_vec(x) will fail. You need to interpolate your vector to give value on that range. Try this code
coef_vec = linspace(1,10,100);
coef_fun = @(x) interp1(1:numel(coef_vec), coef_vec, x);
fun = @(x) coef_fun(x).*exp(-x.^2).*log(x).^2;
q = integral(fun,1,10);
5 commentaires
Ameer Hamza
le 7 Mai 2020
Modifié(e) : Ameer Hamza
le 7 Mai 2020
I have defined coef_fun as a function handle using interp1 so that it can be continually evaluated at all the points. If you just use interp1 alone, then you will again get a finite vector. The function handle allows the integral to evaluate interp1 at an arbitrary point.
Following code shows the difference between interp1 and polyfit
x = 0:0.1:10;
coef_vec = gensig('square', 2, 10, 0.1) + 0.1*rand(size(x)).';
coef_fun = @(xq) interp1(x, coef_vec, xq);
xq = linspace(0, 10, 200);
p = polyfit(x, coef_vec, 10);
figure;
plot(x, coef_vec, '+-', xq, polyval(p, xq), '-o')
title('Polyfit')
figure;
plot(x, coef_vec, '+-', xq, coef_fun(xq), '-o')
title('interp1')
Ameer Hamza
le 7 Mai 2020
Try this
data = load('Default Dataset4.csv');
x = data(:,1);
y = data(:,2);
[x, index] = unique(x);
coef_fun = @(xq) interp1(x, y(index), xq);
xq = linspace(3.5,23,100000);
plot(xq, coef_fun(xq))
title('interp1')
Plus de réponses (1)
David Hill
le 6 Mai 2020
Why not do it after computing the integral since it is a constant.
fun = @(x)coef_vec*exp(-x.^2).*log(x).^2;
q = integral(fun,1,10);
q=q*linspace(1,10,100);
Voir également
Catégories
En savoir plus sur Polynomials 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!