• ベストアンサー

matlabのquadl関数について

matlabのquad,quadl関数についての質問です pを1*nのデータとして func1 = @(eta) (eta.^10).*((1-eta).^(10))./(prod(p.*eta+(1-p).*(1-eta))); K=quadl(func1,0,1); を計算したいのですが、 エラー ==> times 行列の次元は同じである必要があります となってしまいます。 多分prodがいけないと思うのですが、pの要素が多いため(p(i)*eta+(1-p(i))*(1-eta))のように全部書き下すことができません。 どう直せばよいのでしょうか

質問者が選んだベストアンサー

  • ベストアンサー
  • m0r1_2006
  • ベストアンサー率36% (169/464)
回答No.1

matlab2011b だったら, quadl では横ベクトルを関数に渡すので, func1 に横ベクトルが入力されたときに同じサイズの横ベクトルが返るように組む. p を縦ベクトルにして,prod 内の p.*eta+(1-p).*(1-eta) の .* を * に変える. ただし, func1 をベクトル値(eta) が入力された時に 同じ長さのベクトルを計算できるように関数としてファイルに書くのが正解です.

sapix01
質問者

補足

初心者ですみませんが、自分の考えだと etaはスカラーでpはベクトルでprodによってスカラーに変換されるから 結局func1はetaの一変数の関数となってquadlに代入されて計算されるイメージですが、 調べたらfunc1はベクトルxを受けてベクトルyを返す関数らしい。 matlabのベクトルに関するイメージがいまいちつかめないので、何かおすすめの本はありますか。