Убедитесь, что MATLAB не пересчитывает символьное выражение

Я строю (свою первую ...) программу MatLab, она должна символически дифференцировать уравнения, а затем использовать это решение много раз (с разными числовыми входами).

Я не хочу, чтобы он пересчитывал символьную дифференциацию каждый раз, когда ему нужно ввести новый набор числовых значений. Это, вероятно, значительно увеличило бы время, затрачиваемое на запуск этой программы (которая, учитывая ее характер, числовой оптимизатор, вероятно, уже будет часами).

У меня вопрос, как я могу структурировать свою программу так, чтобы она не пересчитывала символьную дифференциацию?

Рассматриваемый класс:

function [ result ] = GradOmega(numX, numY, numZ, numMu)
syms x y z mu
omega = 0.5*(x^2+y^2+z^2) + (1-mu)/((x+mu)^2+y^2+z^2)^0.5 + mu/((x+mu-1)^2+y^2+z^2)^0.5;
symGradient = gradient(omega);
%//Substitute the given numeric values back into the funtion
result = subs(symGradient, {x,y,z,mu}, {numX, numY, numZ, numMu});
end

Я знаю, что мог бы просто символически вычислить производную, а затем скопировать и вставить ее в код, например,

gradX = x + ((2*mu + 2*x)*(mu - 1))/(2*((mu + x)^2 + y^2 + z^2)^(3/2)) - (mu*(2*mu + 2*x - 2))/(2*((mu + x - 1)^2 + y^2 + z^2)^(3/2));
gradY = y - (mu*y)/((mu + x - 1)^2 + y^2 + z^2)^(3/2) + (y*(mu - 1))/((mu + x)^2 + y^2 + z^2)^(3/2);
gradZ = z - (mu*z)/((mu + x - 1)^2 + y^2 + z^2)^(3/2) + (z*(mu - 1))/((mu + x)^2 + y^2 + z^2)^(3/2);

Но тогда мой код немного загадочный, что является проблемой в общем проекте. Здесь есть связанный запрос:http://uk.mathworks.com/matlabcentral/answers/53542-oop-how-to-avoid-recalculation-on-dependent-properties-i-hope-a-mathwork-developer-could-give-me-a Но я боюсь, что не смогу следовать коду. Также я намного лучше знаком с Java и Python, если это поможет объяснить что-либо.

Ответы на вопрос(1)

Ваш ответ на вопрос