You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
862 B
29 lines
862 B
function [SymExpOut,SubExpArray] = OptimiseAlgebra(SymExpIn,SubExpName) |
|
|
|
% Loop through symbolic expression, identifying repeated expressions and |
|
% bringing them out as shared expression or sub expressions |
|
% do this until no further repeated expressions found |
|
% This can significantly reduce computations |
|
|
|
syms SubExpIn SubExpArray ; |
|
|
|
SubExpArray(1,1) = 'invalid'; |
|
index = 0; |
|
f_complete = 0; |
|
while f_complete==0 |
|
index = index + 1; |
|
SubExpIn = [SubExpName,'(',num2str(index),')']; |
|
SubExpInStore{index} = SubExpIn; |
|
[SymExpOut,SubExpOut]=subexpr(SymExpIn,SubExpIn); |
|
for k = 1:index |
|
if SubExpOut == SubExpInStore{k} |
|
f_complete = 1; |
|
end |
|
end |
|
if f_complete || index > 100 |
|
SymExpOut = SymExpIn; |
|
else |
|
SubExpArray(index,1) = SubExpOut; |
|
SymExpIn = SymExpOut; |
|
end |
|
end |