Merging/Multiplying Functions

Hello, I haven't figured out to find a way to create a new function out of multiplying 2 functions, for example:
fun1 = @(x) sin(x);
fun2 = @(x) cos(x);
*I want to create fun3 out of them so that -*
fun3 = @(x) sin(x)*cos(x)
The reason I'm asking this is that if I define fun3 as-
fun3 = @(x) fun1(x)*fun2(x)
and obviously it doesn't turn into-
fun3=@(x) sin(x)*cos(x)
thus I can't integrate fun3-
integral(fun3,0,5) ~= int(sin(x)*cos(x),x,0,5)
Matlab just says-
Error using *
Inner matrix dimensions must agree.
Thank you

 Accepted Answer

You need to use element-wise operations here, using the dot (.) operator for element-wise multiplication, (.*).
This works:
fun1 = @(x) sin(x);
fun2 = @(x) cos(x);
fun3 = @(x) fun1(x).*fun2(x);
int_fun3 = integral(fun3, 0, 5)
int_fun3 =
459.7679e-003
See the documentation on Array vs. Matrix Operations for a full discussion.

6 Comments

Thanks, didn't realize that was the issue.
My pleasure.
Many people don’t, and I suspect everyone has encountered the problem themselves at least once. (I have.)
Great Answer. I've also been confused by this for a while. You saved me!
Thank you!
Does this method work with 2 dimensional functions:
fun1 = @(x,y) sin(x)*sin(y);
fun2 = @(x,y) xy;
fun3 = @(x,y) fun1(x,y).*fun2(x,y);
integral2(fun3, 0,1,0,1)
The easiest way to find out is to first fully vectorise the constituent equations, and then try it —
fun1 = @(x,y) sin(x).*sin(y);
fun2 = @(x,y) x.*y;
fun3 = @(x,y) fun1(x,y).*fun2(x,y);
int_fun3 = integral2(fun3, 0,1,0,1)
int_fun3 = 0.0907
It seems that it does!
.

Sign in to comment.

More Answers (0)

Categories

Asked:

on 19 Apr 2017

Commented:

on 14 Apr 2024

Community Treasure Hunt

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

Start Hunting!