Matlab symbolic function conversion without dot for matrix operation
5 ビュー (過去 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 で Number Theory についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!