首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >符号枫叶向量中的数值替换

符号枫叶向量中的数值替换
EN

Stack Overflow用户
提问于 2013-10-03 08:16:16
回答 2查看 654关注 0票数 0

我下载了一个Maple proc,它返回表达式的向量(例如,v),其中每个表达式都是以具有符号条目的其他向量(p,a)表示的。例如:

代码语言:javascript
运行
AI代码解释
复制
> v := myProc();
> v[1];
p[2] + a[1]
> v[2];
p[5] + a[3] + sqrt(a[1])
...

如果将向量'a‘和'p’定义为向量'a‘和'p’,那么在向量'v‘生成后,我希望能够通过将数值赋给向量’p‘和’a‘来计算它的表达式:

代码语言:javascript
运行
AI代码解释
复制
a := Vector(3,1):  
p := Vector(5,2):

我得到了这样的结果:一个向量的值被重新分配,而另一个向量的值没有:

代码语言:javascript
运行
AI代码解释
复制
> v[1]; 
p[2] + 1
> v[2];
p[5] + 1 + sqrt(1)

如能对这一问题的性质有任何见解,将不胜感激。我一直在研究与这个proc相对应的Maple文件,试图在Vectors返回表达式之前将值赋值给'p‘和'a’,但这相对来说是不成功的,因为我对Maple比较陌生,主proc中的许多子过程似乎最终需要符号向量才能成功地返回Vector 'v‘。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-03 16:41:56

第一个向量中由p[i]返回的条目中的xearm被称为转义的局部变量。因此,它们与全局p向量的条目有不同的地址,这就是它们无法按照您的预期进行计算的原因。

你可以这样做,如下所示。替换,

代码语言:javascript
运行
AI代码解释
复制
v:=f[1];

通过,

代码语言:javascript
运行
AI代码解释
复制
v:=f[1];
v:=convert(v,`global`);

a[i]b[i]xearm返回的第一个结果中似乎被索引到全局名称ab中,并且没有与p[i]相同的问题。

使用我先前答案中正确使用的示例,这里有一个有问题的版本,它显示了类似的行为。

代码语言:javascript
运行
AI代码解释
复制
restart:

myProc:=proc()
       local w, p;
       w:=Vector(2);
       w[1]:=p[2] + a[1];
       w[2]:=p[5] + a[3] + sqrt(a[1]);
       return w;
    end proc:

v:=myProc():

v[1];
                             p[2] + a[1]

v[2];
                                         (1/2)
                       p[5] + a[3] + a[1]     

a:=Vector(3,1):
p:=Vector(5,2):

v[1];
                              p[2] + 1

v[2];
                              p[5] + 2

v:=convert(v,`global`):

v;
                                 [3]
                                 [ ]
                                 [4]
票数 0
EN

Stack Overflow用户

发布于 2013-10-03 09:03:18

您是否完全确定p已成功地作为调用Vector(5,2)的结果分配给

以下的工作,对我来说,如预期。

代码语言:javascript
运行
AI代码解释
复制
restart:

myProc:=proc()
           local w;
           w:=Vector(2);
           w[1]:=p[2] + a[1];
           w[2]:=p[5] + a[3] + sqrt(a[1]);
           return w;
        end proc:

v:=myProc():

v[1];
                             p[2] + a[1]

v[2];
                                         (1/2)
                       p[5] + a[3] + a[1]     

a:=Vector(3,1):
p:=Vector(5,2):

v[1];
                                  3

v[2];
                                  4

我可以想出一些棘手的方法来编写myProc,这样它的行为就像您所描述的那样,但它们大多都是人为的。例如,我可以在p[5]p[2]的实例周围放置两对未计算的引号(两对左单引号)。

如果在查询v[2] (并获得涉及未评估的索引引用到p的意外输出)之后立即发出命令,您会得到什么信息?

代码语言:javascript
运行
AI代码解释
复制
%;

如果在有问题的情况下,你只发出命令,

代码语言:javascript
运行
AI代码解释
复制
p;

如果在有问题的地方发出命令,你会得到什么

代码语言:javascript
运行
AI代码解释
复制
map(eval,v);

您是否可以向myProc的源提供一个URL

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

https://stackoverflow.com/questions/19164131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文