希望使用以下替换规则将乘法符号“*”替换为“张量”,并将幂符号“^”替换为“p_张量”:
a(k)^n --> p_tensor(n,a(k))
a(i)*a(j) --> tensor(a(i),a(j)), when i=/=j
但是当符号“*”在数字和a(i)之间,例如3*a(i),我们应该保留符号“*”。
因此,举个例子:
5*a(i)*a(j)*(a(k1)+3*a(k2)) --> 5*tensor(tensor(a(i),a(j)),a(k1)+3*a(k2))
a(i)^2*a(j)^2 --> tensor(p_tensor(2,a(i)),p_tensor(2,a(j)))
...
现在我想使用AWK、sed或Perl重新格式化以下表达式:
3*a(3)^2+6*a(1)^2*(5*a(2)^2-2*a(4))+6*a(2)*a(4)+6*a(1)*(-4*a(2)*a(3)+a(5))
你有什么想法吗?
替换后的预期结果应该是
3*p_tensor(2,a(3))+6*tensor(p_tensor(2,a(1)),(5*p_tensor(2,a(2))-2*a(4))+6*tensor(a(2),a(4))+6*tensor(a(1),(-4*tensor(a(2),a(3))+a(5))
*
替换为tensor
,而另一些则不替换呢?例如,第一个3*a(3)^2
似乎应该是tensor(3,p_tensor(2,a(3))
。 - ceyko