0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pythonのユーザー定義関数「sympy で sqrt(A)*sqrt(E)*sqrt(m)*v/sqrt(l) を sqrt(m*A*E/l)*v と表示」をAI先生ヘ。

Last updated at Posted at 2025-07-04

・戻り値を、文字列で対応していただきました。
・ChatGPT先生へ、質問の要約あり。わかりませんでした、

(本日の)ChatGPT先生へ

・以下の 10.以降は私の質問が悪いようです。(続き)へ

# この会話で出てきた質問一覧(テキスト形式)
1. sympy で sqrt(A)*sqrt(E)*sqrt(m)*v/sqrt(l) を sqrt(m*A*E/l)*v と表示する方法を教えて下さい。
2. powsimpを使っても変わりません。
3. ユーザー定義関数でお願いします。
4. combine_sqrt_factors でなりません。
5. 1.0*sqrt(A)*sqrt(E)*sqrt(m)*v/sqrt(l) 1.0がでました。
6. sqrt(A)*sqrt(E)*sqrt(m)*v/sqrt(l) に戻りました。
7. combine_sqrt_factors でなりません。
8. sqrt(A)*sqrt(E)*sqrt(m)*v/sqrt(l) でした。戻り値は文字列でもいいです。
9. sqrt(m*A*E*l)*v  分子が消えました。
10. この会話で出てきた私の全ての質問を Markdown形式で一覧にしてください。
11. テキストで
12. markdown のテキスト形式で。本質問も含めて。
13. 空白行は不要。本質問も含めて。

(以下回答抜粋)

・最後だけ

✅ 改訂版関数 combine_sqrts_as_string_fixed

from sympy import symbols, sqrt, Pow, sympify, S, Mul

def combine_sqrts_as_string_fixed(expr, variable_order=None):
    """
    sqrt(a)*sqrt(b)*.../sqrt(c) * other → sqrt(a*b.../c) * other の文字列を生成。
    表示順 variable_order に従って順序制御も可能。
    """
    expr = sympify(expr)

    numerator_inside = S.One
    denominator_inside = S.One
    outside = S.One

    # 式を掛け算の要素に分解
    for arg in expr.as_ordered_factors():
        if isinstance(arg, Pow):
            if arg.exp == S.Half:
                numerator_inside *= arg.base
            elif arg.exp == -S.Half:
                denominator_inside *= arg.base
            else:
                outside *= arg
        else:
            outside *= arg

    # ------------------------------
    # 分子と分母の順序指定に従って文字列化
    def ordered_str(product, order):
        terms = []
        for var in order:
            if product.has(var):
                terms.append(str(var))
        return '*'.join(terms)

    if variable_order:
        num_str = ordered_str(numerator_inside, variable_order)
        den_str = ordered_str(denominator_inside, variable_order)
    else:
        num_str = str(numerator_inside)
        den_str = str(denominator_inside)

    if den_str:
        sqrt_part = f"sqrt({num_str}/{den_str})"
    else:
        sqrt_part = f"sqrt({num_str})"

    outside_str = str(outside) if outside != 1 else ''

    return f"{sqrt_part}*{outside_str}" if outside_str else sqrt_part

✅ 使用例

from sympy import symbols, sqrt

# シンボル定義
A, E, m, l, v = symbols('A E m l v', positive=True)

# 式定義
expr = sqrt(A) * sqrt(E) * sqrt(m) * v / sqrt(l)

# 表示順を明示(m*A*E/l)
order = [m, A, E, l]

# 整形文字列で出力
result = combine_sqrts_as_string_fixed(expr, variable_order=order)

print(result)

(本日の)ChatGPT先生へ(続き)

・以下の 10.以降は私の質問が悪いようです。
まだまだ、つづく....

# この会話で出てきた質問一覧(Markdown形式)
1. sympy で sqrt(A)*sqrt(E)*sqrt(m)*v/sqrt(l) を sqrt(m*A*E/l)*v と表示する方法を教えて下さい。
2. powsimpを使っても変わりません。
3. ユーザー定義関数でお願いします。
4. combine_sqrt_factors でなりません。
5. 1.0*sqrt(A)*sqrt(E)*sqrt(m)*v/sqrt(l) 1.0がでました。
6. sqrt(A)*sqrt(E)*sqrt(m)*v/sqrt(l) に戻りました。
7. combine_sqrt_factors でなりません。
8. sqrt(A)*sqrt(E)*sqrt(m)*v/sqrt(l) でした。戻り値は文字列でもいいです。
9. sqrt(m*A*E*l)*v 分子が消えました。
10. この会話で出てきた私の全ての質問を Markdown形式で一覧にしてください。
11. テキストで
12. markdown のテキスト形式で。本質問も含めて。
13. 空白行は不要。本質問も含めて。
14. 「良い質問テンプレート」を教えて下さい。
15. 今回の質問をテンプレに当てはめた文としてまとめ直して下さい。
16. コードをコピーする。 が分割されているのは、どうしてですか?一つにまとめて下さい。
17. 再度、この会話で出てきた私の全ての質問を Markdown形式で一覧にしてください。

・最後だけ

✅ 改訂版:コピーしやすいよう1つのコードブロックにまとめた質問文(Markdown形式)

### ❓ やりたいこと
SymPy を使って、次の式:
`sqrt(A)*sqrt(E)*sqrt(m)*v/sqrt(l)`
を、
`sqrt(m*A*E/l)*v`
の形に変換・表示したいです。

### 🧮 入力として使っているコード or 式、および出力形式の希望・問題点まとめ

```python
# 式の定義
from sympy import symbols, sqrt

A, E, m, l, v = symbols('A E m l v', positive=True)
expr = sqrt(A) * sqrt(E) * sqrt(m) * v / sqrt(l)

# 期待する出力
# sqrt(m*A*E/l)*v
# 表示順:m*A*E/l(この順序で表示されるとより望ましい)

# 現状の問題点
# - powsimp や combine_sqrt_factors を使っても変化しない
# - 1.0 がついてしまったり、分母の l が分子に入って sqrt(m*A*E*l) になってしまう
# - sqrt を1つにまとめ、v をルートの外に残したい

# 出力形式の希望
# - 出力は文字列
# - 戻り値の形式:sqrt(...) * v の文字列
# - 順序指定:m*A*E/l の順で表示
# - 空白行なし、簡潔な Markdown リスト形式も希望

# 追加条件
# - Markdown コードブロック (```markdown) で返してほしい
# - この質問自体も出力一覧に含めてほしい

(本日の)ChatGPT先生へ(続きの続き)

・新規に、質問しました。
??? 私は、わかりませんでした。

Gemini先生へ

copilot先生へ

いつもの? sympyの実行環境と 参考のおすすめです。

(テンプレート)

いつもと違うおすすめです。

Qiita内

・本ページの目的です。
 The bar inpacted by the rigid object

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?