2012-10-25 61 views
1

我想以圖形方式查找兩個曲面和x-y平面之間的交點。 (表面z1與xy平面和交點z2與xy平面的交點)MATLAB - 數組交集

我已經創建了代表曲面z1 = 3 + x + y和z2 = 4-2x-4y的數組以及xy平面的z3使用meshgrid。無處不在,似乎我可以用來查找數組之間交集的唯一命令是A和B是數組的交叉(A,B)命令。但是,當輸入相交(z1,z3)時,出現錯誤「A和B必須是矢量,或者'行'必須指定。」當我嘗試相交(z1,z2,'rows')時,我返回了一個0×21的空矩陣。我在這裏做錯了什麼?

我的代碼:

x = -10:10; 
y = -10:10; 
[X,Y] = meshgrid(x,y); 
z1 = 3+X+Y; 
z2 = 4-2.*X-4.*Y; 
z3 = 0.*X+0.*Y;   %x-y plane 
surf(X,Y,z1) 
hold on 
surf(X,Y,z2) 
surf(X,Y,z3) 
int1 = intersect(z1,z3,'rows'); 
int2 = intersect(z2,z3,'rows'); 
+0

難道你不能找到'z1 == 0'和'z2 == 0'的地方嗎?那將是與x-y平面的交點。或者如果你的網格中沒有確切的(X,Y),你的意思是你想要插值嗎? (另外,你的意思是「以圖形方式」找到交點?你可以用數學方法計算出交點 - 不難 - 然後將它們繪製在圖上?) –

+0

我可以通過分析來做到這一點。但是我正在使用MATLAB的數值方法課程,我假設我的導師希望我使用MATLAB函數查找相交曲線。 – photon

+1

閱讀'contour3d'或'contour'的幫助,看看其中一個函數是否可以幫助您以圖形方式確定兩個陣列的z == 0曲線。 –

回答

3

這聽起來像你想要的點,其中Z1 = Z2。爲了在數字上找到這些,你有幾個選項。

1)數字尋根:fsolve是能夠解決方程組。您可以將曲面制定爲一個矢量的函數,[x;y]並求解使兩個曲面相等的矢量。使用初始猜測X = 1的示例中,Y = 1如下:

z1 = @(x) 3 + x(1) + x(2); 
z2 = @(x) 4 - 2*x(1) - 4*x(2); 
f = @(x) z1(x) - z2(x); 

x0 = [1;1] 
intersect = fsolve(@(x) f(x), x0); 

2)最小化誤差:如果你被卡住離散數據(數組代替功能),則可以簡單地找到點,其中Z1 - z2最接近零。一個簡單的起點是取陣列Z1和Z2和找到的所有點,其中的差接近零:

tol = 1e-3; 
near_zero = abs(Z1 - Z2) < tol; 

near_zero將是一個邏輯數組,它是真每當Z1和Z2之間的差是小的相對到tol。您可以使用它來索引相應的meshgrid陣列中的X和Y以找到相交的座標。

0

一種簡單的方式(沒有大的函數調用)來解決這個如下:

x = -10:.1:10; 
y = -10:.1:10; 
[X,Y] = meshgrid(x,y); 
z1 = 3+X+Y; 
z2 = 4-2.*X-4.*Y; 
z3 = z1 - z2; 
[~,mn] = min(abs(z3)); 

的交點被定義爲(x, y(mn))

這當然是一個數值近似(因爲你想要的數值方法),受我還沒有探索(執行最低功能,當你需要從零遠無視值)

邊界條件

注意:如果您在尋找方程,請考慮對結果數據執行最小二乘逼近。