2016-07-27 63 views
2

我有一個小MATLAB腳本符號如下重寫MATLAB到楓木

syms z; 
psi(2)=exp(2*z-exp(z))/(1-exp(-exp(z))); 
psi(3)=exp(2*z-exp(z))/(1-exp(-exp(z)))*z; 
psi(4)=exp(2*z-exp(z))/(1-exp(-exp(z)))*z^2; 
f(1,1)=exp(2*z-exp(z))/(1-exp(-exp(z))); 
for i=2:4 
    f(i,1)=diff(psi(i),z); 
    for j=2:i 
     f(i,j)=diff(f(i,j-1)/f(j-1,j-1),z); 
    end 
end 
給定的符號向量PSI

包括z與功能,它創建一個下三角符號矩陣F。它運作良好。

我想重寫這部分在楓樹,我是新來的。我試過

psi(2) := exp(2*z-exp(z))/(1-exp(-exp(z))); 
psi(3) := exp(2*z-exp(z))*z/(1-exp(-exp(z))); 
psi(4) := exp(2*z-exp(z))*z^2/(1-exp(-exp(z))); 
f(1, 1) := exp(2*z-exp(z))/(1-exp(-exp(z))); 
for i from 2 to 4 do f(i,1):=exp(2*z-exp(z))/(1-exp(-exp(z)));  
for j from 2 to i do f(i,j):=diff(f(i,j-1)/f(j-1,j-1),z); 
od;  
od; 

東西在「diff」行中不明確,我只是選擇函數定義。如果我讓它輸出f(4,4),它報告

Error, (in f) too many levels of recursion 

但它確實打印了f(4,1)。

有人可以說出了什麼問題嗎?謝謝!

+0

是否認爲你是如何結束Maple的for循環....?!你可能能夠改變Maple中遞歸的最大深度,否則嘗試分割成4個連續的for循環,也許每個循環都有一個for循環。 – David

+0

您可以使用'od'或'end do'來終止Maple中的循環。 'fi'和'end if'一樣。就我個人而言,我使用'end'選項,但每個選項都是自己的。 – DSkoog

回答

2

你的代碼非常接近(並且提醒我有時這兩種語言有多相似)。錯誤消息的原因是,在開始填充值之前,您需要聲明f

這裏是一個可能的解決方案:

psi[2] := exp(2*z-exp(z))/(1-exp(-exp(z))); 
psi[3] := exp(2*z-exp(z))*z/(1-exp(-exp(z))); 
psi[4] := exp(2*z-exp(z))*z^2/(1-exp(-exp(z))); 

f := Matrix(1..4,1..4): 

f[1, 1] := exp(2*z-exp(z))/(1-exp(-exp(z))): 
for i from 2 to 4 do 
    f[i,1] := diff(psi[i],z): 
    for j from 2 to i do 
     f[i,j] := diff(f[i,j-1]/f[j-1,j-1],z): 
    end do: 
end do: 
f; 

注意這裏我聲明f是一個4x4 Matrix開始之前,我加油吧。此外,這裏使用[]表示法來指定索引。

另一個可能針對較大問題進行擴展的選項是在爲其添加值時爲f增加數據結構。在這裏,我們從1x1 Array開始,併爲其添加值。

psi[2] := exp(2*z-exp(z))/(1-exp(-exp(z))); 
psi[3] := exp(2*z-exp(z))*z/(1-exp(-exp(z))); 
psi[4] := exp(2*z-exp(z))*z^2/(1-exp(-exp(z))); 

f:=Array(1..1,1..1): 

f(1, 1) := exp(2*z-exp(z))/(1-exp(-exp(z))): 
for i from 2 to 4 do 
    f(i,1):=diff(psi[i],z): 
    for j from 2 to i do 
     f(i,j):=diff(f[i,j-1]/f[j-1,j-1],z): 
    end do: 
end do: 
f; 

這裏您會注意到我們在創建時使用了數組索引的()表示法。如果您使用陣列進行存儲,這是一種允許您在添加值時增長陣列的技術。

現在,在這兩種情況下,您還可以注意到我已使用[]來索引已存在的術語;方括號是Maple中用於指定數據結構中索引的默認表示法。

另請注意,我使用:運算符抑制了每個循環中的輸出;這樣你就可以在最後回顯產生的Matrix f

+0

非常感謝。有用。你是一位好老師。我學到了很多。 – user2792830