2015-04-23 22 views
3

這是給定的系統,我想繪製和獲得矢量場和他們與X軸的角度。我想找到閉合曲線的索引。使用matlab獲得矢量場和矢量場在閉合曲線上的角度?

The system

The system

The closed curve

我知道如何通過選擇方便點理論上做到這一點,看看矢量看起來像在這一點上。此外,我可以隨時使用

angles

計算的角度。不過,我在嘗試編碼時遇到了問題。如果問題不清楚,請不要打擾我。我以我理解它的方式問這個問題。我是matlab新手。請有人指點我正確的方向嗎?

回答

1

對於新來matlab的人來說,這是一個非常艱鉅的挑戰,我會建議先採取一些較小的挑戰,以便讓您習慣於matlab的約定。這就是說,Matlab是關於數字解決方案的,所以除非你想走下符號數學路線(在這種情況下,我可能會選擇使用Mathematica),你的第一個任務是決定極限和粒度你的模擬空間,然後定義它們,這樣你就可以應用你的系統方程。

有許多這樣做的方法 - 一些更有效的 - 但爲了便於理解,我提出這樣的:

軸定義單獨第一

xpts = -10:0.1:10; 
ypts = -10:0.1:10; 
tpts = 0:0.01:10; 

的A:B:C語法給出你的下限(a),上限(c)和間距(b),所以你會得到x的201點。如果更適合您,可以使用linspace表示法,通過在matlab控制檯中鍵入doc linspace來查看它。

現在您可以創建座標點的網格。你最終會得到三個三維矩陣,一個擁有你的空間的x座標,另一個擁有y和t座標。他們看起來多餘,但它是值得的,因爲你可以對它們使用矩陣運算。

[XX, YY, TT] = meshgrid(xpts, ypts, tpts); 

從這裏開始,您可以在這些矩陣上執行任何您喜歡的操作。因此,要計算x^2.Y你可以做

x2y = XX.^2 .* YY; 

記住的是,你會得到一個三維矩陣了出來,並在第三維的所有切片(對應於T)將是相同的。

的一些注意事項

Matlab具有良好的內置幫助系統。您可以在控制檯或'doc functionname'中鍵入'help functionname'以獲得快速提示,以打開幫助瀏覽器以獲取詳細信息和示例。他們真的很好,他們會有很大的幫助。

我使用XX和YY,因爲這只是我的偏好,但我避免使用單字母變量名作爲一般規則。你不需要。

矩陣乘法是默認值,所以如果你試圖做XX*YY你不會得到你所期望的答案!要進行元素相乘,請改用.*運算符。這將做A11 = B11 * C11,A12 = B12 * C12,...

到矩陣的每個元素提高到一個給定的功率使用.^,而不是^出於同樣的原因。同樣的部門。

您必須確保您的矩陣尺寸適合您的操作。要在矩陣上進行元素操作,它們必須具有相同的大小。要進行矩陣運算,他們必須遵循矩陣規則的大小,輸出也一樣。你會發現size()功能方便調試。

可以使用quiver來繪製矢量場。要分開繪製組件,您有更多的選擇:surfcontour和其他。查找幫助文檔,他們將鏈接到類似的類型。 plot系列主要關於線條,因此對於沒有創造性地使用標記,顏色和阿爾法的領域來說,它們幫助不大。

要繪製曲線或任何其他輪廓,您不必測試矩陣的值 - 由於粒度的原因,它無法正常工作 - 您可以使用具有特定輪廓值的contour繪圖。

動態方程的求解系統是完全可能的,但是你將會進行數值模擬,你的結果將再次受到網格粒度的影響。如果你有一些封閉的解決方案,比如你的phi表達式,他們可能會更容易在概念上工作,但在matlab中工作起來卻很困難。

這類問題在matlab中很容易理解,但它涉及到一些非基本的用法,除非您掌握Matlab的語法,否則很難遵循這些用法。我建議以2d網格開始,而不是

[XX, YY] = meshgrid(xpts, ypts); 

並計算x^2.y或x^2 - y^2等函數。習慣於使用quiver繪製它們或在強度圖或曲面中分別繪製座標。

+0

非常感謝你的時間和這個解釋。對此,我真的非常感激。我會更詳細地閱讀並繼續。非常感謝你。 – user5184

+0

這是一種樂趣,我希望它有助於:) – xenoclast