在Octave的Symbolic

时间:2019-05-16 14:12:56

标签: matrix octave sympy symbolic-math

我有一组函数,一组变量。我想将函数存储在向量中,将一阶偏导数存储在矩阵中,将二阶导数偏导数存储在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库工作。

1 个答案:

答案 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)。