函式簡介
函式功能:MATLAB函式stream2使用插值算法生成繪製2-D流線圖所需數據。
語法格式:
XY = stream2(x,y,u,v,startx,starty)
生成向量(u,v)的流線圖數據。(x,y)定義了向量(u,v)的坐標。(x,y)通常是通過調用meshgrid函式生成的格線數據。(startx,starty)定義了流線的起點。在MATLAB幫助文檔MATLAB/User Guide/3-D Visualization/Volume Visualization Techniques/Visualizing Vectro Volume Data/Specifying Starting Points for Stream Plots對指定起點有更詳細的說明。(MATLAB R2010a)
返回值XY是一個元胞數組, 元胞數組中每個元素都表示一個點的坐標。可以使用cell2mat來查看其中的數據。
XY = stream2(u,v,startx,starty)
這種調用格式等價於以下:
>>[m,n] = size(u);
>>[x,y] = meshgrid(1:n,1:m);
>>XY = stream2(x,y,u,v,startx,starty);
XY = stream2(...,options)
options指定繪製流線圖時的一些選項。比如,步長、流線圖中點的個數。步長默認值0.1,點的個數默認值10000。
這樣生成流線圖數據後, 就可以使用streamline(XY)來繪製出流線圖。
相關函式:coneplot, stream3, streamline
程式示例
在二維平面上繪製一個正電荷的電場線圖
close all; clear; clc;
k = 8.9875e+9; % 比例係數
e = 1.602e-19; % 一個電子帶電量絕對值
e_r = 2.8e-15; % 電子的半徑
ke = k .* e; % k by e
% 指定區間: d=<x,y<=d,並生成格線數據
d = -e_r*40:e_r:e_r*40;
[x, y] = meshgrid(d);
% 計算電位
V_max = ke / e_r; % 正電荷的表面電勢最大,無窮遠處電勢為0
V = ke ./ sqrt(x.^2 + y.^2);
V(V==Inf) = V_max;
V(V>V_max) = V_max;
% 求電勢的梯度,即電場強度
[E_x, E_y] = gradient(-V);
% 繪製電場線分布
t = 0:2*pi/20:2*pi;
sx = e_r * cos(t);
sy = e_r * sin(t);
hold on;
plot(0, 0, 'ro', 0,0, 'r+'); % 標出正電荷
XY = stream2(x, y, E_x, E_y, sx, sy);
streamline(XY)
contour(x, y, V, linspace(min(V(:)), max(V(:)), 60));
axis([min(d), max(d), min(d), max(d)]);
hold off;
其中,代碼段:
XY = stream2(x, y, E_x, E_y, sx, sy);
streamline(XY)
等價於:
streamline(x, y, E_x, E_y, sx, sy);