我有一组函数,一组变量。我想将函数存储在向量中,将一阶偏导数存储在矩阵中,将二阶导数偏导数存储在3维矩阵中。这样(不要测试,它就行不通,只是我打算做的一个例子):
pkg load symbolic
syms x y
f(x,y) = x^2 + y
g(x,y) = x + y^2
vec = [f;g]
u = [x,y]
dVec = sym(zeros(length(vec),length(u)))
d2Vec = sym(zeros(length(vec),length(u),length(u)))
for i = 1:length(vec)
for j = 1:length(u)
###First derivative
dVec(i,j) = diff(vec(i),u(j));
for k = 1:length(u)
###Second derivative
d2Vec(i,j,k)=diff(dVec(i,j),u(k));
endfor
endfor
endfor
您是否想到了一个不会使中间运算相乘的工作区域,以便进行进一步的计算,例如自动生成功能文件?
符号计算功能来自Octave和MatLab的“ Symbolic”库,该库使用“ sympy” python库工作。
答案 0 :(得分:0)
最后,一个简单的乘法就可以解决问题:
pkg load symbolic
syms x y
f(x,y) = x^2 + y
g(x,y) = x + y^2
vec = [f;g]
u = [x,y]
dVec = sym(zeros(length(vec),length(u)))
d2Vec = [sym(zeros(length(vec),length(u)*length(u)))]
for i = 1:length(vec)
for j = 1:length(u)
###First derivative
dVec(i) = diff(vec(i),u(j))
for k = 1:length(u)
###Second derivative
d2Vec(i,j*k)=diff(dVec(i,j),u(k))
endfor
endfor
endfor
使用完全相同的索引使用方式,前提是您不会超出第二个索引的上限(此处为j)。