Mercurial > repos > public > sbplib
changeset 599:489bea7fc33f feature/grids
Add some functions to make symbolic life easier
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Tue, 26 Sep 2017 15:38:25 +0200 |
parents | f6ada1719420 |
children | 0da1c913a611 |
files | diffSymfun.m matlabFunctionSizePreserving.m subsSymfun.m |
diffstat | 3 files changed, 33 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/diffSymfun.m Tue Sep 26 15:38:25 2017 +0200 @@ -0,0 +1,7 @@ +% Differentiates a symbolic function like diff does, but keeps the function as a symfun +function g = diffSymfun(f, varargin) + assertType(f, 'symfun'); + + args = argnames(f); + g = symfun(diff(f,varargin{:}), args); +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/matlabFunctionSizePreserving.m Tue Sep 26 15:38:25 2017 +0200 @@ -0,0 +1,12 @@ +% Takes a symfun and makes a better anonymous function +function fun = matlabFunctionSizePreserving(f) + mf = matlabFunction(f); + args = argnames(f); + + funStr = func2str(mf); + for i = 1:length(args) + funStr = [funStr sprintf(' + 0*%s', toString(args(i)))]; + end + + fun = str2func(funStr); +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/subsSymfun.m Tue Sep 26 15:38:25 2017 +0200 @@ -0,0 +1,14 @@ +% Subs for a symfun +% f remains a symbolic function. If any of it's arguments is eliminated +% it is removed from the argument list while preserving the order of the +% other arguments +function f = subsSymfun(f, old, new) + args = argnames(f); + + newExpr = subs(f, old, new); + vars = symvar(subs(args, old, new)); + + newArgs = args(ismember(args,vars)); + + f = symfun(newExpr, newArgs); +end \ No newline at end of file