【发布时间】:2015-02-15 12:10:09
【问题描述】:
我正在构建(我的第一个...)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。
【问题讨论】:
标签: matlab optimization symbolic-math differential-equations