matlab計算についての質問

このQ&Aのポイント
  • matlab独学で進めていますが、時間がないのと頭が足りないので質問させていただきます。
  • X軸がD、Y軸がf(D)のグラフを作成したいです。内部行列の次元は一致しなければなりません。とエラーが出ます。このエラーの原因を教えてください。
  • 間違いだらけかもしれませんが...ご指摘よろしくお願いします。
回答を見る
  • ベストアンサー

matlab計算について

matlab独学で進めていますが、時間がないのと頭が足りないので 質問させていただきます。 p1=0.1; p2=2.663*10^6; D= 1:10:1000; A=(log(D)+12.7)/1.1; f(D)=(1/power((2*pi),0.5)*1.1*D)*exp(-0.5*power(A,2)); Y=(p/pash*4/3*pi*power((D/2),3))*f(D) plot(D,Y) X軸がD、Y軸がf(D)のグラフを作成したいです。 内部行列の次元は一致しなければなりません。 とエラーが出ます。このエラーの原因を教えてください。 間違いだらけかもしれませんが...ご指摘よろしくお願いします。

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8519/19367)
回答No.1

mathlabの説明で、良くある「f(x)」という説明は「数学の表記に合わせた、便宜的な物」なので「そのままプログラムに書く物ではない」です。 例えば、数学で f(x)=x^2 y=f(x) と表現した場合「y=xの2乗」になる訳ですが、mathlabでは x:0:0.1:10; y=x.^2; plot(x,y) と書きます。プログラム上では「f(x)」とは書きません。 あと、四則演算は、加算減算は「+と-」で構いませんが、乗算、除算、べき乗は「行列演算」と「要素ごと演算」があるので、きちんと区別して下さい。 演算子の前に何も付かない「*」「/」「\」「^」は行列演算で、演算子の前にピリオドが付いた「.*」「./」「.\」「.^」は要素ごとの演算です。 y=x^2; と y=x.^2; では、意味が違うので注意して下さい。

nknknknk222
質問者

お礼

ありがとうございます。

