2017-02-03 1 views
0

이 질문은 Maxima 출력의 인간적 표현에 관한 것입니다. 짧은에서Maxima : 유한 합계를 어떻게 제외할까요?

는 어떻게

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) 

처럼해야합니까

곳 합 _ {*}^{*} * 요약 기호 및 첨자 표현은?

더 깊은 항목을 제대로 유한 모델로 모델링하는 방법은 여기?

엔티티 $ x_i $ (여기서 tex로 말하려는) n이 알려진 1에서 n까지 번호가 매겨 졌다고 가정 해보십시오. 함수 $ F $가 $ F = F (c_11, ..., c_kn) $가되도록 그 엔티티 $ c_ji = c_j (x_i), j = 1..k $ (k - .

Maxima에서 구현하려고 할 때 모든 종류의 합계와 상품이 산출됩니다. 여기서 번호가 매겨진 항목은 $ c_1 * a + c_2 * a + c_3 * a + 종이에 $ a * \ sum_ {i = 1}^{4} c_i + b * sum_ {i = 1}로 적어주는 c_4 * a + d_1 * b + d_2 * b + d_3 * b + d_4 * 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 */ 

그래서 (맥시마 출력 ">>>"로 표시), 세 quetions 여기있다 :

  1. 이 게시물의 맨 위에있는 표현과 같은 표현식의 합계를 어떻게 제외합니까?
  2. 내가 Maxima가 내가 여기서 말하고있는 것을 어떻게 적절히 알려줄 수 있습니까?
  3. Maxima가 출력물에서 내 순서를 유지하게 만드는 방법은 무엇입니까?

미리 감사드립니다.

답변

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[i]d[i]을 각각하고 "나는 D 하위" "난 C 하위"이라고 부르는 작성한 것입니다. 이들은 cd이라는 색인 된 변수이고 i은 색인입니다. c 또는 di이라는 배열 또는 목록이 실제로 존재할 필요는 없습니다. 특정 값을 가질 수도 있고 그렇지 않을 수도 있습니다.

나는 일반적인 기능으로 F이라고 적어 두었습니다. 나는 concat을 통해 변수 이름의 생성을 피하고 그 이름을 표현식으로 대체하는 것을 피했습니다. 나는 그러한 작업이 거의 확실하게 그것에 관한 최선의 방법이 아니라는 점을 강조하고자한다.

%i3에서 나는 합계를 'sum(...)으로 작성하여 소위 명사 표현식으로 지정했는데, 이것은 상징적 형태로 유지되고 평가되지 않음을 의미합니다.

기본적으로 합계는 선형으로 처리되지 않으므로 %i4에서 합계를 %o5의 결과가되도록 선형으로 선언했습니다.

Maxima는 a1 + a2 + a3과 같은 표현식을 상징적 인 합계로 다시 수집 할 수있는 방법이 없지만 이러한 연산은 필요하지 않습니다.

+0

답장을 보내 주셔서 감사합니다. 그건 그렇고, 실제 값 목록 인'c_i'와'd_i '에 대한 합계를 어떻게 계산합니까? – admech

+0

그리고 실제 값이 모든 색인 된 변수의 하위 집합에 대해서만 알려지면 더 까다 롭습니다. 우리가'1..4'에서'i '에 대해'(a_i + b_i)^2'를 합친 것처럼 말입니다. 그러나'a [i]'는'[4, 5, 6, 7 ]','b [i] '가 알려지지 않은 경우 예상 결과는'126 + sum (b_i^2) + 8 * b_1 + ...'이 될 것입니다. 이것이 가능하거나 필요하지 않은지 확실하지 않은 경우 (어쩌면 우리 인간이 들어 와서해야 할 것입니다.) 그러나 Maxima가 그렇게 할 수있는 방법을 제공하는지 궁금합니다. – admech

+0

음, 'a : [4, 5, 6, 7]; (b [4] +7)^2 + (b [3] +6)^2 + (b (1) [2] +5)^2 + (b [1] +4)^2'. 그것으로부터'expand (%);는'b [4]^2 + 14 * b [4] + b [3]^2 + 12 * b [3] + b [2]^2 + 10 * b [2] + b [1]^2 + 8 * b [1] + 126'. 결과의 형식이 다소 지저분하지만 a가 값을 갖고 b가 값을 가지지 않는 것은 문제가되지 않습니다. 일반적으로 Maxima는 일부 변수가 값을 가지며 일부 변수는 값을 가지지 않는 표현식에 만족합니다. –

관련 문제