Search code examples
matlabmatrixmatrix-multiplicationsymbolic-math

Matlab symbolic function conversion without dot for matrix operation


When converting symbolic expression to matlabFunction, expression like

x=sym('x')
f=- x^3/6 + x
g=matlabFunction(f)

-> @(x)x-x.^3.*(1.0./6.0) 

which is not what I want because x is gonna be a matrix and my application requires actual matrix multiplication such as x^3 instead of the dot product form of x.^3

The only way to get it working is to use anonymous function, i.e.

g=@(x) - x^3/6 + x

->@(x)-x^3/6+x

However, the issue with anonymous function is that I cannot use substitution but to type the entire formulation, i.e.

g=@(x) f 

-> @(x)f  which shows that expression substitution does not work

In short, I will need to solve either one of the technical difficulties: (1) If I use matlabFunction, how do I remove all the dot after the conversion? or (2) If I use anonymous function, how do I bypass typing the symbolic expression if I have already defined 'f' for the expression?

I am totally lost here and I hope someone familiar with matlab can give me 2 cents.

Thank you!


Solution

  • You can convert the sym object to a string when calculating the anonymous function:

    g=@(x)eval(char(f))
    

    Alternatively, you can use the following code

    h=eval(['@(x)' char(f)])
    

    instead of matlabFunction