2017-05-22 56 views
3

我想surf此功能:如何在MATLAB中繪製(衝浪)矢量化方程?

z=w.'*p %(close form) 

其中:

w=[w0; w1] 
p=[cte0; cte1] 

還有,w是可變的,CTE 0和CTE 1可以是任何數字。 要使用surf我們需要meshgrid產生W0和W1:

z=w0*cte0+w1*cte1 %(open form) 
surf(z) 

我不想操縱我的公式:

[w0,w1]=meshgrid(-50:1:50) 

現在我們可以通過操縱方程這種形式只能達到回答,因爲在其他情況下,更大的等式不容易操縱它們。 除了符號工具箱之外,有沒有什麼辦法可以簡單地到達這個關閉形式的表面?

+0

什麼是你的代碼錯誤? –

+0

您在這裏沒有使用符號工具箱。 – Adriaan

+0

@AnderBiguri我不想以開放的形式將其可視化,我想以緊密的形式將其可視化?除了符號工具箱以外,還有其他解決方案嗎? – mohammadsdtmnd

回答

3

所以,讓我們說你開始你的「親密形式」公式爲anonymous function

z = @(w) w.'*p; 

它假定p已定義和要求的輸入的2×1。 MATLAB中的任何高級繪圖程序(例如fsurf)如何知道輸入應爲2×1(即一組獨立變量[x; y])?他們不會,除非你換這個函數在另一個函數,像這樣:

fxy = @(x, y) z([x; y]); 

所以,這個函數需要兩個變量作爲輸入,並且將它們連接起來,並在合適的形式傳遞它們的功能z。但函數fxy將如何處理xy的矢量或矩陣輸入?不好,所以我們必須要添加包裝來處理(的arrayfun提供)的另一層:

fxyMat = @(x, y) arrayfun(fxy, x, y); 

現在你有一個函數,向量或矩陣輸入兩個變量和最終評估你原來,未改變的方程。您現在可以使用fsurf繪製它無需在多個點自己的明確評估它(基本上,你讓fsurf爲你做):

p = [1; 2]; 
z = @(w) w.'*p; 
fxy = @(x, y) z([x; y]); 
fxyMat = @(x, y) arrayfun(fxy, x, y); 
fsurf(fxyMat, [-50 50]); 

而這裏的情節(只爲這一個簡單的傾斜平面例如):

enter image description here

+0

很好解釋,但是,在運行你的代碼之後,爲什麼這是無效的:'surf(fxyMat(w0,w1))'? 'w0'和'w1'是由'meshgrid'在主要問題中定義的。正確'fxyMat(w0,w1)'是無效的。 – mohammadsdtmnd

+0

@mohammadsdtmnd:它是無效的嗎?它對我來說評價很好。你有錯誤嗎?這給了我'fsurf',只是一個更高的分辨率:'surf(w0,w1,fxyMat(w0,w1));' – gnovice

+0

它的工作,這並不簡單:(但工作很好,ty。 – mohammadsdtmnd

0
[w0,w1] = meshgrid(-50:1:50) ; 

cte0 = rand ; 
cte1 = rand ; 
p = [repmat(cte0,size(w0)) ; repmat(cte1,size(w1))] ; 
w = [w0 ; w1] ; 
Z = w.*p ; 
+0

它是聰明,但有些東西錯過了,即使用'Z = w。'* p;'替換'Z = w。* p;',答案也不是完全正確的,這是校驗碼:'[w0,w1] = meshgrid (-50:1:50); cte0 = 2; cte1 = 2; p = [repmat(cte0,size(w0)); repmat(cte1,size(w1))]; w = [w0; W1]; Z = W '* p; 衝浪(W0,W1,Z) 圖 SYMS W0; SYMS W1; W = [W 0; W1]; Z = W'。* [2 ; 2]; fmesh(Z,[ - 50 50]);' – mohammadsdtmnd

+0

這是錯誤的! – mohammadsdtmnd