74251


式 :k**2-40>0  
条件 :kは整数,k>0  
ほしい解:k>=7

プログラム①:symbol定義は、だめでした。  
プログラム②:Unionの要素の取り出し方を教えて下さい。  
プログラム③:solveの結果の要素の取り出し方を教えて下さい。  
よろしくお願いします

プログラム①

[code]

    from sympy import *
    k = Symbol('k',integer=True,positive=True)
    ineq = 'k**2-40>0'
    ans1=solve_univariate_inequality(sympify(ineq), k, relational=False)
    print('#',ineq,':',ans1)
    #
    # (以下エラー)抜粋
    # line 633, in solve_univariate_inequality
    #     raise ValueError(filldedent('''
    # ValueError:
    # k**2 - 40 > 0 contains imaginary parts which cannot be made 0 for any
    # value of k satisfying the inequality, leading to relations like I < 0.
    
[/code]

プログラム②

[code]

    from sympy import *
    k = Symbol('k')
    ineq = 'k**2-40>0'
    ans1=solve_univariate_inequality(sympify(ineq), k, relational=False)
    print('#',ineq,':',ans1)
    # k**2-40>0 : Union(Interval.open(-oo, -2*sqrt(10)), Interval.open(2*sqrt(10), oo))
    
[/code]

プログラム③

[code]

    from sympy import *
    k = Symbol('k')
    ineq = 'k**2-40>0'
    print('#',ineq,':',solve(ineq))
    # k**2-40>0 : ((-oo < k) & (k < -2*sqrt(10))) | ((k < oo) & (2*sqrt(10) < k))
    
[/code]


CC BY-SA 4.0
2021-02-24T10:55:29.100
74249
2021-04-06T21:21:52.963
2021-02-24T11:29:28.387
3060
17199
question
python sympy
sympyの1変数不等式「Inequality Solvers」について教えて下さい。


> プログラム③:solveの結果の要素の取り出し方を教えて下さい。
[code]

    from sympy import *
    k = Symbol('k', integer=True, positive=True)
    ineq = k**2 - 40 > 0
    solution = solve(ineq).evalf()
    for i in preorder_traversal(solution):
      if isinstance(i, Float):
        solution = solution.subs(i, ceiling(i)) 
    
    solution = solution.replace(StrictLessThan, LessThan)
    print(solution)
    =>
    7 <= k
    
[/code]


CC BY-SA 4.0
2021-02-24T11:35:22.260
74251
2021-02-24T12:20:56.760
2021-02-24T12:20:56.760
74249
answer


プログラム④

[code]

    from sympy import *
    import math
    print('k>=',math.ceil(float(sqrt(40))))
    # k>= 7
    
[/code]


CC BY-SA 4.0
2021-02-25T09:43:37.787
74274
2021-02-25T09:43:37.787
17199
74249
answer


wolframalphaで  
k**2-40>0 , k>0 整数  
<https://ja.wolframalpha.com/input/?i=k**2-40%3E0+%2C+k%3E0+%E6%95%B4%E6%95%B0>

結果:  
k>=7


CC BY-SA 4.0
2021-04-06T21:16:30.770
75126
2021-04-06T21:21:52.963
2021-04-06T21:21:52.963
17199
17199
74249
answer