2016-03-09 29 views
1

如何處理這個問題如何管理傳說的許多情節

clear all; close all; clc; 
r = 0:5; 
zeta = 0:0.1:1; 
for i = 1:size(zeta(:)) 
    for j = 1:size(r(:)) 
    X(i,j) = sqrt((1+(2*zeta(i)*r(j))^2)/((1-r(j)^2)^2+ (2*zeta(i)*r(j))^2)); 
    end 
    plot(r,X); 
    xlabel('r = \omega/\omega_n'); 
    ylabel('M = \frac{X}{Y}'); 
    hold all 
    grid 
    [~,~,~,current_entries] = legend; 
    legend([current_entries {sprintf('\zeta = %i',zeta(i))}]); 
end 
figure 
plot(r,X) 
grid 

hold all命令似乎沒有正常工作。我能做些什麼來解決這個問題?

+0

1個步驟的你的採樣率被誤導的ζ= 0,考慮增加採樣率,並用半對數標度。 –

回答

2

您將要設置圖的DisplayName屬性。然後,當您創建legend時,標籤將自動填充。

plot(r, X, 'DisplayName', 'name') 

而且,需要進行轉義,你是傳遞給sprintf你傳說中的字符串監守sprintf認爲\z是控制字符。

plot(r, X, 'DisplayName', sprintf('\\zeta = %0.1f',zeta(k))) 

此外,hold on建議在hold all。另外,最好的做法是在調用hold以確保將其應用於當前軸時指定軸手柄。

hold(hax, 'on') 

因此,如果我們將這些變成你的繪圖代碼(連同@R.Falque的主意,用semilogy

r = 0:0.001:5; 
zeta = 0:0.1:1; 

hax = axes(); 

colors = hsv(numel(zeta)); 

for k = 1:numel(zeta) 
    X = sqrt((1 + (2 * zeta(k) * r).^2) ./ ((1-r.^2).^2+ (2*zeta(k)*r).^2)); 
    semilogy(r, X, ... 
       'DisplayName', sprintf('\\zeta = %0.1f',zeta(k)), ... 
       'Color', colors(k,:)); 
    hold(hax, 'on') 
end 

grid(hax, 'on') 

xlabel(hax, 'r = \omega/\omega_n', 'Interpreter', 'tex'); 
ylabel(hax, 'M = $\displaystyle\frac{X}{Y}$', 'Interpreter', 'latex'); 

L = legend('show'); 

enter image description here

+0

我想你修改了'X'的值,我找不到。但從zeta = 1的初始方程中,所有的值都在1以上。很好的技巧,顏色btw! –

+0

有沒有反正讓'zeta = 0.1而不是zeta = 1.000000e-1' – AlFagera

+0

@AlFagera更新。我更新了'sprintf'的[格式說明符](http://www.mathworks.com/help/matlab/matlab_prog/formatting-strings.html#bq0ybtd)以使用單個小數點('%0.1f') – Suever

1

您還可以使用電池陣列如下:

clear all; close all; clc; 
r = 0:0.001:5; 
zeta = 0:0.1:1; 

figure; 
for i = 1:length(zeta) 
    for j = 1:length(r) 
     X(j) = sqrt((1+(2*zeta(i)*r(j))^2)/((1-r(j)^2)^2+ (2*zeta(i)*r(j))^2)); 
    end 
    semilogy(r,X); 
    hold on 
    legend_string{i} = ['\zeta = ', num2str(zeta(i))]; 
end 
hold off 

grid 
xlabel('r = \omega/\omega_n'); 
ylabel('M = $\frac{X}{Y}$','Interpreter', 'Latex'); 

legend(legend_string); 

請注意,您有一個錯誤在X的定義中(從X(i,j)更正爲X(j))。

enter image description here