Algorithm 极大值-符号变量替换,更具算法性

Algorithm 极大值-符号变量替换,更具算法性,algorithm,substitution,maxima,Algorithm,Substitution,Maxima,我想用算法替换m前面的数字,因为它们是1,2,3,但当我把mi放进去时,它会把它识别为不同的变量,所以我需要指出SSUB(“mi”,“m[I]”,J[I,1]),因为I与m是分开的。 有什么建议吗?好的,这里有一种方法可以用v(k)代替v[k]。我认为这没关系,因为Matlab可以识别数组下标的括号 %o5是您在上面给出的输入(作为字符串)。我已经解析了%o7中的字符串,并提取了%o10中的下标变量列表(通过子列表和子变量)。在此基础上,我在%o14中创建了一个列表v(k)=v[k],然后将其替

我想用算法替换m前面的数字,因为它们是1,2,3,但当我把mi放进去时,它会把它识别为不同的变量,所以我需要指出SSUB(“mi”,“m[I]”,J[I,1]),因为I与m是分开的。
有什么建议吗?

好的,这里有一种方法可以用
v(k)
代替
v[k]
。我认为这没关系,因为Matlab可以识别数组下标的括号

%o5是您在上面给出的输入(作为字符串)。我已经解析了%o7中的字符串,并提取了%o10中的下标变量列表(通过
子列表
子变量
)。在此基础上,我在%o14中创建了一个列表
v(k)=v[k]
,然后将其替换回%o15中解析的表达式中

我希望这是朝着对你有帮助的方向发展。您可能仍然需要修改此方法以获得所需的内容,但无论如何,我将重复我对字符串处理的强烈建议。如果还有更多的事情要做,那么几乎可以肯定的是,使用表达式比使用字符串更好

expJ:listarray(J);

(expJ)  ["-(l[1]*l[3]*m[3]*('diff(r[3](t),t,1))^2*sin(r[3](t)-r[1](t))+(2*l[1]*l[2]*m[3]+l[1]*l[2]*m[2])*('diff(r[2](t),t,1))^2*sin(r[2](t)-r[1](t))-l[1]*m[1]*g*cos(r[1](t)))/2","-(l[2]*l[3]*m[3]*('diff(r[3](t),t,1))^2*sin(r[3](t)-r[2](t))+((-2*l[1]*l[2]*m[3])-l[1]*l[2]*m[2])*('diff(r[1](t),t,1))^2*sin(r[2](t)-r[1](t))-2*l[2]*m[2]*g*cos(r[2](t)))/2","(l[2]*l[3]*m[3]*('diff(r[2](t),t,1))^2*sin(r[3](t)-r[2](t))+l[1]*l[3]*m[3]*('diff(r[1](t),t,1))^2*sin(r[3](t)-r[1](t))+3*l[3]*m[3]*g*cos(r[3](t)))/2"]
for i:1 thru 3 do(
    for k:1 thru 3 do(
J[i,1]:ssubst("m3","m[3]",J[i,1])
));

对Maxima中的数学表达式进行字符串操作几乎从来都不是正确的做法。你想要达到的更大目标是什么?也许你根本不需要用
mi
代替
m[i]
——出于许多目的,下标变量被视为与非下标变量相同。我需要去掉[]括号,因为我将把J矩阵的结果复制并粘贴到MATLAB中。正如您所知,[]导致了MATLAB中的问题。实际上我可以用m[1]来改变m1,用m[2]来改变m2,但是这太费时了。我需要一种算法方法来一次性改变所有内容。非常感谢您的帮助。虽然这种方法有点复杂,但我会逐行检查。我很乐意解释任何不清楚的部分。
(%o5) [-(l[1]*l[3]*m[3]*('diff(r[3](t),t,1))^2*sin(r[3](t)-r[1](t))+(2*l[1]*l[\
2]*m[3]+l[1]*l[2]*m[2])*('diff(r[2](t),t,1))^2*sin(r[2](t)-r[1](t))-l[1]*m[1]*\
g*cos(r[1](t)))/2, -(l[2]*l[3]*m[3]*('diff(r[3](t),t,1))^2*sin(r[3](t)-r[2](t)\
)+((-2*l[1]*l[2]*m[3])-l[1]*l[2]*m[2])*('diff(r[1](t),t,1))^2*sin(r[2](t)-r[1]\
(t))-2*l[2]*m[2]*g*cos(r[2](t)))/2, (l[2]*l[3]*m[3]*('diff(r[2](t),t,1))^2*sin\
(r[3](t)-r[2](t))+l[1]*l[3]*m[3]*('diff(r[1](t),t,1))^2*sin(r[3](t)-r[1](t))+3\
*l[3]*m[3]*g*cos(r[3](t)))/2]
(%i6) linel:65;
(%o6)                          65
(%i7) map (parse_string, %o5);
                     d          2
