劉雅彬,魯曉東
(浙江海洋學院,浙江 舟山 316000)
在靜電場描繪實驗中,通常采用的方法是用一對電極產生的恒定電流模擬一對等量異種電荷產生的靜電場。直接測電流場有一定的困難,而借助電壓表可直接測出電場中的一系列等勢點進而畫出等勢線,再根據等勢線和電場線正交關系便可直接畫出電場線[1-2]。由于在電勢的探測過程中,介質分布的不穩(wěn)定性以及操作時探針的抖動都會造成記錄點的不準,使手繪的等勢線具有較大的不確定度性,增大了電場線描繪畸變的可能性[3]。提高儀器的精度是解決問題的一種方法,但效果往往不明顯,原因是流體介質的穩(wěn)定性不好控制,操作時呈現出較大的隨機性,因此可以運用最小二乘的方法去擬合這些點的曲線,使測量誤差得到最大的弱化。而使用MATLAB則可以直接利用它提供的優(yōu)化工具箱,簡化編程過程,并使處理的結果能以圖形方式直觀地表達[4]。
實驗中經常根據許多組觀測數據來確定它們的函數曲線,這就是實驗數據處理中的曲線擬合問題。曲線擬合的目的是就是要把數據點的固有規(guī)律表現出來,但誤差的存在會使擬合產生一定程度的失真,所以必須考慮通過怎樣的途徑使誤差影響程度最小[5]。
最小二乘準則就是使實驗值與擬合值的殘差平方和達到最小的條件下進行函數參數的估計。不妨設數據(xi,yi),估計參數為(α,β),擬合的函數為y=Φ(x,α,β),最小二乘法就是使誤差yi-Φ(xi,α,β)的平方和最小,即
實際上是使擬合的曲線與各數據點的距離最均勻,以此達到弱化誤差對結果的影響,達到優(yōu)化曲線的目的[6]。
當實驗的等勢點數據記錄到坐標紙后,必須把數據點的坐標值(x,y)存儲到矩陣中以便于MATLAB的讀取及處理。為區(qū)分不同的等勢線或不同的等勢線采集的點數量可能不一樣,每條等勢線的采集點坐標必須存儲到一個獨立的二維矩陣。
MATLAB軟件提供了很多基于最小二乘準則的曲線擬合函數,若曲線形狀是確定的,則可以用Lsqcur vefit()。它是一個非線性最小二乘擬合函數,本質上是求解目標函數的優(yōu)化問題。其使用典型格式為 [z,resnor m]= lsqcur vefit(f un,beta0,xdata,ydata)其中f un是要擬合的非線性函數,簡單的形式可以用inline函數進行定義,如f(x,y)=a*sin(b*x+y),f=inline('a*sin(b*x+y)','a','b,'x','y')。如復雜可以寫成m文件,具體參考相關書籍[7];beta0是估計參數初始值,xdata,ydata是擬合點的數據即實驗測得數據,z是返回的系數矩陣,即擬合的曲線特性參數,resnor m為殘差平方和[8]。
對于曲線未定得的可用多項式最小二乘擬合,其命令是A=polyfit(x,y,m)其中x表示函數中的自變量矩陣,y表示因變量矩陣,A是輸出的系數矩陣,即多項式的系數。多項式在自變量x處的擬合值y可用以下命令計算:y=polyval(A,x),進而算得擬合曲線的殘差平方和。
圖1 手工描繪等勢點及電場線
以同軸圓柱體水槽模型形成的模擬場為例,對其進行處理。首先看由傳統(tǒng)方法描繪的靜電場,各環(huán)分布不均勻圖1并且比較毛躁。由Matlab處理時,則先根據模型得到擬合方程形式并寫為:這樣把坐標輸入點(x,y)看作函數的自變量,而f(x,y)=0就是擬合值f(x,y,a,b,r)的目標值,優(yōu)化的目標函數就簡化為 ∑[f(x,y,a,b,r)-0]2。當把這些坐標紙上的數據點轉存到matlab后,可直接調用函數Lsqcurvefit(),就得到擬合方程的估計參數(具體程序見附錄),方程的圖形化結果如圖2。為比較他們的準確性,可以計算它們的百分差分布,其中理論值[9]的計算按(1)
VA,a,b為實驗所測量的值,r為點到圓心的距離,百分差計算結果如表1,可以看出最小二乘法比手工方法估計的參數更接近實驗值。
圖2 matlab等勢點描繪及電場線
表1 實驗結果比較
從示例中看出利用Matlab擬合靜電場的曲線非常方便,也適合其他實驗曲線的擬合。使用時要注意的是Matlab提供的最小二乘工具都是在一定范圍內尋找擬合函數的局部最優(yōu)解,所以一定要結合實驗條件對搜索區(qū)間、初始值等加以約束,提高最佳參數的命中率和程序運行速度。
程序附錄:(擬合一個圓方程,其他等勢點與此類同)
L1=[-0.95 0;-0.6 0.6;0 0.85;0.7 0.6;0.9 0;0.6-0.65;0-0.9;-0.6-0.65];%數據由坐標紙上讀得
plot(L1(:,1),L1(:,2),'o');grid on;%打印記錄點
axis([-5,5,-5,5]);hol d on;%坐標紙大小
beta0=[0,0,1];%在圓心為(0,0),半徑為1附近搜索參數
z=zeros(size(L1,1),1);
%寫出擬合方程形式
myf uncircle=inline('(L1(:,1)-beta(1)).^2+(L1(:,2)-beta(2)).^2-beta(3)^2','beta','L1');[beta,resnor m]=lsqcurvefit(myf uncircle,beta0,L1,z);%最小二乘擬合
a=beta(1);b=beta(2);r=beta(3);%返回擬合參數
h=ezplot(@(x,y)(x-a)^2+(y-b)^2-r^2,[-5 5-5 5]);%打印擬合圓
hold on;set(h,'Color','r','linestyle','--','linewidt h',2);
[1]張雅男,徐飛,葉影.Matlab模擬靜電場與模擬靜電實驗的比較[J].物理與工程,2008,18(2):35-37.
[2]羅明海,韓亞萍,等.最小二乘法在伏安法測電阻實驗中的應用[J].大學物理實驗,2012,25(2):88-90.
[3]馮君,呂軍.最小二乘法與作圖法在物理實驗中的應用研究[J].黑龍江大學:自然科學版,1996,13(4):83-87.
[4]葛一兵,王紀俊,卜敏.基于 MATLAB語言的靜電場實驗數據處理方法[J].大學物理實驗,2002,15(3):70-71.
[5]陳敏.應用Matlab擬合傳感器特征曲線[J].南京師范大學學報:工程技術版,2003,3(1):45-49.
[6]齊寶權.采用中心化最小二乘法進行測井曲線擬合[J].測井技術,2007,31(4):331-334.
[7]趙靜,但琦.數學建模與數學實驗[M].3版.北京:高等教育出版社,2008.
[8]王廣斌,劉義倫,金曉宏等.基于最小二乘原理的趨勢處理以及 Matlab的實現[J].有色設備,2005(4):4-7.
[9]竺江峰,魯曉東,夏雪琴.大學物理實驗[M].北京:中國水電水利出版社,2011.