需要一些帮助来理解一些 SCILAB 习惯用法

问题描述 投票:0回答:1

标题几乎涵盖了它 - 我需要一些帮助来理解几个 SCILAB 习惯用法(最终目标:将一些 SCILAB 代码转换为 Python)

直到今天,我从未听说过,更不用说见过 SCILAB 或其代码,但是在寻找一种方法来实现我当前项目(主要用 Python 编写)的目标时,我偶然发现了 SCILAB 模块根据它的描述,它似乎非常接近我正在尝试做的事情 - 足够接近,如果我将其翻译成我实际上能够胜任的语言,它可能会是完美的。由于我已经在使用 Python 工作,因此这将是翻译目标。

大多数 SCILAB 语言看起来很容易理解,而且我找到了已经有帮助的文档,但我遇到了一些我认为是 SCILAB 习惯用法的东西,这些习惯用法在 SCILAB 用户中显然很常见,以至于没有人/似乎没有什么(无论如何,我还没有遇到过)认为它们需要讨论,但对于该语言来说,这完全没有意义。

从我找到的模块中提取的这个函数可以看到这两个给我带来麻烦的示例:

function [r,theta]=trans_polar(x,y);  
r=sqrt(x.*x+y.*y);
theta=atan(y./x);
[nx ny]=size(x);
for i=1:ny
if x(i)>0 then
  if y(i)<0 then theta(i) = theta(i)+2*%pi;
  end
end
if x(i)<0 then theta(i)=theta(i)+%pi;
end
end
endfunction

很明显(或者至少对我来说是这样),这个函数的最终目标是将一对 X/Y 笛卡尔坐标转换为极坐标表示法,并将转换后的结果作为 r 和 theta 返回,但是代码中有几件事让我摸不着头脑,担心我在尝试翻译时可能会忽略一些重要的东西。

第一个是

r=sqrt(x.*x+y.*y)
声明。

显然,它取“某物”的平方根并将其分配给 r,但我无法准确确定“某物”是什么。如果其中没有这些句点/小数点,那么假设它取值的平方根(x 平方加 y 平方)并将其填充到返回值“r”中是完全合理的。既然它确实有它们,我就迷路了。下一行 (

theta=atan(y./x)
) 让我同样头疼 - 这两个语句中的句点/小数点是什么意思?

我能做出的最好猜测是,尾随句点可能意味着“将句点之前的变量视为浮点值”,就像在 C 中进行类型转换的简写方式 - 也许相当于此 C 代码?

int y = 5;
float x;

x = (float)y;

另一让我困惑的是第四行:

[nx ny]=size(x);
类似的语句出现在模块中的其余代码中,因此这似乎是一个非常常见的 SCILAB 习惯用法,但常见并不能告诉我它的实际含义,至少到目前为止,我在我找到的专门解决这种构造的文档。我发现了一些提示,让我认为它在功能上可能与旧的 Applesoft BASIC“DIM”关键字类似 - 如果您想要一个二维浮点数数组,每行 5 行,每行 8 列,您会说“DIM A(5,8)”,A 将是一个 5x8 浮点值数组,全部设置为 0.0 - 但这只是我的最佳猜测。

我的猜测至少是正确的邮政编码吗?如果没有,我应该如何阅读?

有哪位 SCILAB 用户可以帮我纠正一下吗?

idioms scilab
1个回答
0
投票

.*
./
都是乘法和除法运算的逐元素等效项,因为 x 和 y 可以是 n 维向量,所以这种实现是从 (x, y ) 作为极坐标的两个标量。

[nx ny]=size(x);
行是一个赋值语句,它将使用参数
size
调用的函数
x
的结果分配给两个变量,
nx
ny
,这里的逻辑相同,因为x可以是一个具有 n 维的向量,它可以返回多个值,该函数的 documentation 在说明部分中对此进行了说明。

理解这个函数的一个可能更简单的方法是想象一个简单的场景,其中

x
y
都是标量

所以

.*
*
相同,而
./
则为
/

[nx ny] = size(x)
会将 1 分配给这两个变量

© www.soinside.com 2019 - 2024. All rights reserved.