这是Fortran 90代码的一部分。
where (abs(A-B)>e)
no_converge=1
elsewhere
no_converge=0
end where
A和B是某些特定维度的数组,e是标量。我不得不说我对编程语言并不熟悉。
我使用了f2matlab
,但它在这个Fortran声明中做得很差。
我想知道Matlab的等价物是否是这样的:
if abs(A-B)>e
no_converge=1 ;
else
no_converge=0 ;
end
这是对的吗?
no_converge是标量(Fortran声明中的integer
),在不同的部分使用,以便开始其他一些循环。
我将非常感谢您的任何建议,请告诉我是否需要更多信息。
答案 0 :(得分:1)
不正确,不。在Fortran中no_converge
应该是与A
和B
相同大小(和形状)的数组;其元素将设置为1
,其中abs(A-B)>e
和0
位于其他地方。因此,在您的Matlab代码no_converge
中,不应该是标量而是数组。但是,如果没有你的声明,我只是在做出有根据的猜测。向我们展示一些(更多)代码。
我没有在这台计算机上使用Matlab,所以无法检查,但如果内存对我很好,你可以做一些非常相似的事情,比如这个
no_converge(abs(A-B)>e) = 1
no_converge(abs(A-B)<=e) = 0
前提是no_converge
与Fortran案例一样,是一个与A
和B
大小和形状相同的数组。
答案 1 :(得分:0)
Fortran中的WHERE
statement将循环与条件组合在一起,但仅适用于赋值。
no_convergence
必须
A
和B
相同的向量。所以,您提供的代码肯定是错误的。
我不知道你是否可以在Matlab中做类似的事情,但是你总是可以做一个明确的循环并测试收敛元素。
答案 2 :(得分:0)
Fortran中的WHERE构造可以用MERGE单行替换,f2matlab可以更好地翻译:
no_converge = merge(1,0,abs(A-B)>e)