我想創建一個具有這樣的浮點系數的多項式環。我可以用整數創建,但是浮點數不起作用。
using Oscar
S, (a,b,c,d) = PolynomialRing(QQ,["a","b","c","d"])
RR = AbstractAlgebra.RealField
s1 = S( 8*a - RR(0.51234)*a*(1 RR(1/2)*a RR(1/3)*b RR(1/4)*c) - 8)
s2 = S( 8*b - RR(0.51234)*b*(1 RR(2/3)*a RR(2/4)*b RR(2/5)*c) - 8)
s3 = S( 8*c - RR(0.51234)*c*(1 RR(3/4)*a RR(3/5)*b RR(3/6)*c) - 8)
s4 = S( 8*d - RR(0.51234)*d*(1 RR(4/5)*a RR(4/6)*b RR(4/7)*c) - 8)
它給了我這個錯誤。我怎樣才能創建這樣的多項式。
ERROR: LoadError: MethodError: no method matching (::FmpqMPolyRing)(::BigFloat)
Closest candidates are:
(::FmpqMPolyRing)() at ~/.julia/packages/Nemo/5CDLD/src/flint/fmpq_mpoly.jl:1063
(::AbstractAlgebra.Ring)(::Singular.n_RingElem{Singular.RingElemWrapper{S, T}}) where {S, T} at ~/.julia/packages/Singular/uG7uo/src/number/n_unknown.jl:358
(::AbstractAlgebra.Ring)(::Union{Singular.n_FieldElem{T}, Singular.n_RingElem{T}} where T) at ~/.julia/packages/Oscar/iRpOQ/src/Rings/mpoly.jl:736
...
Stacktrace:
[1] *(x::BigFloat, y::fmpq_mpoly)
@ AbstractAlgebra ~/.julia/packages/AbstractAlgebra/mQIYL/src/Rings.jl:84
[2] top-level scope
@ /mnt/c/Users/yusuf/Desktop/7.Semester/bitirme/Repo_Resultant_System/resultant-system/chandra4.jl:7
in expression starting at /mnt/c/Users/yusuf/Desktop/7.Semester/bitirme/Repo_Resultant_System/resultant-system/chandra4.jl:7
uj5u.com熱心網友回復:
雖然我以前沒有使用過此特定(從外觀上看,相當復雜)包Oscar.jl的經驗,但決議此錯誤訊息告訴我,您嘗試呼叫的函式被BigFloat作為輸入提供,但根本沒有方法對于那種型別。
起初這有點令人驚訝,因為BigFloat您的輸入中沒有 s,但經過一番調查,似乎罪魁禍首如下
julia> RR = AbstractAlgebra.RealField
Floats
julia> RR(1/3)
0.333333333333333314829616256247390992939472198486328125
julia> typeof(ans)
BigFloat
但是,將這些輸入更改BigFloat為更標準Float64并不能解決問題;S也沒有辦法。但是,它確實具有Rationals諸如1//3. 因此,一個簡單的明顯解決方法是撰寫
using Oscar
S, (a,b,c,d) = PolynomialRing(QQ,["a","b","c","d"])
RR = AbstractAlgebra.Rational # Note the change here!
s1 = S( 8*a - RR(0.51234)*a*(1 RR(1/2)*a RR(1/3)*b RR(1/4)*c) - 8)
s2 = S( 8*b - RR(0.51234)*b*(1 RR(2/3)*a RR(2/4)*b RR(2/5)*c) - 8)
s3 = S( 8*c - RR(0.51234)*c*(1 RR(3/4)*a RR(3/5)*b RR(3/6)*c) - 8)
s4 = S( 8*d - RR(0.51234)*d*(1 RR(4/5)*a RR(4/6)*b RR(4/7)*c) - 8)
它運行沒有錯誤。
或者更簡潔一點,從一開始就直接將系數作為有理數輸入:
S, (a,b,c,d) = PolynomialRing(QQ,["a","b","c","d"])
RR = AbstractAlgebra.Rational
s1 = S( 8*a - RR(51234//100000)*a*(1 RR(1//2)*a RR(1//3)*b RR(1//4)*c) - 8)
s2 = S( 8*b - RR(51234//100000)*b*(1 RR(2//3)*a RR(2//4)*b RR(2//5)*c) - 8)
s3 = S( 8*c - RR(51234//100000)*c*(1 RR(3//4)*a RR(3//5)*b RR(3//6)*c) - 8)
s4 = S( 8*d - RR(51234//100000)*d*(1 RR(4//5)*a RR(4//6)*b RR(4//7)*c) - 8)
產生
julia> s1 = S( 8*a - RR(51234//100000)*a*(1 RR(1//2)*a RR(1//3)*b RR(1//4)*c) - 8)
-25617//100000*a^2 - 8539//50000*a*b - 25617//200000*a*c 374383//50000*a - 8
julia> s2 = S( 8*b - RR(51234//100000)*b*(1 RR(2//3)*a RR(2//4)*b RR(2//5)*c) - 8)
-8539//25000*a*b - 25617//100000*b^2 - 25617//125000*b*c 374383//50000*b - 8
julia> s3 = S( 8*c - RR(51234//100000)*c*(1 RR(3//4)*a RR(3//5)*b RR(3//6)*c) - 8)
-76851//200000*a*c - 76851//250000*b*c - 25617//100000*c^2 374383//50000*c - 8
julia> s4 = S( 8*d - RR(51234//100000)*d*(1 RR(4//5)*a RR(4//6)*b RR(4//7)*c) - 8)
-25617//62500*a*d - 8539//25000*b*d - 25617//87500*c*d 374383//50000*d - 8
在后一種情況下,RR包裝器似乎不是必需的,因為它不會改變輸入的型別,但我想它不會受到傷害。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/417536.html
標籤:
下一篇:f(x)的n次導數的數值實作?
