簡體   English   中英

為向量中的每個元素創建函數句柄(Matlab)

[英]Creating a function handle for each element in a vector (Matlab)

我有以下問題。 我試圖創建一個函數句柄,它是一個向量。 特別是我有這樣的東西

    EQ0 = @(W) m1.^2*(exp(W))-m2.^2

其中m1和m2是相同維的向量。 因此,對於每個m1(i)和m2(i),我都想擁有一個手柄W(i)。 我需要它以便在下一步中使用fsolve在類似以下的內容中找到那些W(i)

    n=size(m1)        
    x0 = zeros(n);
    Wbar = fsolve(EQ0,x0)

我嘗試使用arrayfun,但收到以下錯誤

   EQ0 = arrayfun( @(W) m1.^2*(exp(W))-m2.^2, m1=m1e, m2=m2e)
   Error: The expression to the left of the equals sign is not a valid target for an assignment.

使用arrayfun的另一種嘗試導致了這種情況(這里我只是直接使用m1和m2向量,而不是像以前的情況那樣作為輸入)

    EQ0 = arrayfun( @(W) m1.^2*(exp(W))-m2.^2,:)
    Undefined variable arrayfun.

我顯然缺少了一些東西。 我在arrayfun上查看了一些提要,但看來我的問題有所不同。

任何建議表示贊賞。

因此,如果我理解正確,那么您希望為每個m1(i)或m2(i)擁有一個單獨的函數句柄EQ0(i),該函數句柄可以通過以下方式與向量W一起操作EQ0(i)= @(W)m1 (i)^ 2 *(exp(W))-m2(i)^ 2。 這個對嗎? 如果是這樣,您可以創建一個與m1維度相同的元胞數組,並在每個維度中具有一個函數句柄:

EQ0 = cell(size(m1));
for ii = 1:numel(m1)
   EQ0(ii) = {@(W) m1(ii)^2*exp(W)-m2(ii)^2};
end

編輯:另一個選項可能是:

EQ0 = @(W)arrayfun(@(Wel,m1el,m2el)m1el^2*exp(Wel)-m2el^2,W,m1,m2);
fsolve(EQ0, W_Values)

在此應預先定義m1,m2。 否則,您必須將它們添加為第一個匿名函數的參數。 因此,通過調用arrayfun(@(Wel, m1el, m2el)..., W, m1, m2)您可以對您在第一個參數中傳遞的匿名函數句柄定義的W, m1, m2的條目進行元素計算arrayfun。 但是由於您每次都想以不同的方式定義W ,因此您要為該arrayfun命令創建一個匿名函數,該函數將W作為參數。

暫無
暫無

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

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