matlab - 在 Maple 中定义一个 4 阶张量
问题描述
我是 Maple 的新手。您能否帮我将以下短代码从 Matlab 转换为 Maple:
I=0.0;
for i1=1:3
I(i1,i1,i1,i1)=1.0;
end
我试过这样写:
unprotect(I);
I:=0.0;
for i1 from 1 to 3 do
for i2 from 1 to 3 do
for i3 from 1 to 3 do
for i4 from 1 to 3 do
if i1=i2 and i2=i3 and i3=i4 then I[i1,i2,i3,i4]:=1.0;
else I[i1,i2,i3,i4]:=0.0;
end if;
od;
od;
od;
od;
但它给出了以下错误:
Error, illegal use of an object as a name
Error, illegal use of an object as a name
谁能告诉我怎么了?
谢谢,
解决方案
如果你不坚持使用 name 会更容易I
,它在 Maple 中具有 -1 的 sqrt 的特殊含义。
restart;
interface(imaginaryunit=j):
local I:=Array((1..3)$4,datatype=float[8]);
for i1 from 1 to 3 do
I[i1,i1,i1,i1]:=1.0;
end do:
上面生成I
一个 4 维数组,其中每个维度的宽度为三个元素。并且三个“长对角线”元素都初始化为1.0。并且 Array 可以包含硬件双精度浮点数。所有其他元素默认为 0.0。
那是你想要做的吗?
如果您不坚持调用将其分配给特殊名称,I
那么事情会更容易。例如,
restart;
II:=Array((1..3)$4,datatype=float[8]):
for i1 from 1 to 3 do
II[i1,i1,i1,i1]:=1.0;
end do:
您不能I
仅通过取消保护来正确覆盖/禁用它的特殊含义。(即使可以,取消保护和重新定义I
也是一个不可行的想法,因为 Maple 命令的很大一部分将不再在给定会话中正确计算。)
Maple 的最新版本允许您创建该名称的所谓顶级“本地”实例,它可以与通常的全局名称分开使用I
。如果您坚持这条路线,并且如果您的 Maple 版本足够新以支持该路线,那么您可能还想更改虚数单位(-1 的平方)的接口设置,以免事情变得太混乱. 这就是我在上面的第一个示例中展示它的原因。
但我真的认为如果你只是使用另一个名字,你会发现事情最简单,比如II
你有什么。
您不需要datatype=float[8]
对数组进行限制。但是,如果您的后续代码模仿了一些(最初的)Matlab 代码,那么浮点数可能就是将分配到数组中的全部。有了它,对数组的一些操作可以更快。看看情况如何。
推荐阅读
- r - R中GAM模型的简单可视化
- java - Java中的UTF-8到ASCII转换
- python - 使用 sqlalchemy 在数据库表中添加 inf 作为浮点数
- windows - 处理 Windows 批处理作业并获取变量错误
- database - 使用 Redis 临时缓存文件
- database - 如何将 JSON 数据插入 PostgreSQL
- python - 如何理解 tensorflow 错误信息?
- mysql - 使用 Lambda 将 RDS 转储到 S3
- css - Angular Material + Theme Generator => `rgba($color, $alpha)` 的参数 `$color` 必须是颜色
- java - 使用 spring-social-twitter 1.1.2 直接发送消息