簡體   English   中英

如何將該函數歸納為`n`項?

[英]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向量中,其中nx中元素的總數。 將所有這些放在一起可以使我們:

out = exp(-(x(:).^2)*b(:).')*a(:);

最終將其抽象為匿名函數,請執行以下操作:

N_gauss = @(a,b,x) exp(-(x(:).^2)*b(:).')*a(:);

此函數根據您的問題輸入向量abx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM