• 締切済み

matlab制御文での値の格納?

現在matlabを使用してfor文で1から3000まで繰り返し、sigmaを求めるというプログラムを作っているのですが、うまくいきません。これだとn=3000のsigmaの値しかでてきません。sigmaにfor文で繰り返し求めたすべての値を格納したいです。初心者で低レベルな質問ですみません。どなたか教えていただけませんか。 sigma=0; for n=1:3000, if n <=300 dsig=1; elseif n <= 950 dsig=-1; elseif n <= 1700 dsig=1; elseif n <= 2550 dsig=-1; elseif n <= 3000 dsig=1; end sigma =sigma + dsig; end

みんなの回答

回答No.4

こんな感じでしょうか? --------------------- function getsigma1() fid = fopen('sigmaout.csv','w'); fprintf(fid,'Steps,dsig,sigma\n'); sigma = 0; for n = 1:3000   if n <= 300     dsig = 1;   elseif n <= 950     dsig = -1;   elseif n <= 1700     dsig = 1;   elseif n <= 2550     dsig = -1;   elseif n <= 3000     dsig = 1;   end   sigma = sigma + dsig;   fprintf(fid,'%d,%f,%f\n',n,dsig,sigma); end fclose('all'); -------------------------------- function getsigma2() sigma = 0; for n = 1:3000   if n <= 300     dsig = 1;   elseif n <= 950     dsig = -1;   elseif n <= 1700     dsig = 1;   elseif n <= 2550     dsig = -1;   elseif n <= 3000     dsig = 1;   end   sigma = sigma + dsig;   if(n ~= 1)     sigma(n) = sigma(n-1) + dsig;   else     sigma(n) = dsig;   end end fprintf('%f\n',sigma);

kyousiga
質問者

お礼

結局、c言語ですることで解決しました.協力してくれた方々ありがとうございました.

回答No.3

>どうしてもn=3000の値が繰り返されてしまって。 もしかして…nの要素分(3000個)、sigmaの配列を作っていないとかw matlabの構文ははっきり知りませんが、そこから再度調べ直してみては如何でしょうか?

回答No.2

「補足」にあったプログラムをCに置き換えて実行してみましたが…この様な結果を欲しているのでしょうか? (下記URL参照)

参考URL:
http://fin215.hp.infoseek.co.jp/sample.txt
kyousiga
質問者

補足

はい。まったくそのとおりでございます。 どうしてもn=3000の値が繰り返されてしまって。

回答No.1

このfor文は繰り返されている間dsigの値は変化しますが「入力されている」だけ。よってsigmaの値は「n=3000のsigma」しか入力されません。

kyousiga
質問者

補足

少し、考えてこのようにやってみたのですが…。if文のなかにいれてやればと考えたのですが。これだとsigmaとnの要素数が違ってしまうからだめなんですよね。要素数を合わせるのにはどのようにすればよろしいのでしょうか?すみません。 sigma=0; for n=1:3000, if n <=300 dsig=1; sigma(n) =sigma + dsig; elseif n <= 950 dsig=-1; sigma(n) =sigma + dsig; elseif n <= 1700 dsig=1; sigma(n) =sigma + dsig; elseif n <= 2550 dsig=-1; sigma(n) =sigma + dsig; elseif n <= 3000 dsig=1; sigma(n) =sigma + dsig; end end

