[英]Matlab, define y vector by passing each element of x through function
[英]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.