假設我生成以下列方式曲線滿足不等式:在倍頻3D繪圖
x=linspace(-2,2,50);
y=linspace(-2,2,50);
[xx,yy]=meshgrid(x,y);
mesh(xx,yy,4-(xx.^2+yy.^2))
反正是有強加的不平等,使得我只積值,其中x <ÿ?
假設我生成以下列方式曲線滿足不等式:在倍頻3D繪圖
x=linspace(-2,2,50);
y=linspace(-2,2,50);
[xx,yy]=meshgrid(x,y);
mesh(xx,yy,4-(xx.^2+yy.^2))
反正是有強加的不平等,使得我只積值,其中x <ÿ?
這與已經提供的另一個答案非常相似,但可能有助於您提到答案的「奇怪偏差」導致您的數據。基本上,創建一個面具是1
其中xx < yy
和0
否則:
mask = xx < yy;
那麼這個面膜適用於您的xx
和yy
網:
xx_mask = xx.*mask;
yy_mask = yy.*mask;
才把你繪製結果:
mesh(xx_mask, yy_mask, 4-(xx_mask.^2 + yy_mask.^2));
基本上唯一的區別就是這種方式你是將您的xx
和yy
矩陣中的不需要的值設置爲零,然後對其進行平方和繪製。
注意,這是用MATLAB代替八度測試,但他們應該給類似的結果。
一個可能的黑客攻擊:
x = y = linspace(-2, 2, 50);
[xx, yy] = meshgrid(x, y);
cond = xx < yy;
xx = xx .* cond;
yy = yy .* cond;
mesh(xx, yy, 4-(xx.^2+yy.^2));
嚴格地說,這將舉動所有座標對(x,y)
不從他們目前的位置符合標準x < y
到圖的原點:
上述解決方案只有在點(0,0)是圖表的一部分時纔有用。否則,它將該點添加到圖表中,然後嘗試繪圖,創建奇怪的效果,如下所示。
[![x=linspace(1,3,50);
y=linspace(1,3,50);
\[xx,yy\]=meshgrid(x,y);
mask = xx < yy;
xx_mask = xx.*mask;
yy_mask = yy.*mask;
mesh(xx_mask, yy_mask, 4-(xx_mask.^2 + yy_mask.^2));][1]][1]
什麼可以替代地進行是離開x和作爲是和只轉換的z軸值NA在礦井範圍不滿足條件y軸的值。
x=linspace(1,3,50);
y=linspace(1,3,50);
[xx,yy]=meshgrid(x,y);
mask = xx < yy;
function result = applyCondition(cond)
result = ifelse(cond, 0, NA);
endfunction
zz = 4-(xx.^2 + yy.^2);
mesh(xx, yy, zz + arrayfun(@applyCondition, mask));
此解決方案適用於所有情況,無論(0,0)是否屬於您的一部分,都不是。
完美修復了事物!謝謝你們指導我解決問題!如果我有更高的代表,我會投你一票! – mjnichol
@Engineero,你的回答完全是我的,除了我錯過了'mesh'的最後一個參數(我的bug)中的面具。你應該修好我的,而不是回答你自己。 – juliohm
@ juliohm你是對的。我開始試着用'find'完全不同的做法,甚至用'稀疏'來嘗試一下,但最終它只是融合到你的解決方案中。我會刪除它,因爲你一定會先刪除它。 **編輯:**我無法刪除。希望OP會看到這個並且標記你的。 – Engineero