関連するQ&A

  • Matlabについて質問です

    Matlabについて質問です。 長さがdataの数のデータがあり次のように分類したいのですが、データの中の-0.0074などが1になってくれません。 どこに原因があると思われますか?よろしくお願いします! recd=zeros(length(data),1); for n=1:length(data) if data(n)<-0.01; recd(n) = 0; elseif(-0.01<=data(n)<0); recd(n) = 1; elseif(0<=data(n)<0.01); recd(n) = 2; else recd(n) = 3; end end よろしくお願いします!!

  • matlabで複数条件のif文を行列計算で行うには?

    matlabで複数条件のif文を行列計算で行うには? matlabではfor文などは行列計算で回したほうが高速化できると聞きました。 for文でのやりかたはわかったのですが、複数条件でのif文ではどのように書けばよいのでしょうか? 自分のプログラムは以下のようなものです for i=1:100 for j=1:100 theta_kari=atan(abs(B(j,i))/abs(A(j,i))); if A(j,i)>=0&&B(j,i)>=0 theta(j,i)=theta_kari; elseif A(j,i)<0&&B(j,i)>=0 theta(j,i)=theta_kari+(pi/2); elseif A(j,i)<0&&B(j,i)<0 theta(j,i)=theta_kari+pi; elseif A(j,i)>=0&&B(j,i)<0 theta(j,i)=theta_kari+(pi/2*3); end end end よろしくお願いします

  • MATLAB 波形切り出し格納

    MATLAB 波形切り出し格納 脳波波形の切り出しと格納をMATLABで行いたいのですが、波形が150(uV)を超えたところから、1秒間(1000ポイント)切り出し、新しいXというフォルダに格納するのを繰り返したいのですが、プログラムが分かりません。よろしくお願いします また波形のプロットまではできていてeditを用いてfor文で繰り返しを表現したいです。よろしくお願いします。

  • プログラムについて(matlab)

    matlabで以下のプログラムを実行しているのですが、 グラフが表示されません。 何故でしょうか、、。 ----------------------------------------- t=10 for r=400:1:2000 %波長 if 400<= r <700 y= 18*t.^(0.75); elseif 700<= r <1050 y= 18.*t.^(0.75).*10.^(0.002.*(r-700)); elseif 1050<= r <1150 y= 90*t.^(0.75)*1*1; elseif 1150<= r <1200 y= 90.*t.^(0.75).*1.*10.^(0.018.*(r-1150)); elseif 1200<= r <1400 y= 90*t.^(0.75)*1*8; elseif 1400<= r <1500 y= 5600*t.^(0.25); end plot(r,y) end ------------------------------------------------------ お詳しい方よろしくお願いします.

  • MATLAB

    matlabで for x=1:10 for y=1:10 for z=1:10 f=2*x+3*y-4*z; end end end のようなプログラムで、最大のときのfの値と、そのときのx,y,zの値を表示させるにはどのように書けばいいでしょうか?

  • IF文 教えてください (BASIC)

    1, 2, 3, 4 のいずれかの値を取る3つの乱数 x, y, z を同じ行に表示させ,さらに x=y=z=1 のときは「大当」, x=y=z≠1 のときは「当」, x, y, z のうち2つだけが一致したときは「惜」, 上記以外の場合は「残念」 と表示するプログラム ELSEIF文を用い,IF文およびEND IF文は1回で済ませる。 乱数x,y,zを表示することと IF文が分かりません。 RANDOMIZE FOR n=1 TO 3       PRINT INT (RND*4)+1; NEXT n

  • matlabのfor文について

    matlabについて基本的な質問があります. たとえば a1 = 11 a2 = 32 a3 = 53 a4 = 63 for i = 1:length(a1) ○○○ end for i = 1:length(a2)  ○○○ end for i = 1:length(a3)  ○○○ end for i = 1:length(a4)  ○○○ end の時に,for文を一つにまとめるにはどうすればいいですか?

  • MATLABでのデータ保存(for文等で)

    初めて質問させていただきます。 MATLABで以下のようなfor文で1000回まわすとします。 for i=1:1000 c=rand(1000,1); fid=fopen('data1','wt'); fprintf(fid,'%f\n',c); end このままでは、最終的に1000回目のcの値だけがdata1に保存されます。 そうではなく、1~1000回目のcの値をそれぞれ別のファイルとして保存したいと思っております。(できればdata1~data1000という形で) 参考書などを読みあさったのですが、どう組めばいいのかわからず困っています。 for文等で、保存するファイル名の名前を、繰り返す度に変える方法などご存知の方おりましたら教えてください。よろしくおねがいします。

  • MATLABで行列を配列に格納する方法

    MATLAB初心者で大変申し訳ありませんが、行列の格納の仕方がわからないので、投稿させていただきました。 for k = 1:1:10 k=k; t(:,:)=load(sprintf('test%5.5i.txt',k)); end 具体的に言いますと、上記のプログラムで、test00001~test00010.txtというファイルを任意の行列t(:,:)で読み込んでいるのですが、このt(:,:)をkと対応させて、例えばk=1の場合のtをt[1]、k=2の場合のtをt[2]などの配列に格納し、それを自由に呼び出し、計算を行いたいと考えております。 基礎がわかっていないためにどうしていいかわかりません。 宜しく御願いします。

  • matlabにおける行列の格納

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

専門家に質問してみよう