我正在将Matlab代码翻译成Fortran 90并尝试翻译以下代码:
func= inline('x+ y+ z', 'x', 'y', 'z')
x(1)= 1, y(1)= 1, z(1)= 1
for n= 1:5
output= 5+ func(x(n), y(n), z(n))
x(n+ 1)= x(n)+ 1
y(n+ 1)= y(n)+ 1
z(n+ 1)= z(n)+ 1
end
在Fortran中我使用语句(内联)函数作为func(x,y,z)= x + y + z,但是,我无法将数组部分插入函数中。
我如何协商依赖' n'进入声明功能?我正在尝试类似下面的内容,但我还没有完成。
func(x, y, z)= x+ y+ z
x(1)= 1, y(1)= 1, z(1)= 1
do n= 1, 5
func(x(n), y(n), z(n))= x(n)+ y(n)+ z(n)
end
非常感谢任何帮助。
答案 0 :(得分:0)
这是一个扩展和格式化的评论,而不是答案。
现代Fortran中声明功能的一般建议是 Don,而不是。他们并不大,他们并不聪明。我认为,他们也被弃用了Fortran 90标准,因此,如果迂腐,你的要求是不一致的。
除此之外,很难提供任何具体的建议。如果我正确理解了Matlab,您展示的代码是一种计算5+3*1+3*2+...+3*5
的复杂方法。在Fortran 90中你可以写
sum([5, (3*k,k=1,5)])
计算。
也许如果我们了解您问题的更多背景,我们就能提供更好的建议。
答案 1 :(得分:0)
我确实意识到现代Fortran中的语句功能不是可行的方法。相反,我已经为函数创建了子例程,然后在循环中调用它们。这样,循环中函数的所有值都可以放入一个数组中(而不仅仅是最后一个值)。正确的代码片段如下所示:
subroutine funcsub(func, x, y, z, funcn)
implicit none
real, dimension(funcn), intent(out) :: func
real, dimension(funcn), intent(in) :: x, y, z
integer, intent(in) :: funky
func= x+ y+ z
end subroutine funcsub
do i= 1, 5
funcn= size(func)
call funcsub(func, x(i), y(i), z(i), funcn)
x(i+ 1)= x(i)+ 1
y(i+ 1)= y(i)+ 1
z(i+ 1)= z(i)+ 1
end do