2016-05-12 65 views
2

比方說,我們有如下數據:非因變量圖的平滑情節

A1= [41.3251 
    18.2350 
    9.9891 
    36.1722 
    50.8702 
    32.1519 
    44.6284 
    60.0892 
    58.1297 
    34.7482 
    34.6447 
    6.7361 
    1.2960 
    1.9778 
    2.0422]; 

A2=[86.3924 
    86.4882 
    86.1717 
    85.8506 
    85.8634 
    86.1267 
    86.4304 
    86.6406 
    86.5022 
    86.1384 
    86.5500 
    86.2765 
    86.7044 
    86.8075 
    86.9007]; 

當我繪製使用plot(A1,A2);上述數據,我得到這個圖:

enter image description here

是有沒有辦法讓圖形看起來像一個立方圖一樣平滑?

回答

3

當然可以。您可以插入關鍵點之間。這將需要一些欺騙。盲目地使用MATLAB的任何命令進行插值將不起作用,因爲它們要求獨立軸(在你的情況下爲x軸)增加。你目前無法用你的數據做到這一點...至少是開箱即用的。因此,你必須創建因爲有在A1(或A2因爲他們是在大小都等於)跨越從1到儘可能多的元素的值的虛設列表來創建一個獨立的軸和獨立插值陣列通過在分辨率中指定具有更精細間距的虛擬列表。這個更精細的間距由您想要在圖中引入的新點的總數控制。這些點將在虛擬列表的範圍內定義,但是隨着您增加新點的總數,每個點之間的間距將會減小。作爲一般規則,您添加的點數越少,所以情節應該更加平滑。一旦你這樣做,一起繪製最終值。

下面是一些代碼,您可以運行。我們將使用interp1爲我們和大部分工作進行插值。函數linspace在虛擬列表中創建更精細的點網格以便於插值。 N將是您想要繪製的所需點的總數。我現在已經做了500次,這意味着500點將用於使用原始數據進行插值。通過增加(或減少)總點數並觀察它對數據的平滑性有什麼影響來進行實驗。

我也將使用Piecewise Cubic Hermite Interpolating Polynomialpchip作爲插值的方法,如果您想獲得技術,基本上是三次樣條插值。假設A1A2已創建:

%// Specify number of interpolating points 
N = 500; 

%// Specify dummy list of points 
D = 1 : numel(A1); 

%// Generate finer grid of points 
NN = linspace(1, numel(A1), N); 

%// Interpolate each set of points independently 
A1interp = interp1(D, A1, NN, 'pchip'); 
A2interp = interp1(D, A2, NN, 'pchip'); 

%// Plot the data 
plot(A1interp, A2interp); 

我現在得到以下幾點:

enter image description here

+0

它的工作!非常感謝!它爲我節省了很多工作! –

+0

@Jdane不客氣:)祝你好運! – rayryeng