2016-06-16 6 views
0

私は2つの変数の間の関係を取得するコードを書いた。コードは次のようにされています。しかし、私が得た曲線が飛散ポイントですMatlabプロットでポイントを接続する方法は?

for fn=0.1:0.1:10 
    for Qe= [0.1,0.5, 1, 5] 
     fn2=fn.*fn; 
     Mg=abs((Ln*fn2)/(((Ln+1)*(fn2)-1)+1i*(((fn2)-1).*fn.*Qe*Ln))); 
     semilogx(fn,Mg,'b','linewidth',7); 
     hold on; 
     save; 
    end 
end 

enter image description here 。私はすべてのポイントを接続したい。 fnのステップポイントを上げると、つまりfn = 0.1:0.001:10になると良いが、非常に長い時間がかかります。

+0

どのようにあなたはおそらくあなたがしたいと思うラインの種類を記述するための線データを提供する必要がありますか?あなたのプロット関数を呼び出しますが、それは少し遅いです、 – DaMachk

+0

で問題を解決できます@ DaMachk 'semilogx'はプロット関数です – Adriaan

+0

' semilogx'で 'b-''を試してください。それが助けにならない場合は、あなたのデータにnansがあるか、あなたのデータセットがそれぞれ単一のデータポイントです。 –

答えて

3

問題は、繰り返しごとに1つのポイントをプロットすることです。ループを実行し、ベクトルとして点を保存し、ベクトルをプロットする最後の1つのプロットを呼び出します。これにより、自動的に接続された線が生成されます。

fn=0.1:0.1:10 
Qe= [0.1,0.5, 1, 5] 
Mg = zeros(numel(fn),numel(Qe)); %initialise output 
for ii=1:numel(fn) 
    fn2=fn(ii)^2; 
    for jj = 1:numel(Qe) 
     Mg(ii,jj)=abs((Ln*fn2)/(((Ln+1)*(fn2)-1)+1i*(((fn2)-1).*fn(ii).*Qe(jj)*Ln))); %save in matrix form 
    end 
end 

figure 
hold on; 
semilogx(fn,Mg(:,1),'b','linewidth',7); % Generate plots with different colours 
semilogx(fn,Mg(:,2),'r','linewidth',7); 
semilogx(fn,Mg(:,3),'y','linewidth',7); 
semilogx(fn,Mg(:,4),'g','linewidth',7); 
+0

あなたの答えは大変ありがとうございました。私は問題がどこにあるのか分かりましたが、改良されたコードを試しましたが、 "Mg (ii、jj)= abs ... "Matrixディメンションは同意しなければならず、なぜわかりません! –

+0

@ Mr.Noahそれが動作していない場合、答えをeptしてください。私はその数式で 'fn'を見逃してしまったので、1つの要素ではなく配列を作ることができます。他の入力( 'Ln')を提供していないので、これがすべての欠陥かどうかを確認することはできません。これは、MATLABがあなたに投げることができる最も簡単なエラーの1つです.LHSのサイズを確認し、RHSのサイズを確認します。エラーの場合は一致しません。 – Adriaan

+0

もちろん、それがうまくいかない場合は、その理由を知りたいのですが、私はそれを解決しようとすることができます。今動作している場合( 'Ln'がスカラーの場合にそうです)、再度受け入れるように気をつけてください。 – Adriaan

0

このコードを使用して解決できました。それは...(

%%Parameters%% 
Ln=8; 
Mgmin=0.88; 
Mgmax=1.18; 
Qe= [0.25,0.3,0.35,0.7,1.65,4,8]; 
c= {'b','m','r','g','y','c','k'}; 
%%Gain Vs Frequecny Function%% 
fn=0.1:0.001:10; 
fn2=fn.*fn; 
%%Gain Curve%% 
figure; 
for j=1:7 
    for i=1:9901 
     Mg(i)=abs((Ln*(fn2(i)))/(((Ln+1)*(fn2(i))-1)+1i*(((fn2(i))-1).*fn(i).*Qe(j)*Ln))); 
    end; 
    semilogx(fn,Mg,c{j},'linewidth',3); 
    hold on; 
    plot(fn,Mgmax,'k'); 
    hold on; 
    plot(fn,Mgmin,'k'); 
    save; 
end; 
+1

プロット関数は非常に高価で、今は約70000回呼び出します。だから、あなたが何らかのパフォーマンスを得たいのであれば、プロットする前にデータを完全に処理するようにしてください。 –

関連する問題