완전히 해결책은 아니지만 해결책은 있습니다.
dotproduct
을 호출하는 대신 내적 제품을 a . b
으로 작성하십시오. (.
연산자는 Maxima에서 비유 전적인 곱셈을 의미합니다. a . b
이 a
및 b
을 포함하는 표현식과 그 사이의 각도로 단순화되도록 단순화 규칙을 정의 할 수 있습니다. 이와
matchdeclare ([aa, bb], nonscalarp);
tellsimpafter (aa . bb, norm(aa)*norm(bb)*cos(angle(aa, bb)));
, 내가 얻을 :
(%i12) declare ([e1, e2], nonscalar);
(%o12) done
(%i13) e1.e2;
(%o13) norm(e1)*cos(angle(e1,e2))*norm(e2)
어쩌면이 많은 도움이 될 것입니다, 당신은 그것을인지 말할 수 있습니다. norm
자신과 angle(a, b)
을 정의해야하기 때문에별로 좋지 않습니다. 이것은 Maxima의 약점입니다.이 제품에 대한 적용 범위는 맞지 않습니다.
또는 norm
및 angle
을 정의 할 필요가 없습니다. 귀하의 목적에 따라 달라질 수 있습니다. 어쩌면 당신은 당신이 해결하려고하는 더 큰 문제에 대해 더 많이 말할 수 있습니다.
또한이 솔루션은 2 기간 제품 a . b
만 일치하기 때문에 약간 문제가 있습니다. a . b . c
이라는 세 가지 용어로 패턴 매치러는 적합하지 않다고 생각합니다. 그 주위에는 여러 가지 방법이 있습니다. 다시 한번 말하지만 완전히 만족스럽지 않습니다.
모두 똑같은 방법으로 도움이되기를 바랍니다.
표준 및 각도를 모두 정의 할 필요가 없습니다. 또한 2 기간 제품 만 사용할 수 있으므로 내 요구가 크게 맞습니다. 한가지 질문 :이 솔루션은 배포판을 다루고 있습니까? (a + b) .c를 쓰면 maxima가 a.c + b.c를 제공합니까? – PTRK
'(a + b) .c'의 단순화는 전역 플래그'dotdistrib'에 의해 관리됩니다. 기본값은'false'입니다. 'dotdistrib'가'true' 일 때'(a + b) .c'는'a.c + b.c'로 단순화됩니다. 위의 규칙은'tellsimpafter'에 의해 정의 되었기 때문에 내장 된 단순화 후에 적용됩니다. 따라서'a + b'와'c' 또는'dotdistrib'의 값에 따라'a'와'c'와'b'와'c'에 규칙을 적용 할 것입니다. –