2015-10-19 92 views
0

我試圖使用surf()方法繪製方程(x-​1)/​(y+​2)^​1.8倍頻程。但圖表是另一回事。如何繪製(x-1)/(y + 2)^ 1.8?

這裏是我的代碼:

p = linspace(1,50, 100); 
t = linspace(1,48,100); 
ans = zeros(length(p), length(t)); 
ans = compute_z(p, t, ans); 
figure; 
surf(p, t, ans'); 

試圖計算z = (x-​1)/​(y+​2)^​1.8使用輔助函數compute_z

function [ans] = compute_z(ans, p, t) 
     for i = 1:length(p) 
      for j = 1:length(t) 
       ans(i,j) = (p(i) - 1)/(t(j)+2)^1.8; 
      end 
     end 

我試圖產生this graph.

+0

'ANS =零(長度爲(p),長度(T));'是多餘的。如果有的話,你應該在compute_z內部分配ans。 –

+0

@MarcusMüller好的..但圖中沒有改變..如何繪製正確的圖。 – CodeNinja101

回答

4

沒有必要爲您的compute_z-method,你可以你meshgrid和矢量化。

p = linspace(1,50, 100); 
t = linspace(1,48,100); 

[P, T] = meshgrid(p,t); Z = (P-1) ./ (T+2).^1.8; 

figure; 
surf(P, T, Z); 

(測試在Matlab,而是應該在八度的工作以及)

+1

看起來像你打我回答:) –

+0

感謝它的工作! – CodeNinja101

0

你的問題是你定義compute_z輸入, anspt。但是,您可以按順序調用ptans的功能。你看到問題了嗎?

ans不是函數的輸入,只是輸出,所以不需要將其列爲輸入。此外,不要調用變量ans,這是在沒有指定輸出變量名稱時MATLAB使用的默認變量名稱,因此可能會被覆蓋。

這裏是我的建議:

p = linspace(1,50, 100); 
t = linspace(1,48,100); 
z = zeros(length(p), length(t)); 
z = compute_z(p, t); 
figure; 
surf(p, t, z'); 

compute_z定義如下:

function z = compute_z(p, t) 
    for i = 1:length(p) 
     for j = 1:length(t) 
      z(i,j) = (p(i) - 1)/(t(j)+2)^1.8; 
     end 
    end