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
diff -r f6ada1719420 -r 489bea7fc33f diffSymfun.m
--- /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
diff -r f6ada1719420 -r 489bea7fc33f matlabFunctionSizePreserving.m
--- /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
diff -r f6ada1719420 -r 489bea7fc33f subsSymfun.m
--- /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