Об ошибке в скобках в sympy.printing.mathml - PullRequest
1 голос
/ 06 июня 2019

Я преобразовал строку Python в формулу с sympify следующим образом:

Я преобразовал формулу в формат MathML с помощью команды mathml.

from sympy import *
from sympy.printing.mathml import mathml

print(mathml(sympify("(2*x + 3*y + 1)*(4*x**2 - 6*x*y - 2*x + 9*y**2 - 3*y + 1)"),printer='presentation'))

В результате был выведен следующий код.

<mrow><mrow><mrow><mn>2</mn><mo>&InvisibleTimes;</mo><mi>x</mi></mrow><mo>+</mo><mrow><mn>3</mn><mo>&InvisibleTimes;</mo><mi>y</mi></mrow><mo>+</mo><mn>1</mn></mrow><mo>&InvisibleTimes;</mo><mrow><mrow><mn>4</mn><mo>&InvisibleTimes;</mo><msup><mi>x</mi><mn>2</mn></msup></mrow><mo>-</mo><mrow><mn>6</mn><mo>&InvisibleTimes;</mo><mi>x</mi><mo>&InvisibleTimes;</mo><mi>y</mi></mrow><mo>-</mo><mrow><mn>2</mn><mo>&InvisibleTimes;</mo><mi>x</mi></mrow><mo>+</mo><mrow><mn>9</mn><mo>&InvisibleTimes;</mo><msup><mi>y</mi><mn>2</mn></msup></mrow><mo>-</mo><mrow><mn>3</mn><mo>&InvisibleTimes;</mo><mi>y</mi></mrow><mo>+</mo><mn>1</mn></mrow></mrow>

Я встроил код в HTML и попробовал его следующим образом.

test.html

<html>
<head>
  <script async="" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML"></script>
</head>
<body>
<math>
<mrow><mrow><mrow><mn>2</mn><mo>&InvisibleTimes;</mo><mi>x</mi></mrow><mo>+</mo><mrow><mn>3</mn><mo>&InvisibleTimes;</mo><mi>y</mi></mrow><mo>+</mo><mn>1</mn></mrow><mo>&InvisibleTimes;</mo><mrow><mrow><mn>4</mn><mo>&InvisibleTimes;</mo><msup><mi>x</mi><mn>2</mn></msup></mrow><mo>-</mo><mrow><mn>6</mn><mo>&InvisibleTimes;</mo><mi>x</mi><mo>&InvisibleTimes;</mo><mi>y</mi></mrow><mo>-</mo><mrow><mn>2</mn><mo>&InvisibleTimes;</mo><mi>x</mi></mrow><mo>+</mo><mrow><mn>9</mn><mo>&InvisibleTimes;</mo><msup><mi>y</mi><mn>2</mn></msup></mrow><mo>-</mo><mrow><mn>3</mn><mo>&InvisibleTimes;</mo><mi>y</mi></mrow><mo>+</mo><mn>1</mn></mrow></mrow>
</math>
</body>
</html>

Однако с этим кодом в выводе будут отсутствовать круглые скобки, как на рисунке ниже.

[! [画像 の 説明 を こ こ に 入 力] [1]] [1]

Я прочитал [исходный код sympy.printing.mathml] [2].

Так что мне интересно, для чего используется метод _print_Interval.

Это связано с проблемой отсутствия скобок в формулах?

Это выражение является примером. Я хочу правильно преобразовать даже более сложные формулы.

Ответы [ 2 ]

0 голосов
/ 08 июня 2019

Я получил ответ в японской версии stackoverflow.https://ja.stackoverflow.com/q/55578/22541

Исправление [это] [1] может решить проблему.

[До]

for term in terms:
    x = self._print(term)
    mrow.appendChild(x)

[После]

for term in terms:
    mrow.appendChild(self.parenthesize(term, PRECEDENCE['Mul']))
0 голосов
/ 06 июня 2019

В сеансе isympy:

In [56]: sympify("(2*x + 3*y + 1)*(4*x**2 - 6*x*y - 2*x + 9*y**2 - 3*y + 1)")                          
Out[56]: 
                ⎛   2                    2          ⎞
(2⋅x + 3⋅y + 1)⋅⎝4⋅x  - 6⋅x⋅y - 2⋅x + 9⋅y  - 3⋅y + 1⎠
...