2016-10-22 8 views
3

저는 mathematica에서 sage로 스크립트를 마이그레이션하려고합니다. 나는 그것이 초등식 인 것으로 무언가에 갇혀있다.세이지에서 변수 패밀리 정의하기

제가

A00 + A10 * X + (A01) * y를 + (A20) * X^2 + (A11) * X * Y + ...

I 형태 말할 임의로 큰 다항식으로 작업해야 그것들을 x와 y에 대해서만 다항식이라고 생각하면, 그 다항식 P를 주어서 그 단항 물의리스트를 얻을 필요가 있습니다.

예를 들어 P = a20 * x^2 + a12 * x * y^2 인 경우 [a20 * x^2, a12 * x * y^2] 형식의 목록이 필요합니다.

나는 sage의 다항식이 계수를 반환하는 계수라는 클래스 함수와 계수없이 단항을 반환하는 monomials라는 클래스 함수라는 것을 알았습니다. 이 두리스트를 곱하면 내가 원하는 결과를 얻을 수 있습니다.

문제는이 기능이 작동하려면 항상 모든 변수를 변수로 선언해야한다는 것이 항상 가능하지는 않다는 것입니다.

[number] [number] 형식의 것이 무엇이든지 변수라고 sage에게 알리는 방법이 있습니까? 또는 sage에서 변수의 전체 패밀리를 정의 할 수있는 방법이 있습니까?

완벽한 세계에서 저는 현자가 수학자처럼 행동하게하고 싶습니다. 정의하지 않은 것은 변수로 간주되지만, 이것은 너무 낙관적입니다.

답변

2

매우 작은 문자열 처리가 거의 필요할 것입니다. 답변

은 내가 말할 수있는 어떤 것보다 더 나은

  • 유사하다 getting lists of symbolic variables
  • other way of getting them의 방법입니다. 당연히 이것을 구현하는 것이 가능하지만 ...

    완벽한 세계에서 저는 현자가 수학자처럼 행동하게하고 싶습니다. 정의되지 않은 것은 변수로 간주됩니다. 그러나 나는 이것을 짐작합니다. 너무 낙관적이다.

    True; 실제로, 그것은 파이썬의 (따라서 Sage의) "암묵적보다 뚜렷한"철학에 반대한다. x이 상징적 인 변수로 미리 정의되어야하는지에 대한 오랜 논쟁이있었습니다 (!).

    (그리고 정직하게, 나는 오타을 얼마나 자주 주어, 내가 것 정말 오히려 하지는 임의의 점은 상징적 인 변수로 간주 될 수있다.)

  • +0

    나는이 작업을 수행 할 기본 방법이 없다는 것을 놀랐다. 어쨌든, 현자 지원 포럼의 코드 스 니펫이 트릭을 수행합니다. 고맙습니다. – tst

    +0

    당신을 진심으로 환영합니다. 네이티브 방식이 구현되지 않은 이유는 그것이 어떻게 일어날 것인가에 대한 몇 가지 불일치 때문이라고 생각합니다. 첨자 또는 그냥 연결, 배열 언급하지 않기 위하여 ... – kcrisman

    1

    내 대답은 완전히 당신의 질문하지만 하나의 트릭 I를 해결하지 않습니다 변수를 정의하는 것이 PolynomialRing()을 사용하는 것이 었습니다.예를 들어

    sage: R = PolynomialRing(RR, 'c', 20) 
    sage: c = R.gens() 
    sage: pol=sum(c[i]*x^i for i in range(10));pol 
    c9*x^9 + c8*x^8 + c7*x^7 + c6*x^6 + c5*x^5 + c4*x^4 + c3*x^3 + c2*x^2 + c1*x + c0 
    

    나중에 변수 (해결하기 위해 당신이)를 정의 할 수 있습니다에, : 예를 들어

    sage: variables=[SR(c[i]) for i in srange(0,len(eq_list))]; 
    sage: solution = solve(eqs,variables);