python - 定义一个二维函数数组而不首先单独构造每个函数(Python 或 MATLAB/Octave)
问题描述
(我很高兴在 Python 或 MATLAB/Octave 中完成以下任务。下面我概述了 Python 中的问题。)
我想通过重复定义一个 17x8 的函数数组
if 0<k<16:
f[k,n+1](j) = A(k,j)*f[k-1,n](j) + B(k,j)*f[k+1,n](j)
elif k==0:
f[k,n+1](j) = B(k,j)*f[k+1,n](j)
elif k==16:
f[k,n+1](j) = A(k,j)*f[k-1,n](j)
函数A(k,j)
和B(k,j)
没有索引,它们不需要数组。它们对于这个问题不是必不可少的。循环的初始值由已知值给出
if k==8:
f[k,0](j)=0
else:
f[k,0](j)=1
这适用于任意j
.
如何在二维数组中反复定义函数数组?我见过这样的例子,它们通过以下方式构造函数数组
myFuncs = [f0,f1,f2]
myFuncs[2](...) #calls f2
myFuncs
但是,这需要我在将它们集中到数组中之前创建并命名各个函数。相反,我需要在不命名 17x8 数组中的所有 136 个函数的情况下构建此表。我怎样才能做到这一点?
编辑:为了明确并证明可以将解决方案编写为 k 的函数,我试图解决的递归是
f[k,n+1](j) = sqrt(j+k-8)*f[k-1,n](j) + sqrt(k+j-7)*f[k+1,n](j)
对于 n=1 ,使用 I 的已知值n=0
可以获得以下结果:
f[9,1](j) = sqrt(j+1)
f[7,1](j) = sqrt(j)
与其他等于零,然后为n=2
f[10,2](j) = sqrt((j+1)*(j+2))
f[8,2](j) = 2*j+1
f[6,2](j) = sqrt(j*(j-1))
与其他零。但是,手动执行此操作容易出错,我想对此进行概括,因为我希望计算所有这些函数的其他两个递归。
解决方案
您可以将其实现为单个递归函数:
function ret = f(k,n,j)
if n==0
if k==8
ret = 0;
else
ret = 1;
end
else
if k==0
ret = A(k,j) * f(k-1,n-1,j);
else if k==16
ret = B(k,j) * f(k+1,n-1,j);
else
ret = A(k,j) * f(k-1,n-1,j) + B(k,j) * f(k+1,n-1,j);
end
end
请注意,这不是计算函数值的有效方法,因为我们将多次重新计算相同的值。最有效的方法是简单地计算 17x8 数组中给定值的所有值,从那里j
开始n=1
并从那里向上移动。或者,您可以将记忆添加到递归函数以避免重新计算值。
推荐阅读
- java - 在java中关闭资源和使扫描仪私有有什么区别?
- r - 如何使用`renderMenu`在闪亮(shinydashboard)中动态添加额外的`sidebarMenu`?
- firebase - 通过 Github Actions 持续集成平台远程构建 Flutter 应用找不到 GoogleService-Info.plist 文件
- dynamics-crm - 无法单击动态 Web 应用程序主页上的应用程序
- java - 圆形进度条颜色不变(Android)
- azure - 设置云后无法从 Jenkins 预配 Azure VM
- windows - 如果我使用 CreateWindow*() 而不是 CreateDialog*() 函数系列,我会有什么“缺点”?
- reactjs - 我想用 React 在 div 元素中添加参数
- react-native - React: Uncaught SyntaxError: Unexpected token < in JSON at position 0
- sass - Bootstrap 5 - 使用 row-cols() mixin 时丢失列类功能