2013-01-13 10 views
0

在使用兩個數據集計算數值積分時,我遇到了一些問題。 爲了整合,我使用了simpsons 1/3規則。由於差分分辨率而產品規則的數值積分問題

function I = Simpsons(f,a,b,n) 
    if numel(f)>1 % If the input provided is a vector 
     n=numel(f)-1; h=(b-a)/n; 
     I= h/3*(f(1)+2*sum(f(3:2:end-2))+4*sum(f(2:2:end))+f(end)); 
    else 
     h=(b-a)/n; xi=a:h:b; 
     I= h/3*(f(xi(1))+2*sum(f(xi(3:2:end-2)))+4*sum(f(xi(2:2:end)))+f(xi(end))); 
    end 

此代碼正確計算積分。

現在問題發生在乘法值的計算過程中。

例如我有兩個函數f和g都取決於相同的變量。 變量在相同的範圍內。 SO下限和上限相同。

$\int_a^b \! f(x) *g(x) \, \mathrm{d} x.$ 

這裏x的分辨率是不同的。對於f(x)我們有1000個數據,對於g(x)我們有1700個數據點。所以逐元素乘法不能完成。

如何解決這個整合..

回答

1

你需要進行插補的功能之一,fg,其他的功能點,即達到使用interp1 1D功能。

例如:

% x1 an x2 have the same limits but different # of elements 

x1 = linspace(-10,10,100); 
x2 = sort(rand(1,170)*20-10); # non-unifrom points from -10 to 10 

f1 = sin(x1); 
f2 = cos(x2); 

現在說,我們要乘F1 * F2,我們需要他們有元素#,所以

f2i= interp1(x2,f2,x1,'spline'); 

將使F2具有相同#元素爲f1,或者代替

f1i= interp1(x1,f1,x2,'spline'); 

將使f1具有與f2相同的元素。

+0

我正要做插值。但是,如果我這樣做,那麼我需要選擇個人點。這將是一項乏味的工作。是否有任何最簡單的方法..(這裏我說的是Microsoft Excel數據插值) – salmannsu

+0

我不明白什麼是單調乏味的...因爲你有xi,所以很難設置而不是xi其他矢量'x = linspace(XI(1),XI(結束),N)'? – bla

+0

對不起,我的意見。由於我有Excel文件中的所有數據,我嘗試使用excel進行插值。 http://peltiertech.com/WordPress/excel-interpolation-formulas/此鏈接顯示一些圖形表示。我以爲我需要使用遊標來獲取每個值。無論如何感謝您的幫助。我正在嘗試matlab中的所有內容。 – salmannsu