首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将MATLAB重写为Maple

将MATLAB重写为Maple
EN

Stack Overflow用户
提问于 2016-07-28 04:47:48
回答 1查看 67关注 0票数 2

我有一个小的MATLAB符号脚本,如下所示

代码语言:javascript
复制
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

给定一个由z的函数组成的符号向量psi,它创建一个下三角符号矩阵f。

我正在尝试用Maple重写这一部分,这是我的新手。我试过了

代码语言:javascript
复制
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),它会报告

代码语言:javascript
复制
Error, (in f) too many levels of recursion

但它确实打印了f(4,1)。

谁能告诉我出了什么问题吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-28 07:10:32

你的代码非常接近(这让我想起这两种语言有时是多么的相似)。出现该错误消息的原因是,您需要在开始填充值之前声明f

这里有一个可能的解决方案:

代码语言:javascript
复制
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开始,并向其添加值。

代码语言:javascript
复制
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中用于指定数据结构中的索引的默认表示法。

还要注意,我使用:操作符抑制了每个循环中的输出;这样,您就可以在最后回显得到的矩阵f

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38622921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档