MATLABを用いて1/s^2+s+1のシステムの整定時間を求める方法

このQ&Aのポイント
  • MATLABを使って1/s^2+s+1のシステムの整定時間を求める方法をご教示いただけますか?
  • MATLABを用いて1/s^2+s+1のシステムの整定時間を求める際、最初の立ち上がりの時間を除外したいのですが、後ろから探索する方法はありますか?
  • MATLABを用いて1/s^2+s+1のシステムの整定時間を求める際、立ち上がりの時間を除外する方法について教えてください。
回答を見る
  • ベストアンサー

整定時間

MATLABを用いて1/s^2+s+1のシステムの整定時間を下記のように求めたのですが、このプログラムでは、最初の立ち上がりの時に±5%に入る部分もカウントされてしまうらしいので、このグラフを後ろから探索する方法で求めたいのですが、どのようにすれば求まるか教えてください。 》 num = [1]; 》 den = [1 1 1]; 》 t = 0:0.01:15; 》 [y,x,t] = step(num,den,t); 》 plot(t,y),grid 》 L = find(abs(y-1)>=0.05); 》 Ts = t(L(length(L))) Ts = 5.2800

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

  • ベストアンサー
  • zoe76
  • ベストアンサー率100% (1/1)
回答No.2

結論から書きますと, そのプログラムで求まった整定時間Ts=5.28[s]は正しいと思います. ステップ応答において, 目標値の5%に収束する時間を, (時間のデータの)後ろ側から探索したいという要望ですが, 以下の方法はどうでしょうか. plot(t, y), grid の行のあとに実行します. ------ L=length(t); % ベクトルtの要素数がLに入ります while y(L)>0.95 & y(L)<1.05 L=L-1; end Ts=t(L); ------ whileループでは, 目標値(=1)の5%以内に入っているとき, つねにLの値を1ずつ減らしていきます. yの値が5%を超えるとき---このときの時刻がt=Ts 整定時間となっています---, ループから抜け出ます. この時点でのLの値が, 整定時間に相当する要素数に等しくなっていますので, Ts=t(L)として算出します. これを実行すると, Ts=5.28 となりました. つまりsamurai999さんの結果と同じです. samuraui999さんのプログラムの一部をもう少しスマートに書き直すとすれば, Ts = t(L(end)) とするくらいでしょうか. でも結果は同じです.

samurai999
質問者

お礼

とても助かりました。 ありがとうございます。

その他の回答 (1)

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

スクリプトを見た感じだと、 このままで、すでに、最後の±5%になる時刻が求まるようになっていると思いますが。 試してみました?

samurai999
質問者

お礼

回答ありがとうございます。 ちゃんと試したのですが、整定時間の求め方に誤りがあるといわれてレポートを返されてしまったんです。 このプログラム以外に整定時間を求める方法はないのでしょうか?

