[英]How can I generalize this function to `n` terms?
我想創建一個函數,在某些指定區域上添加各種寬度的幾個高斯項:
G(a,b,x) = a_1 exp(- b_1 x^2) + a_2 exp(- b_2 x^2) + ... a_N exp(-b_N x^2)
我希望此函數輸出一個長度為x
的數組,對提供的參數a,b
的項求和,如下所示:
x = linspace(-2,2,1000);
N_gauss = @(a,b) a(:).*exp(-b(:)*x.^2);
如果a,b
僅具有單個值,則此示例實際上有效,但是當它們成為向量時,它就不再起作用(我想Matlab不知道應加,乘或保留向量是什么)。 這有可能嗎?
您可以完全通過矩陣乘法來執行此操作。 讓我們慢慢解決問題並逐步解決。 首先,您需要形成向量b
的元素與存儲在x
標量值的乘積。 首先創建一個二維值矩陣,其中每一行對應於b
的元素與x
的元素之間的乘積值。 所述元件(i,j)
在該矩陣中對應於第 i 個元素的乘積x
與第 j中元素b
。
您可以通過使用外部產品來實現。 將x
設為列向量,將b
設為行向量,然后執行乘法。 另外,請確保您對等式中的x
項進行平方。
term1 = (x(:).^2)*b(:).';
現在,您可以應用指數運算符,並確保將負數放在指數中,以便可以構建每個項的右側(即exp(- b_i x^2)
):
term2 = exp(-term1);
你需要做的最后一件事是乘以每個值與從右邊系數的2D矩陣a
向量。 您可以通過強制a
為列向量並執行矩陣向量乘法來實現此目的。
out = term2*a(:);
矩陣向量乘法是列向量a
與我們之前創建的2D矩陣中的每一行之間的點積。 這恰好對應於x
每個值的方程式求和。 這樣,這將實現x
每個值的高斯求和,並將其放入nx 1
向量中,其中n
是x
中元素的總數。 將所有這些放在一起可以使我們:
out = exp(-(x(:).^2)*b(:).')*a(:);
最終將其抽象為匿名函數,請執行以下操作:
N_gauss = @(a,b,x) exp(-(x(:).^2)*b(:).')*a(:);
此函數根據您的問題輸入向量a
, b
和x
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.