Matlab symbolic function conversion without dot for matrix operation
1 次查看(过去 30 天)
显示 更早的评论
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) eval(f)
If I do that, the anonymous function will treat the multiplication as dot product once again :(
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!
0 个评论
回答(1 个)
Yeshwanth Devara
2016-11-16
编辑:Yeshwanth Devara
2016-11-17
I am from MathWorks and I have notified the respective team about this limitation. One workaround for now is to use regex on the existing function and create matrix power as follows:
x=sym('x')
f=- x^3/6 + x
g=matlabFunction(f)
newg=str2func( regexprep(func2str(g),'\.(\*|\^)','$1') )
For inline solution:
x=sym('x')
f=- x^3/6 + x
g= str2func( regexprep(func2str(matlabFunction(f)),'\.(\*|\^)','$1') )
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!