integral with vectoric varying coeficient

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);

 Réponse acceptée

Ameer Hamza
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

fima v
fima v le 6 Mai 2020
Hello Ameer, actually my coefficient has a filter like shape and polifit if not work for it
because of the blank space of the filter.
I get a polinomial wich gives me a pointy hill ratther than a filter plot as shown bellow.
and i tried polyfit of 5 order
What could be done to interpolate such filter shape?
Thanks.
Ameer Hamza
Ameer Hamza le 6 Mai 2020
polyfit, gives a single polynomial curve. interp1() interpolate locally. Please try to see if interp1() gives the required interpolation behavior?
fima v
fima v le 7 Mai 2020
Hello Ameer, but i need a continues formula to use in my integral.
vq = interp1(x,v,xq)
how do i convert my vq data into a contines formula?
Thanks.
Ameer Hamza
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')
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')

Connectez-vous pour commenter.

Plus de réponses (1)

David Hill
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);

1 commentaire

fima v
fima v le 6 Mai 2020
because i want the coeffecient to be tied to the interval
so it needs to be during the integration.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by