- ベストアンサー
Mathematicaの問題について
- Mathematicaの講義が理解できず課題に困っている
- 誤りのある関数を修正する方法を教えてほしい
- 正規分布の確率密度関数を描く関数の作り方を教えてほしい
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
どうやら(質問者でなく)出題者はプログラミングが不得手なようですね。 問題1. 1. Table関数に対する引数の順番が逆。 2. myVariance[arg1]はmyVariance[arg1_]の間違い。(アンダースコアが抜けている) 3. これが一番大きな問題だけど、関数定義中で局所的でない変数に対して代入が行われているため、リストarg1のなかにxbarやtemp1のシンボルが入っていると計算が停止してしまう。 示された関数定義に対して、最小限の修正をすると: myVariance[arg1_] := Module[{xbar, temp1}, xbar = Mean[arg1]; temp1 = Table[(arg1[[i]] - xbar)^2, {i, 1, Length[arg1]}]; N[Apply[Plus, temp1]/Length[arg1]]] ただ、これはあまりMathematicaらしくない書き方。Tableは不要だしApply[Plus,..は分かりにくい。次の書き方なら局所変数はいらない: myVariance[arg1_] := N[Total[(arg1 - Mean[arg1])^2]/Length[arg1]] 組み込み関数を使った版も書いておきますから、検算に使用して下さい。 myVariance[arg1_] := N[Variance[Append[arg1, Mean[arg1]]]] 問題2. これはWolframのドキュメントセンター(別にURLを示します)を参照して下さい。 grNormal[mu_, sigma_, xrange_] := Module[{ndist, pdfunc, ymin = -0.01, ymax = 0.43}, ndist = NormalDistribution[mu, sigma]; pdfunc = PDF[ndist, x]; Plot[pdfunc, {x, -xrange, xrange}, Frame -> True, PlotRange -> {{-xrange, xrange}, {ymin, ymax}}]] 問題3. 問題1で書いた代入の問題があるので、(1)・(2)に何をいれても「正しい」定義にはならない。出題者は myMean[arg1_] := ( data1 = Apply[Plus, arg1]; data2 = Length[arg1]; average = data1/data2) を正解としたいのだろうけど。 問題4. この問題にも代入の(以下略) 方法の説明については分散の計算法をWikipediaででも調べればわかると思います。 手法1 data1 = List[40, 40, 40, 50, 50, 50, 50] myVari[arg1_] := (xbar = Mean[arg1]; temp1 = Table[(arg1[[i]] - xbar)^2, {i, 1, Length[arg1]}]; Total[temp1]/Length[arg1]) Vari = myVari[data1] 手法2 data1 = List[40, 40, 40, 50, 50, 50, 50] myVari[arg1_] := ( xbar = Mean[arg1]; temp1 = Table[(arg1[[i]])^2, {i, 1, Length[arg1]}]; Total[temp1]/Length[arg1] - xbar^2) Vari = myVari[data1] 問題1に組み込み関数を使った版を示しますので、検算に利用して下さい。 問題5. 代入の(以下略) data1 = List[40, 40, 40, 50, 50, 50, 50, 60, 70, 80] myVari[arg1] := (xbar = Mean[arg1]; temp1 = Table[(arg1[[i]] - xbar)^2, {i, 1, Length[arg1]}]; N[Apply[Plus, temp1]\[Dash]xbar^2]) Vari = myVari[data1] 問題6. だいに(以下略) この出題者はTable関数が大好きみたいで、本来不要なところにまでTableを書きたがりますね。下に書いた定義はTableを使わないので、このまま提出すると何か言われるかも。 data3 = List[{26, 16}, {26, 11}, {26, 14}, {27, 16}, {28, 18}, {29, 16}, {32, 18}, {29, 21}, {24, 14}, {26, 19}] <<Statistics’MultiDescriptiveStatistics’ {grip, shot} = Transpose[data3] myC[arg1_, arg2_] := (xbar = Mean[arg1]; ybar = Mean[arg2]; temp1 = (arg1 - xbar) (arg2 - ybar); Total[temp1]/Length[arg1]) myCorrelation = myC[grip, shot] grip、shotへの代入は書き直しました。これでもいいし、Dot関数を使うならMyCは myC[arg1_, arg2_] := (xbar = Mean[arg1]; ybar = Mean[arg2]; temp1 = Dot[(arg1 - xbar), (arg2 - ybar)]; temp1/Length[arg1]) ともかけます。 検算用のコード myC[arg1_, arg2_] := Covariance[Append[arg1, Mean[arg1]], Append[arg2, Mean[arg2]]]
お礼
長い内容を丁寧に解説付きでお答えくださり、本当にありがとうございました。