2017-01-15 19 views
0
clear all 

syms s w 

G = 1/((s)*(s+1)*(s+2)); %transfer function 
G_w = subs(G,s,j*w); 
W= [-100:0.01:100]; %[min_range:step size:max_range] 
nyq = eval(subs(G_w,w,W)); 

x = real(nyq) 
y = imag(nyq) 

plot(x,y) 

このコードを実行できないようで、20行未満しかない行100 ++でエラーが表示され続けます。MATLABでシンボリック式を評価するときにゼロ除算

Error using symengine (line 59) 
Division by zero. 
Error in sym/subs>mupadsubs (line 139) 
G = mupadmex('symobj::fullsubs',F.s,X2,Y2); 
Error in sym/subs (line 124) 
    G = mupadsubs(F,X,Y); 
Error in nyquist2 (line 8) 
nyq = eval(subs(G_w,w,W)); %replace W with w in equation G_w 

これは表示されているエラーですが、どの専門家がこれを助けることができますか?

答えて

4

エラーは、配列Wを使用してG_wを計算していて、この配列に値が含まれているためエラーが発生し、エラーが発生したためです。 symengineを用い

エラー(線59)
除算ゼロによる。

あなたはこれを回避するために何ができるか、epsW0を交換することです。サイドノートとして

% Replace zeros with epsilon 
W(W == 0) = eps; 

nyq = eval(subs(G_w,w,W)); 

x = real(nyq) 
y = imag(nyq) 

plot(x,y) 

は、エラーが あなたコードの行100+の問題に文句されるのではなく、スタックトレースは、エラーが実際に関数内 に由来することを述べてあなたは、エラーは、あなたがそれ

Error using symengine (line 59)    <--- WHERE THE ERROR HAPPENED 
Division by zero.       <--- THIS IS THE ERROR MESSAGE 

Error in sym/subs>mupadsubs (line 139)  <--- THIS FUNCTION CALLED symengine 
G = mupadmex('symobj::fullsubs',F.s,X2,Y2); <--- THIS IS THE LINE THAT CALLED symengine 

Error in sym/subs (line 124)    <--- THIS FUNCTION CALLED mupadsubs 
G = mupadsubs(F,X,Y);      <--- THIS IS THE LINE THAT CALLED mupadsubs 

Error in nyquist2 (line 8)     <--- THIS FUNCTION (YOURS) CALLED subs 
nyq = eval(subs(G_w,w,W))     <--- THIS IS THE LINE THAT CALLED subs 
+0

こんにちは@Suever、 を作成するために呼び出されたコードに発生した場所のスタックトレースが注文され

を呼び出していること迅速な返信をありがとう!使用方法を聞いてもいいですか? [〜、ind] = min(abs(W)); W(ind)= eps; 私は直角に2直線のプロットを得ているようですが、それは私のナイキストプロット(通常は包囲)からかなり離れています。あなたの時間を取って申し訳ありません! あなたから聞いて欲しいです! – Niam

+0

@Niam私はそれを少しはっきりさせるように更新しました。基本的には 'W'のゼロ値を非常に小さなイプシロンに置き換えているので、ゼロで除算するのを避けることができます。あなたのプロットが期待通りに見えない限り、あなたが示した方法論はうまくいきます(例えば、1 /(s + 1)の伝達関数を試してみてください)。 – Suever

+0

ありがとう!私は今あなたのポイントを理解しています! – Niam

関連する問題