• 締切済み

プログラムの学習について

プログラムの質問おねがいします 解答と、この問題を理解するのに必要な知識を得られるHPや また、正直何のプログラムを使っているのか分からなくて・・・ プログラム名も教えていただけますか? よろしくお願いします ・Aさんはサッカーのチームを1つ所有している そのチームは毎月よそのチームと試合をする チームの勝率は1/3 負ける確率は1/2 引き分けは1/6 貯金2、借金2になればそのチームを他の人に譲ることにする (貯金2とは、勝数-負数=2のこと、借金はその逆) 何ヵ月後に貯金がいくつあるかのプログラムをある言語を用い書いた st[0]=(0,0,1,0,0); (#st[0]は、初期状態をあらわす確率ベクトルである#)  1 0 0 0 0 1/2 1/6 1/3 0 0  0 1/2 1/6 1/3 0 =tp  0 0 1/2 1/6 1/3  0 0 0 0 1 st[k]=st[0]*MatrixFunctionX[tp,k]; (#ここで*はベクトルと行列の積を表す#) (#st[k]はkヵ月後の確率である#) (#MatrixFunctionX[tp,k]は、この言語にすでに用意されている関数で(ア)を取る#) (#この関数の意味は行列tpの(イ)である#) [問1]アーイの空欄を埋めよ [問2]3ヵ月後にどの状態にいるかst[3]を求めよ [問3]同様に2年後にはどの状態にいるかst[24]を求めよ

みんなの回答

noname#192177
noname#192177
回答No.2

プログラムの問題というよりは確率行列の問題ではないかと思います。 http://markun.cs.shinshu-u.ac.jp/learn/probability/i_04-01-01.html http://markun.cs.shinshu-u.ac.jp/learn/probability/i_04-01-04.html の前後が参考になるかも知れません。 おそらくですが、状態st[0] = (0, 0, 1, 0, 0)というのは、 左から、貯金が-2, -1, 0, +1, +2 の確率をあらわしているのだと思います。初期状態では貸し借り0の状態が1 (=100%)で他は0。 1ヶ月後には、st[1] = (0, 1/2, 1/6, 1/3, 0) に、 2ヶ月後には、st[2] = (1/2*1/2, (1/2*1/3)+(1/6*1/6)+(1/2*1/3), (1/6*1/3)+(1/3*1/6), 1/3*1/3)と遷移していくものと思われます。 注意しなければならないのは、-2または+2になったらチームを譲ってしまうので、-2と+2は「アガリ」で、そこから別の状態には遷移しないということです。これは行列tpの一番上と下の行を見るとわかります。 というのでヒントになっているでしょうか?

参考URL:
http://markun.cs.shinshu-u.ac.jp/learn/probability/i_04-01-01.html
comoco312
質問者

お礼

ありがとうございます 条件付確率行列ですね 確率行列の勉強をしたいと思います 助かりました、どうもです

  • ushioni
  • ベストアンサー率24% (14/58)
回答No.1

「プログラム名」じゃなくて「言語名」ですよね。 で、この問題の場合、言語は仮想的なものだと思われるので、 特に、これ、というものではないようです。 どちらかというと数学の問題じゃないですかね。 問題をよく理解してないので間違ってるかもしれませんが、 MatrixFunctionX[tp,k]はtpをk回掛けたものでしょうか。 問2は力技、問3は規則性を見つけて計算、ってところでしょうか。

comoco312
質問者

お礼

ありがとうございます 力技で解いてたんですが、問3になるとどうも歯が立たなくて・・・ 仮想的な言語ですか、なにかそういう言語があると思っていました。 本当にありがとうございました

関連するQ&A

  • 進研模試(というより模試)の出題問題の形式??

    高2です。1年のときは進研模試をうけたときいっつも2次関数あたりは絶対といっていいほど大問2や大問3に取り上げられて数Aの図形だったり確率は選択問題として出てきていました。 高2がうける進研模試もやはり二次関数などの問題がメインとなって ベクトルや図形、確率などは選択問題などに回ってしまうのでしょうか。

  • 二次形式のモーメント母関数について

    二次形式のモーメント母関数について 閲覧ありがとうございます。 確率統計について分からない問題があるので教えてください。 問 X[1],X[2],...,X[n]は独立で共通な標準正規分布N(0,1)に従う確率変数である。 X = (X[1],X[2],...,X[n])'とおく。 (’はベクトル・行列の転置を表す。) A=(a[i][j])をn次の実対称行列とし、固有値全体を{λ[1],λ[2],...,λ[n]} (λ[1]≧λ[2]≧...≧λ[n]) とする。 Aを係数行列にもつXに関する二次形式 Z = X' A X =Σ[n,i,j=1] a[i,j]X[i]X[j] このとき以下について答えよ (1)Mz(t)のモーメント関数を求めよ。 (2)Zの確率分布が自由度k (1≦k≦n)のカイ二乗分布ならば λ[1]=...=λ[n]=1,  λ[k+1]=...=λ[n]=0であることを証明せよ。 (1)については全然わかりません。。。すいません。 (2)について n次の直交行列をU,固有値を対角成分とする行列をLとしてA=U' L Uと分解します。 Y=UXとして、 Z=X' A X =Y' L Yとかける。 条件よりYは確率分布N(0,1)に従う確率分布である。 ここまで考えましたが後がわかりません。 よろしくお願いします。

  • フリーソフトはどんなプログラム言語で書かれているのでしょうか?

    長文ですが最後まで目を通していただきますようお願い申し上げます。 vectorなどにはたくさんのフリーソフトがありますがいったいあのフリーソフト達はどんな言語で書かれているのでしょうか。 色々なプログラム言語で書かれているのは分かっています。ですので具体的にプログラム言語名を知っている方は知っているだけ書いていただければ幸いです。 今フリーソフトで一番使われているプログラム言語は何なんですか? 最後に私もフリーソフトを作って見たいと考えていますが、3年ぐらい勉強したら出来るでしょうか? 出来ればVBみたいにVBランタイムが必要なプログラム言語では書きたくないのですが・・・。 今私が作って見たいと考えているのは 1.選択式問題 2.システムの状態を表示させる などのソフトを作ってみたいのですが。 時間がかかるのは覚悟のうえです。 勉強もします。 ですので 1.2 のようなソフトを作りたいと思うとどのようなプログラムで書くといいでしょうか? アドバイスよろしくお願いします。 またそのプログラムを完成させるためのソフトも教えていただければありがたいです。 ソフトは出来れば無料がありがたいですが、本気でやりたいので有料でも出来るなら教えてください。 皆様のご回答心よりお待ちしております。 よろしくお願いします。

  • adobe のillustrator とかphotoshop は何言語で組まれてますか?

    最近cgiなどをいじり始めてプログラムの面白さを見つけました。 adobe のillustrator とかphotoshop は何言語で組まれてるのでしょうか? たとえばベクターツールなどはどのような関数で出来ているのでしょうか? ヒントでもわかればおしえてください。

  • キーボードの入力としてOSに渡すプログラム

    キーボードの入力としてOSに渡すプログラムを作りたいんですが、どうすればいいでしょうか? 具体的には メモ帳などに入力のカーソルを出してる状態で、 プログラムを起動するとプログラムであらかじめ指定しておいたキーが押されたものとしてメモ帳に入力されるようなプログラムなのですがどうやればいいでしょうか? 自動入力といった感じのものなのですが。 C言語でコンソールアプリあたりで作ろうと思っているのですが使用できる関数やアルゴリズムなど教えてください。

  • 行列演算: 固有ベクトルの解法

    現在、対称行列の固有値、固有ベクトルを求めるプログラムを作成し、つい最近完成しました。 しかし、とても使い物にならないプログラムになってしまいました。 理由はとても遅いのです。 解法の手順として、まず固有値を求めてから固有ベクトルを求めるようと考え、入力の対称行列をHouseHolder法により三重対角行列に変換し、それをQR法により対角化してまず固有値を求めました。 固有値を求めることができたので、次に固有ベクトルを求めます。手順として、固有値ごとに入力対称行列の対角成分から固有値を減算した行列をLU分解し、連立一次方程式を解くように固有ベクトルを求めていきます。 この一連の手順で、対称行列の固有値、固有ベクトルを求めることができたのですが、とても時間がかかってしまいます。 ただし、対称行列の固有値を求めるまでの時間はとても高速です。 500×500の行列の固有値、固有ベクトルを求めるのに30分はかかってしまいますが、その中で固有値を求める時間は2秒しかかかりません。 つまり今固有値がわかっている状態で、固有ベクトルを高速に求めたいと考えています。 なにか高速に固有ベクトルを求める方法(アルゴリズム)はあるでしょうか?

  • ベクトルを対角行列にするような掛け算

    xをK次の縦ベクトルとして、diag(x)をxの各要素が対角に並び他要素がゼロになっているようなK×Kの行列と定義します。 そこで、一般に xy'=diag(x) となるような縦ベクトルyは存在するでしょうか。 できればyはxに依存しない形で書ければベストですが、xの関数になっていても良いです。

  • 多変量解析

    多変量解析を勉強するためには、以下の高校数学の分野のうちどれを復習し直せばいいでしょうか?1、数と式 2、数列 3、二次関数 4、三角比 5、個数の処理 6、確率 7、ベクトル 8、複素数 9、図形と式 10、三角関数 11、指数対数関数 12、微分積分(整関数 数(2)レベル)13、極限 14、微分 15、積分 16、行列 17、曲線 18、確率分布・・・以上、全分野です。教えていただけるとうれしいです。

  • 量子力学の問題

    量子力学の問題 次の問題に答えられません。 解等を教えていただけるとうれしいです。 --- ハミルトニアンが2行2列の行列(1)式で与えられている。 ただしωとθは定数である。以下の問いに答えよ。 (1)Hの固有値E+,E-と、それぞれの固有値に対応する規格化された固有ベクトルψ+、ψ-を求めよ。 (2)シュレティンガー方程式を満たす、時刻tにおける状態ベクトルψ(t)をE+、E-とψ+、ψ-を用いてあらわせ。さらに、初期状態を(2)式として、ψ(t)をωとθであらわせ。 (3)上記(2)の量子状態に対して時刻tにおいて測定を行い、(3)を得る確率を求めよ。 (4)このハミルトニアンは、磁気モーメントμを持つ1/2スピンの粒子が、磁束密度Bにおかれた場合の量子力学を記述する。θの幾何学的な意味を述べて、ハミルトニアン(1)のパラメータωをμとBで表せ。参考としてパウリ行列は(4)である。

  • C言語のプログラムで質問です。

    C言語のプログラムで質問です。 これは、2元1次連立方程式の解を求めるプログラムです。 このプログラムを (1)3元1次連立方程式の解を求めるプログラムにする (2)係数行列、定数行列(6、7行目)をキーボードからの入力にする。 ようにしたいのですが、どうすればよいでしょうか。 前半の部分を変えれば良いようなのですが分かりません。教えてください。 #include <stdio.h> #include <math.h> /* gauss22.c */ #define N 2 main(){ double A[N][N]={1.,4.,3.,2.}, Aa[N][N]; /*簡単のため係数行列を予め指定*/ double b[N]={4.,5.}, x[N], bb[N], e[N]; /*簡単のため定数ベクトルを予め指定*/ int n=2; int i, j, k; double akk, aik, s; /* save original coefficients */ for (i=0; i<n; i++){ for (j=0; j<n; j++){ Aa[i][j]=A[i][j]; } bb[i]=b[i]; } /* forward operation */ for (k=0; k<n-1; k++){ akk=1/A[k][k]; for (i=k+1; i<n; i++){ aik=-A[i][k]*akk; for (j=k+1; j<n; j++){ A[i][j]+=aik*A[k][j]; } b[i]+=aik*b[k]; } for (j=k+1; j<n; j++){ A[k][j]*=akk; } b[k]*=akk; } /* backward operation */ x[n-1]=b[n-1]/A[n-1][n-1]; for (k=n-2; k>=0; k--){ s=0.0; for (j=k+1; j<n; j++){ s+=A[k][j]*x[j]; } x[k]=b[k]-s; } /* chek */ for (i=0; i<n; i++){ s=0.0; for (j=0; j<n; j++){ s+=Aa[i][j]*x[j];} e[i]=s-bb[i]; printf("x(%d)=%f error=%f?n",i, x[i], e[i]); } }

専門家に質問してみよう