関連するQ&A

  • Matlab 2行の行列をプロットしたいのですが

    こんにちは、Matlabを使い始めのものです。 二行の行列(2x10とか2x40など)にについて、一行目をx座標、二行目をy座標としてグラフ化したいのですが、うまくいきません。 自動的にx座標は列の番号となり、二つのグラフが現れてしまいます:y座標に一行目、二行目、両方がプロットされてしまいます。どうにか、一行目をx、二行目をy座標としてグラフ化できないでしょうか。おそらく、とても単純なことなのかもしれないのですが、どうしてもわからず、とても歯がゆい思いをしています・・・。どうかご教示ください。 何をしたいかといいますと、音声データをMatlabで取り込んだのですが、振幅データがずらっと並んだ、1x500000とかの行列が得られます。 これを、プロットすると、x軸はサンプル番号が並ぶわけですが、本当はx軸は時間であって欲しいため、音声データの行列にひとつ行を足して、時間軸を作ってあげました。つまり、今手元にあるのは、2x500000の行列で、一行目が時間、二行目が振幅となっています。これをx軸が時間軸、でy軸が振幅となるようにグラフ化してあげたいと考えています。 文章がわかり辛くて申し訳ないのですが、何卒よろしくお願いします。

  • MATLABについてお聞きしたいです。

    MATLABについてお聞きしたいです。 現在勉強しているのですが、プログラミング初心者なので…。 MATLABでwavファイルの書き込みについてです。 周波数1000Hz, 0.5秒,サンプリング周波数22050Hz の設定にしてwavファイルで保存したく… f=1000; > A=0.5; > Fs=22050; > wavwrite(MyFunc_2(1000,0.5,22050),'sin1000'); という設定にして、保存したのですが、録音時に流れた音と録音された音が違うのです。 ファンクションMファイルは… function y=MyFunc_2(f,A,Fs) %Fs=44100; d=1/Fs; t=0:d:2; %f=440; %A=0.1; y=A*sin(2*pi*f*t); wavplay(y,Fs) このような設定にしています。 問題解決への協力よろしくお願いします。

  • MATLABとC++

    こんにちわ。資料を参考にしつつMATLABからC言語へ変換する作業をしているのですが、どちらに関しても初心者レベルで遅々としてはかどりません…。 分からないことの一つとして、MATLABは行列計算がしやすいがC言語はそうではないということからなのですが、MATLABで A = zeros(10,20,30) というのは次元10×20×30をもつゼロ行列 ということは分かったのですが、これは 数学で習う行列、2×2 や3×3など二次元な数字の並びを、三次元にまで拡張した表し方ということでしょうか?? また、上の式をC言語で書き表すとすると どのように書き表せるのでしょうか?どなたか分かるかた 教えていただければと思います。

  • MATLABエラー

    0.1秒かけて直線的に立ち上がり、その後0.1秒かけて直線的に減衰するような三角形の時間包絡をかけた音を作成したいのでの下記のプログラムを作りました。 1 %envelope.m 2 delta=1/48000; 3 t=delta:delta:0.1; 4 y=sin(2*pi*500*t); 5 6 t1=delta:delta:0.1; 7 env1=t1/0.1; 8 9 t2=delta:delta:0.1; 10 env2=1-t2/0.1; 11 12 env=[env;env2]; 13 z=y.*env; 14 plot(t,z); 15 16 A=0.9; 17 z=A*z; 18 sound(z,48000,16); しかし、次のようなエラーが起こりました。 行列の次元は一致しなければなりません。 エラー ==> enveplot at 13 z=y.*env; 何行目をどのように書き換えればエラーが起こらなくなりますか?

  • パワースペクトルからの時系列信号生成

    独学でMatlabを用いた信号処理を学んでいます。 ある論文で、パワースペクトルを所与として時系列信号を生成するということをしています。再現したいのですが、その具体的な実装方法がわからず困っています。 以下に自分の理解を書きます。 いまある時系列(長さn;2の階乗)をy、そのfft結果をY、そしてパワースペクトルをPyと表します。通常の解析では、パワースペクトルは  Py = Y.*conj(Y) / n で求められると思います。いまは逆にPyが与えられています。Yからyに戻すのは逆フーリエ変換により可能です。しかし、PyからYへの戻し方がわかりません。単にPyのルートをとるのでは複素数情報が失われてしまい結果が違ってしまいます。 なにかとても簡単なところでつまづいているだけな気はするのですが、ご教示いただければ幸いです。どうぞよろしくお願いいたします。 参考までに、論文ではPyはたとえば次のような式です。 Py = 0.625 ./ ((abs( (exp(-j.*2.*pi.*f.*dt) - 1.02 .* exp(-20.*j.*pi.*dt)) ... .* (exp(-j.*2.*pi.*f.*dt) - 1.02 .* exp(20.*j.*pi.*dt)) )).^2);

  • MATLABのfor文の使い方について

    MATLAB(というかプログラム)初心者です 下記を教えてください よろしくお願いいたします 「つくりたいプログラム」 y1=[A B C] y2=[D E F] ・ ・ ・ y200=[AA BB CC] 上記のような200個くらいある行列に同じ操作をしたいです そこでいちばん簡単な構造を考えました ////////////////////// y1=[A B C] y2=[D E F] for i=1:2 Yi=yi*5 end ///////////// 成功イメージは Y1=[5A 5B 5C] Y2=[5D 5E 5F] となってほしいのですが回りません・・・ yiの定義のしかたがわからず困っております 初歩的な質問かもしれませんが教えてくださいよろしくお願いいたします

  • matlabにおける行列の格納

    matlabにおける質問です。 (matlabもとよりプラグラミング初心者です。) 例えばx=[1 2 3;3 4 5]となっているとき for i=1:10 y(1)=i*x end のように、しても、y(1)とxの次元が合わないというエラーが 出ると思います 行列を、このように「i番目」といった添え字のついた変数に 代入するには、どうしたらよいのでしょうか。 初心者のため大変初歩的なことですが、どなたかご教授ください。 とても焦っております。。。

  • Matlabで自作関数をオーバーロード

    Matlabの組み込み関数の中には、引数の数や戻り値の数に応じて異なる作用をするものが沢山あると思います。 例えば組み込みのmax関数だと y=max(x) ならxの第一次元にについての最大値を返しますし、 [y,i]=max(x) なら、さらに i に最大値のindexを代入、 一方 x=max(x,y) ならx,yの各要素について大きい方を取った行列を、 x=max(x,[],d) ならxのd次元についての最大化をしてくれます。 質問ですが、そういう関数を自分で作ることは可能ですか? function [z,w]=f(x,y) という風に関数を定義してしまうと、たとえyを関数中で利用しない場合でも、引数yを指定しなければエラーになってしまいます。同じ関数名でも呼び方に応じて異なった操作をさせることはできないでしょうか?

  • matlab、対角行列の作り方

    matlabで、次のようにすると、 -------------------------------------------------------------- >> N = 5; h = 2*pi/N; column = [0 .5*(-1).^(1:N-1).*cot((1:N-1)*h/2)]'; D = toeplitz(column,column([1 N:-1:2])); >> D D = 0 -0.6882 0.1625 0.1625 -0.6882 -0.6882 0 -0.6882 0.1625 0.1625 0.1625 -0.6882 0 -0.6882 0.1625 0.1625 0.1625 -0.6882 0 -0.6882 -0.6882 0.1625 0.1625 -0.6882 0 -------------------------------------------------------------- 5*5のDという行列が出来ます。 今回、 X = D 0 0 0 0 D 0 0 0 0 D 0 0 0 0 D のように20*20の対角行列を作りたいのですが、作り方を教えて頂けないでしょうか?

  • Matlabのspdiags関数

    Matlabのspdiags関数に関してわからないところがあります。以下はMatlabのヘルプWebページから持ってきた例です。http://dl.cybernet.co.jp/matlab/support/manual/r2006/toolbox/matlab/math/?/matlab/support/manual/r2006/toolbox/matlab/math/sparse4.shtml B = [ 41 11 0 52 22 0 63 33 13 74 44 24 ]; d = [-3 0 2];、m=7, n=4のとき A = spdiags(B,d,7,4) A = (1,1) 11 (4,1) 41 (2,2) 22 (5,2) 52 (1,3) 13 (3,3) 33 (6,3) 63 (2,4) 24 (4,4) 44 (7,4) 74 これに対応するフル行列Aは、つぎのようになります。 full(A) ans = 11 0 13 0 0 22 0 24 0 0 33 0 41 0 0 44 0 52 0 0 0 0 63 0 0 0 0 74 mやnというのはfull(A)がm行n列の行列であるというイメージの対応がわかるのですが、d = [-3 0 2]とfull(A)の行列の関係がわかりません。-3,0,2というのはfull(A)のどこを見れば良いのでしょうか。

専門家に質問してみよう