Info

This question is closed. Reopen it to edit or answer.

How can I use integral function this way?

4 views (last 30 days)
Aparicio Nieto
Aparicio Nieto on 22 Mar 2017
Closed: MATLAB Answer Bot on 20 Aug 2021
function [mat_uni] = mat_unif(i,j,k,s,ro,h_b,x_b1,x_b2)
fi_jk = 2./sqrt(3).*pi.^(-1./4).*2.^(j./2).*(1-(2.^j.*x-k).^2).*exp(-(2.^j.*x-k).^2./2);
fi_is = 2./sqrt(3).*pi.^(-1./4).*2.^(i./2).*(1-(2.^i.*x-s).^2).*exp(-(2.^i.*x-s).^2./2);
mat_uni_der = @(x) 2.*ro.*h_b.*fi_jk.*fi_is;
mat_uni = integral(mat_uni_der, x_b1, x_b2);
end
The problems when integrating this function come from calling fi_jk and fi_is functions, since matlab does not recognize x as a variable that will later be used by integral().
If I delete the 'x' as an input, I am told that there are not enough input arguments. I have tried to define x using 'syms x', but other errors appeared: 'Input function must return 'double' or 'single' values. Found 'sym''.
Could it be useful to use the function handle? If so, how to use it?
Also, I would like to know what "opstruct" is used for.
Thank you very much for the possible answers.
  2 Comments
Jan
Jan on 22 Mar 2017
Edited: Jan on 22 Mar 2017
What is "x" in the inputs? A vector or a symbolic variable?
Aparicio Nieto
Aparicio Nieto on 22 Mar 2017
Edited: Aparicio Nieto on 23 Mar 2017
It is a variable, since I want the integral function to give me a numerical value, but I do not know how to define it without having to define it as an input argument (it does not come from the main program).

Answers (2)

Walter Roberson
Walter Roberson on 23 Mar 2017
function [mat_uni] = mat_unif(i,j,k,s,ro,h_b,x_b1,x_b2)
fi_jk = @(x) 2./sqrt(3).*pi.^(-1./4).*2.^(j./2).*(1-(2.^j.*x-k).^2).*exp(-(2.^j.*x-k).^2./2);
fi_is = @(x) 2./sqrt(3).*pi.^(-1./4).*2.^(i./2).*(1-(2.^i.*x-s).^2).*exp(-(2.^i.*x-s).^2./2);
mat_uni_der = @(x) 2.*ro.*h_b.*fi_jk(x).*fi_is(x);
mat_uni = integral(mat_uni_der, x_b1, x_b2);
end

Roger Stafford
Roger Stafford on 23 Mar 2017
I think it will work if you simply substitute those two expressions for fi_jk and fi_is, respectively, into the anonymous function mat_uni_der. It will make a very long line, but who cares about long lines? Getting it to work is what counts.
  2 Comments
Aparicio Nieto
Aparicio Nieto on 23 Mar 2017
Yes! It works if I do what you say, but now I want to integrate a function that is diff(f) and writing all this stuff would be terrible. I have tried to use syms, but it has been all night working and I have not seen any result yet.
Thank you very much for your answer!
Walter Roberson
Walter Roberson on 23 Mar 2017
You could do numeric differentiation on a sampling of function values. Or you can use
syms x
dx = diff( mat_uni_der(x), x)

This question is closed.

Community Treasure Hunt

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

Start Hunting!