(%o7) [((- l  l  m  (-- (r (t)))  sin(r (t) - r (t)))
            1  3  3  dt   3            3       1
                            d          2
 - (2 l  l  m  + l  l  m ) (-- (r (t)))  sin(r (t) - r (t))
       1  2  3    1  2  2   dt   2            2       1
                                        d          2
 + l  m  g cos(r (t)))/2, ((- l  l  m  (-- (r (t)))
    1  1        1              2  3  3  dt   3
                                                    d          2
 sin(r (t) - r (t))) - ((- 2 l  l  m ) - l  l  m ) (-- (r (t)))
      3       2               1  2  3     1  2  2   dt   1
 sin(r (t) - r (t)) + 2 l  m  g cos(r (t)))/2, 
      2       1          2  2        2
           d          2
(l  l  m  (-- (r (t)))  sin(r (t) - r (t))
  2  3  3  dt   2            3       2
             d          2
 + l  l  m  (-- (r (t)))  sin(r (t) - r (t))
    1  3  3  dt   1            3       1
 + 3 l  m  g cos(r (t)))/2]
      3  3        3
(%i8) grind (%);

[((-l[1]*l[3]*m[3]*('diff(r[3](t),t,1))^2*sin(r[3](t)-r[1](t)))
  -(2*l[1]*l[2]*m[3]+l[1]*l[2]*m[2])
   *('diff(r[2](t),t,1))^2*sin(r[2](t)-r[1](t))
  +l[1]*m[1]*g*cos(r[1](t)))
  /2,
 ((-l[2]*l[3]*m[3]*('diff(r[3](t),t,1))^2*sin(r[3](t)-r[2](t)))
  -((-2*l[1]*l[2]*m[3])-l[1]*l[2]*m[2])
   *('diff(r[1](t),t,1))^2*sin(r[2](t)-r[1](t))
  +2*l[2]*m[2]*g*cos(r[2](t)))
  /2,
 (l[2]*l[3]*m[3]*('diff(r[2](t),t,1))^2*sin(r[3](t)-r[2](t))
  +l[1]*l[3]*m[3]*('diff(r[1](t),t,1))^2*sin(r[3](t)-r[1](t))
  +3*l[3]*m[3]*g*cos(r[3](t)))
  /2]$
(%o8)                         done
(%i9) listofvars (%o7);
(%o9)            [l , m , g, t, l , m , m , l ]
                   1   1         2   2   3   3
(%i10) sublist (%, subvarp);
(%o10)              [l , m , l , m , m , l ]
                      1   1   2   2   3   3
(%i11) map (op, %o10);
(%o11)                 [l, m, l, m, m, l]
(%i12) map (args, %o10);
(%o12)           [[1], [1], [2], [2], [3], [3]]
(%i13) map (lambda ([v], apply (op(v), args(v))), %o10);
(%o13)        [l(1), m(1), l(2), m(2), m(3), l(3)]
(%i14) map (lambda ([v1, v2], v1=v2), %o10, %o13);
(%o14) [l  = l(1), m  = m(1), l  = l(2), m  = m(2), m  = m(3), 
         1          1          2          2          3
                                                       l  = l(3)]
                                                        3
(%i15) subst (%, %o7);
                            d          2
(%o15) [((- l(1) l(3) m(3) (-- (r (t)))  sin(r (t) - r (t)))
                            dt   3            3       1
                                        d          2
 - (2 l(1) l(2) m(3) + l(1) l(2) m(2)) (-- (r (t)))
                                        dt   2
 sin(r (t) - r (t)) + l(1) m(1) g cos(r (t)))/2, 
      2       1                        1
                    d          2
((- l(2) l(3) m(3) (-- (r (t)))  sin(r (t) - r (t)))
                    dt   3            3       2
                                            d          2
 - ((- 2 l(1) l(2) m(3)) - l(1) l(2) m(2)) (-- (r (t)))
                                            dt   1
 sin(r (t) - r (t)) + 2 l(2) m(2) g cos(r (t)))/2, 
      2       1                          2
                 d          2
(l(2) l(3) m(3) (-- (r (t)))  sin(r (t) - r (t))
                 dt   2            3       2
                   d          2
 + l(1) l(3) m(3) (-- (r (t)))  sin(r (t) - r (t))
                   dt   1            3       1
 + 3 l(3) m(3) g cos(r (t)))/2]
                      3
(%i16) grind (%);

[((-l(1)*l(3)*m(3)*('diff(r[3](t),t,1))^2*sin(r[3](t)-r[1](t)))
  -(2*l(1)*l(2)*m(3)+l(1)*l(2)*m(2))
   *('diff(r[2](t),t,1))^2*sin(r[2](t)-r[1](t))
  +l(1)*m(1)*g*cos(r[1](t)))
  /2,
 ((-l(2)*l(3)*m(3)*('diff(r[3](t),t,1))^2*sin(r[3](t)-r[2](t)))
  -((-2*l(1)*l(2)*m(3))-l(1)*l(2)*m(2))
   *('diff(r[1](t),t,1))^2*sin(r[2](t)-r[1](t))
  +2*l(2)*m(2)*g*cos(r[2](t)))
  /2,
 (l(2)*l(3)*m(3)*('diff(r[2](t),t,1))^2*sin(r[3](t)-r[2](t))
  +l(1)*l(3)*m(3)*('diff(r[1](t),t,1))^2*sin(r[3](t)-r[1](t))
  +3*l(3)*m(3)*g*cos(r[3](t)))
  /2]$
(%o16)                        done
(%i17) listofvars (%o15);
(%o17)                       [g, t]