diff function taking very long time while differentiating symbolic expressions
3 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
M Al Mamun
il 23 Lug 2020
Commentato: M Al Mamun
il 24 Lug 2020
Hello all,
I need to make a Jacobian matrix where both the function (f) array and the variable (y) array are of 5420-by-1. f is an array of symbolic expressions. The sample code is below.
for i=1:5420
for j=1:5420
jacobian(i,j)=diff(f(i), y(j)); % Finding the jacobian element
end
end
After running a few iterations, it seems like it will take more than 5 days. Is there any other way to do that so it should take less time? Thanks in advance.
2 Commenti
Risposta accettata
Walter Roberson
il 23 Lug 2020
Potentially faster:
numf = length(f);
numy = length(y);
Jac = zeros(numf, numy, 'sym');
for i = 1 : numf
thisf = f(i);
thesevars = symvar(thisf);
[~, varidx] = ismember(thesevars, y); %convert variable names to indices
for j = varidx
Jac(i, j) = diff(thisf, y(j));
end
end
What this does is query each f element for the unbound variables present in it, and then only tries to differentiate with respect to those variables.
In the form written it will fail if there are unbound variables that are not listed in y; the fix would not be difficult.
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Symbolic Variables, Expressions, Functions, and Preferences in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!