changeset 696:7c16b5af8d98 feature/quantumTriangles

Add Jonatans symbolic lifehax
author Ylva Rydin <ylva.rydin@telia.com>
date Thu, 05 Oct 2017 18:04:23 +0200
parents ba0d31ce4121
children 8434063ed162 0de70ec8bf60
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	Thu Oct 05 18:04:23 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	Thu Oct 05 18:04:23 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	Thu Oct 05 18:04:23 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