11 views (last 30 days)

I have a separable function f(x,y).how can i separate variables and have the function f as f(x,y)=g(x)*h(y) in MATLAB?

for example when f(x,y)=x^2*y^2 im looking for a way to have g(x)=x^2 and h(y)=y^2.

thank you for taking time to answer

sorry for my bad english

John D'Errico
on 17 Oct 2020

Edited: John D'Errico
on 18 Oct 2020

In a completely general sense, if you do not know IF the functions can be separated, then no it is probably impossible to do for a black box function f(x,y).

Do you ABSOLUTELY know the function can be split into pieces? Then my response is still a qualified no, since there is no unique solution. That is, suppose you find a solution such that g(x)*h(y) == f(x,y)?

Then it is also true that (g(x)*k)*(h(y)/k) is as fully valid a solution, for ANY non-zero, finite value of k.

So there is never a unique solution. But that is not really a problem. So how can we construct the solution?

If you ABSOLUTELY know a solution exists, and you are willing to accept any arbitrary solution based on the above argument, then you next need to supply a point (x0,y0), such that neither g(x) or h(y) is zero or singular. If you cannot find such a point, then you are in trouble. So suppose one exists. Any point will suffice.

We will arbritraily choose a scaling such that h(y0) == 1. Now, consider the function

g = @(x) f(x,y0);

If f is truly separable, then this is a function only of x.

Now, we can create a function h(y).

h = @(y) f(x0,y)/g(x0);

I can safely use / there, since we assume g(x) is scalar valued for scalar input x.

You should see this construction creates new functions. It is valid as long as my asssumptions hold true, i.e., the point (x0,y0) avoids any singularities or zeros of the function f, and that f(x,y) is truly separable.

For example, is h(y0) == 1? We know that

h(y0) = f(x0,y0) / g(x0) = f(x0,y0) / f(x0,y0) == 1

that is valid as long as you have chosen the point (x0,y0) as I indicated.

Can we use that construction for some arbitrary separable fnunction f(x,y)? I'll use symbolic tools to convince you it works.

syms x y

f = (x^2+1)*sin(y);

Now, clearly (x0,y0) == (0,pi/4) is a satisfactory point. There are no singularities or zeros in g or in h there.

x0 = 0;

y0 = pi/4;

g = subs(f,y,y0)

g =

(2^(1/2)*(x^2 + 1))/2

h = subs(f,x,x0)/subs(g,x0)

h =

2^(1/2)*sin(y)

There is a factor of sqrt(2) in there that will cancel out. As you can see, h(pi/4) is 1. Of course, had I been smarter since I know the functional forms in this, I could have chosen the point (x0,y0) as (0,pi/2), because I know that sin(pi/2) is 1. And that will recover g and h a little more cleanly.

x0 = 0;

y0 = pi/2;

g = subs(f,y,y0)

g =

x^2 + 1

h = subs(f,x,x0)/subs(g,x0)

h =

sin(y)

This also shows that g and h are not uniquely specified.

Again, as long as a solution exists, and we choose (x0,y0) wisely, this is provably valid, Be careful though, as there are cases where it will fail if you choose poorly for (x0,y0). Thus, consider what happens in my construction if f(x0,y0) == 0.

John D'Errico
on 18 Oct 2020

Opportunities for recent engineering grads.

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

Start Hunting!
## 0 Comments

Sign in to comment.