関連するQ&A

  • MATLAB による ステップ応答

    MATLABでシミュレーションしました。 伝達関数G(s)=770/(12500s+1)を状態表示に以下のように変換して、 初期値=100を与えた時のステップ応答を行いました。 ------------------------------------------------------------- num1 = 770; den1 = [12500 1]; [APlant BPlant CPlant DPlant] = tf2ss(num1, den1); x0Plant = 100 ------------------------------------------------------------- 結果、グラフはt=0の時、初期値の100から出て始まると予想していたのですが、結果として6.5から始まりました。 この原因が不明です。 もし、よろしければご意見をお願いします。

  • 加速度から変位の変換について

    下記のようにMatlabにて積分して加速度時刻歴波形を速度、変位に変換しようとしています。 実測も変位データと照らし合わせてもに全然合っていなく、変位になっていないので困っています。 間違っているのでしょうか?完全に一致するとは思いませんが。。。。。 どなたかご教授下されば幸いです。 %t:時間[sec] %acc:加速度波形[Gal] acc=wave(7,:); vel=cumtrapz(acc,t); dis=cumtrapz(vel,t); figure subplot(3,1,1)  plot(t,acc,'r'),grid on  xlabel('time[sec]'),ylabel('ACC[cm/s~2]') subplot(3,1,2)  plot(t,vel,'r'),grid on  xlabel('time[sec]'),ylabel('VEL[cm/s]') subplot(3,1,3)  plot(t,dis,'r'),grid on  xlabel('time[sec]'),ylabel('DISP[cm]')

  • 1/fゆらぎの傾きについて

    私は今音の1/f ゆらぎについて研究していています。 まず傾きが既知のホワイトノイズ(傾き0)やピンクノイズ(傾き-1)、ブラウンノイズ(傾き-2)の音をMATLABで高速フーリエ変換を行ってスペクトル解析を行って周波数ごとのパワーを算出してエクセルで両対数をとって直線近似をしています。 結果、ホワイトノイズは0と正しいのですが、ピンクノイズは傾き-0.48、ブラウンノイズは傾き-0.98と約1/2の値となってしまいます。 強度はMATLABで算出された強度Pそのままを使っているのですが、文献などを見ると、dBの値で強度が表されいるので、そこに原因があるかと思うのですが・・・ 何かわかる方がいらっしゃればよろしくお願いいたします。 以下プログラム↓ [y,Fs]=wavread('pinknoize.wav'); y1 = y(:,1); Y = fft(y1,Fs/10); Y2 = abs(fftshift(Y)); Y3 = Y2(length(Y2)/2+1:length(Y2)); l = linspace(0,Fs/2,length(Y3));

  • 十進BASICでの衝突プログラミング

    十進ベーシック超初心者です。二次元の箱の中に円を置き、そこで衝突を繰り返すプログラムをつくりたいのですが行き詰っています。 箱の中だけでの衝突は、以下のようにプログラムできたのですが、円にぶつかるときどのようにプログラムをくんで跳ね返させればいいかわかりません。どなたか教えて下さい。 SET WINDOW -20,20,-20,20 DRAW GRID(2,2) PLOT LINES: -10,-10 ;10,-10;10,10;-10,10;-10,-10 DRAW CIRCLE WITH SCALE (2) LET X=-10 LET Y=-10 LET T=0 LET V=4.53574748 LET A=56.654968 LET VX=COS(A) LET VY=SIN(A) 100 PLOT LINES:X,Y ; IF VX>0 THEN LET LX=20-(10+X) END IF IF VX<0 THEN LET LX=20-(10-X) END IF IF VY>0 THEN LET LY=20-(10+Y) END IF IF VY<0 THEN LET LY=20-(10-Y) END IF LET T=MIN(LX/ABS(VX),LY/ABS(VY)) LET X=VX*T+X LET Y=VY*T+Y IF T=LX/ABS(VX) THEN LET VX=-VX END IF IF T=LY/ABS(VY) THEN LET VY=-VY END IF GOTO 100 END

  • wxMaximaでグラフ化させるにはどうすれば?

    wxMaximaでグラフ化させるにはどうすればいいでしょうか? y(s):=6.76/s(s^2+0.884*s+6.76), y(s)を逆ラプラス変換したものがy(t)である。 y(t):=ilt(6.76/s(s^2+0.884*s+6.76),s,t); wxplot2d(y(t),[t,0,10]); 上記の範囲でグラフ化させようとしたのですができません。 plot2d: expression evaluates to non-numeric value everywhere in plotting range. plot2d: nothing to plot. このようなエラー文がでます。 どうすればグラフが表示されるのでしょうか。 できれば間違ってる部分を訂正してもらえるとありがたいです。 できるだけ早くお願いします。

  • プログラムについて(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 ------------------------------------------------------ お詳しい方よろしくお願いします.

  • 複雑なマクロ計算のプログラム

    使用するデータは、エクセルのファイルで、3列n行あります (下の値は適当です。値は2行目から) x y t 7.4 8.3 6.2 1.0 2.7 3.9 5.8 4.7 3.6 ・ ・  ・ ・ ・ ・ マクロにて入力する変数は、d, hs, htの値です。 これらの値を入力して以下の関数 f(x,y,t)=c値を求め、 (x, y, t, c)の列で別のCSVファイルに保存する 例えば、(x,y,t)は、(x1,y1,t1)から(xn,yn,tn)まであるとします。 (x1,y1,t1)の時、  [step1]   Σα(Σの下にはi=1、上には、n)   i=1の時、  [step2]u,wを変数とします   (x1-xi)/hs=u1_1,   (y-yi)/hs=v1_1,   とする   (t-ti)/ht=w1_1   とする  [step3]L,M,N,P,Qを変数とします   {(u1_1)^2+(v1_1)^2}=L1   (w1_!)^2=M1   とする   もしも、(L1)<1 ならば、   (2/π)*{1-(L1)}=N1とする   そうでなければ、N1=0とする   もしも、(M1)<1 ならば、   (3/4)*{1-(M1)}=P1とする   そうでなければ、P1=0とする   (N1)*(P1)=Q1 とする  [step4]   次に、[step1]にもどりi=2の時で[step2]→[step3]と処理する。   その結果、Q2が求まる。   これを、i=nの時まで繰り返し、   Q1~Qnまでが求まる。  [step5]      Q1~Qnまでを全部足す。これをαとする。   足した値αに、1/{d*(hs^2)*ht} をかける。   出た値が、(x1,y1,t1)=c1である。 以上の、[step1]から[step5]まで繰り返し、(xn,yn,tn)=Cnまでもとめます。 C1からCnまでを、 別のエクセルファイルでx,y,tの隣の列に、書き込んでいき、保存。 という流れです。 これを、 マクロを記録することはできるのですが、 ファイルによって、x,y,tが何行もあるとなると、一貫してコーディングができないため、知恵をお貸しください。 よろしくお願いします。

  • ラプラス変換で微分方程式を解くのですが・・

    y"+2y'-3y=6e^(-2t)・・・(1) 解:-2exp^(-2t)+11/2exp^(-3t)-3/2e^t の解き方なのですが、 L(y")=s^2L(y)-sy(0)-y'(0) L(y')=sL(y)-y(0) L(y)=Y として、(1)を変換して、 s^2Y-sy(0)-y'(0)+2sY-2y(0)-3Y=6/s+2.....(2) (s^2+2s-3)Y=6/s+2+2s-14+4.......(3)Yの係数をまとめる (s+3)(s-1)Y=6/s+2+2s-10.........(4)左辺を因数分解する Y=6/(s+3)(s+2)(s-1)+2s/(s+3)(s-1)-10/(s+3)(s-1).....(5)1/(s+3)(s-1)をかける Y=[3/2(s+3)-2/(s+2)+1/2(s-1)]+[3/2(s+3)+1/2(s-1)]+[-5/(s+3)+-5/(s-1)]....(6)部分分数分解 y(t)=[3/2e^(-3t)-2e^(-2t)+1/2e^t]+[3/2e^(-3t)+1/2e^t]+[-5e(-3t)-5e^t]............(7)各項を逆変換 y(t)=-2e^(2t)-2e^(-3t)-4e^t......(8) となってしまいます。 どこで躓いているのかわかりません。どなたか教えてください。

  • y''+9y=sin(2t)のラプラス変換

    ラプラス変換の勉強のため、 http://www.ice.tohtech.ac.jp/~nakagawa/laplacetrans/Laplace6.htm の問題を少しずつ解いています。しかし、 y '' + 9y = sin(2t)  ただし y(0) = 1, y'(0) = 0 で足踏みしています。 L[y ''] + 9L[y] = L[sin(2t)] -y'(0) + s(-y(0) + sL[y]) + 9L[y] = 2^2 / (s^2 + s^2) L[y](s^2 - s + 9) = 2^2 / (s^2 + s^2) L[y] = 2^2 / (s^2 + s^2) ・ 1 / (s^2 - s + 9) ここで、1 / (s^2 - s + 9) をどう分解して良いか分かりません。 どのようにしていけばいいでしょうか? ・1 / ((s + 3) (s - 3) - s) ・1 / ((s + 1)^2 -3s + 8) ・1 / ((s - 2) (s + 1) + 11) ・別の方法 どうぞよろしくお願いします。

  • matlabできる方教えてください

    matlab初心者です。 入力信号(sin波)に階段波形をかけるプログラムをかきたいのですが、うまくいきません。 以下は、私がかいたプログラムです。 わかる方がいらっしゃいましたら回答宜しくお願いします。 clear all;close all; fs= 250; t_l=[0 1]; t=t_l(1)+1/fs:1/fs:t_l(2); X = sin(2*pi*2*t); Y = sin(2*pi*10*t); Z = stairs(X).*Y; figure stairs(t,Z)

専門家に質問してみよう