这个问题是关于千里马输出的人性化表现。
简而言之,我该如何制作
b*d4 + b*d3 + b*d2 + b*d1 + a*sin(c4 + alpha) + a*sin(c3 + alpha) + a*sin(c2 + alpha) + a*sin(c1 + alpha)
看起来像
b*sum_{i=1}^{4} d_i + a*sum_{j=1}^{4}sin(c_i + \alpha)
其中sum _ {*} ^ {*} *是一个求和符号和带下标的表达式?
或更深入,如何在这里正确建模有限的一组项目?
考虑一组有限的实体$ x_i $(试图在这里说tex),编号从1到n,其中n是已知的。让函数$ F $依赖于那些实体的几个特征$ c_ji = c_j(x_i),j = 1..k $(k - 也已知),以便$ F = F(c_11,...,c_kn)$
现在当我尝试在Maxima中实现它并用它做事时,它会产生所有类型的总和和产品,其中编号的项目表示为$ c_1 * a + c_2 * a + c_3 * a + c_4 * a + d_1 * b + d_2 * b + d_3 * b + d_4 * b $您将在纸上记下为$ a * \ sum_ {i = 1} ^ {4} c_i + b * sum_ {i = 1 } ^ {4} d_i $
那么我怎样才能让Maxima做那种表达收缩呢?
更具体地说,这是一个实际的代码示例: (最大输出标记为“>>>”)
/* let's have 4 entities: */
n: 4 $
/* F is a sum of similar components corresponding to each entity F = F_1 + F_2 + F_3 + F_4 */
F_i: a*sin(alpha + c_i) + b*d_i;
>>> b*d_i + a*sin(c_i + alpha)
/* defining the characteristics */
c(i) := concat(c, i) $
d(i) := concat(d, i) $
/* now let's see what F looks like */
/* first, we should model the fact that we have 4 entities somehow: */
F_i(i) := subst(c(i), c_i, subst(d(i), d_i, F_i)) $
/* now we can evaluate F: */
F: sum(F_i(i), i, 1, 4);
>>> b*d4 + b*d3 + b*d2 + b*d1 + a*sin(c4 + alpha) + a*sin(c3 + alpha) + a*sin(c2 + alpha) + a*sin(c1 + alpha)
/* at this point it would be nice to do something like: */
/* pretty(F); */
/* and get an output of: */
/* $b*\sum_{i=1}^{4}d_i + a*\sum_{j=1}^4 sin(c_j + \alpha)$ */
/* not to mention having Maxima write things in the same order as I do */
总而言之,这里有三个排队:
提前致谢。
答案 0 :(得分:0)
这是一种了解我想要的方式。
(%i1) n: 4 $
(%i2) F(i) := a*sin(alpha + c[i]) + b*d[i];
(%o2) F(i) := a sin(alpha + c ) + b d
i i
(%i3) 'sum(F(i), i,1,4);
4
====
\
(%o3) > (a sin(c + alpha) + b d )
/ i i
====
i = 1
(%i4) declare (nounify(sum), linear);
(%o4) done
(%i5) 'sum(F(i), i,1,4);
4 4
==== ====
\ \
(%o5) a > sin(c + alpha) + b > d
/ i / i
==== ====
i = 1 i = 1
(%i6)
这里最重要的是我已经分别将{c sub i'和“d sub i”称为c[i]
和d[i]
。这些是名为c
和d
的索引变量,i
是索引。实际上没有必要存在名为c
或d
的数组或列表,i
可能有也可能没有特定值。
我写了F
作为普通函数。我通过concat
避免了变量名的构造,并避免将这些名称替换为表达式。我想强调的是,这些操作几乎肯定不是最好的方法。
在%i3
注意到我将总和写为'sum(...)
,这使得它成为一个所谓的名词表达式,这意味着它以符号形式维护而不进行评估。
默认情况下,摘要不会被视为线性,因此在%i4
中,我将摘要声明为线性,以便%o5
中的结果符合预期。
Maxima无法将a1 + a2 + a3
之类的表达式收回到符号求和中,但也许您不需要这样的操作。