kent0311p
@kent0311p

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

juliaでのmethod matching error の対処法

解決したいこと

juliaで統計学のグラフを描こうと最近vscodeにてjulia言語を導入しプログラミング初心者です。こちらのサイトに載っていた二項分布のグラフを描いてみようと思い,コーディングしてみたのですが,methoderrorが出てしまいうまくいきません。解決法をご教授いただけたら幸いです。

発生している問題・エラー

出ているエラーメッセージを入力

例)

例外が発生しました: MethodError
MethodError: no method matching _beta_inc(::BigFloat, ::BigFloat, ::BigFloat)

Stacktrace:
 [1] beta_inc(a::Int64, b::Int64, x::BigFloat)
   @ SpecialFunctions C:\Users\kentimai\.julia\packages\SpecialFunctions\hefUc\src\beta_inc.jl:732
 [2] betaccdf(α::Int64, β::Int64, x::BigFloat)
   @ StatsFuns C:\Users\kentimai\.julia\packages\StatsFuns\vxSkw\src\distrs\beta.jl:44
 [3] binomcdf(n::Int64, p::BigFloat, k::Int64)
   @ StatsFuns C:\Users\kentimai\.julia\packages\StatsFuns\vxSkw\src\distrs\binom.jl:33
 [4] cdf(d::Binomial{BigFloat}, x::Int64)
   @ Distributions C:\Users\kentimai\.julia\packages\Distributions\HAuAd\src\univariates.jl:622
 [5] top-level scope
   @ c:\Users\kentimai\coding\binomial.jl:4

該当するソースコード

using Distributions
using StatsPlots
d= Binomial(big(200), big(1/100))
println(cdf(d,200)-cdf(d,3))
scatter(d, leg=false, xlims = (0,20))





自分で試したこと

SpecialFuncitonに問題があるみたいなのですが.書き換えて変なことになるのが怖いので何もできない状況です。

0

2Answer

println(binomial(6, 4))

こちらだけを実行してみてください。
実行できましたら、関数の引数か関数名など書いたコードがエラー原因です。
こちらもエラーならすいませんわかんないです。
SpecialFuncitonが原因なら書き換えではなく再インストールでは?原因ではないと思うけど。。
ここを読む限り
https://specialfunctions-juliamath-org.translate.goog/stable/?_x_tr_sl=en&_x_tr_tl=ja&_x_tr_hl=ja&_x_tr_pto=sc

コードの参照
https://www.geeksforgeeks.org/getting-binomial-coefficient-of-a-number-in-julia-binomial-method/

0Like

Comments

  1. @kent0311p

    Questioner

    ご回答ありがとうございます。murase131様が書いてくださったコードは実行できました。
    引数や関数を見直してみます。ありがとうございました。<(_ _)>

なぜ、そこが原因と思ったかを勉強中とのことなので書いておきます。
ただ、juliaは触ったことないので、細部が違うかもです。

まず、エラー文をGoogle翻訳に入れ、読んでみる。(英語分からないから)
翻訳後の
1: MethodError:_beta_inc(:: BigFloat、:: BigFloat、:: BigFloat);
   に一致するメソッドがありません。
2: スタックトレース:の
   [5]トップレベルスコープ
 @ c:\ Users \ kentimai \coding \ binomial.jl:4

この二行がエラーを一番表していた
1: MethodErrorはメソッドがない。
2: ・・・¥binomial.jl:4
1: からメソッドないとのこと、どのメソッドのこと?
2: からbinomialのメソッドがないのでは?

binomialの簡単にしたものを実行してみる。

3: 試し
println(binomial(6, 4))

できる or できない
できないならbinomialメソッドがない?(こちらの場合、インストール出来てないや、ファイル破損? わからん)

できたならbinomialメソッドはある、
では、書いたコードがおかしい?
1: と 3: の違いを探す。引数が違うからここが原因と思われる。
上から一行づつ書いて実行してみる

まとめて書きます
println(binomial(big(6), 4))//これでエラーなら 引数1にbigが使えない
println(binomial(6, big(4)))//これでエラーなら 引数2にbigが使えない
println(binomial(big(6), big(4)))//これのみエラーなら 引数の片方にしかbigが使えない
println(binomial(6, (4/100))//これでエラーなら少数点がだめ?

このように切り分けと、問題のコード簡単化、違いによる原因解明をする。
何回もやっていると、なんとなくで原因が、わかるようになる。

スタックトレース(Stacktrace)の参考
https://e-words.jp/w/%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B9.html

juliaのスタックトレース(Stacktrace)の参考
https://inzkyk.xyz/julia_doc/manual/stacktraces/

0Like

Comments

  1. @kent0311p

    Questioner

    >murase131様
    お返事遅れてしまい申し訳ありません。丁寧にありがとうございます。
    細分化し,切り分けてみていけばよいのですね!参考にさせていただきます。

Your answer might help someone💌