如何通过包含它的等式定义变量? (蟒蛇)

时间:2018-02-18 14:07:40

标签: python math optimization

我正在解决一个问题,我必须打印所有的斐波那契数字,以便:

yellowMarkerPoints

我想通过大于或等于a的最小斐波纳契数来启动它们,以使我的程序运行得更快。为此,我需要定义变量“n”,使得第n个Fibonacci数满足上述条件(最小值大于或等于a)。要定义这样的变量,我需要找到满足斐波那契(n)通用项方程的最小“n”。

我试图通过制作一个for循环来找到它,但它最终变得像我从第一个Fibonacci数开始检查一样慢。任何人对如何有效地定义它都有任何想法?

P.S。这是我尝试过的代码:

cv::Mat R;
cv::Rodrigues(rvec, R);
cv::Mat cTw(4,4,CV_64F);
for (int i = 0; i < 3; i++) {
  for (int j = 0; j < 3; j++) {
    cTw.at<double>(i,j) = R.at<double>(i,j);
  }
  cTw.at<double>(i,3) = tvec.at<double>(i);
}

for (size_t i = 0; i < yellowMarkerPoints.size(); i++) {
  cv::Mat pts3D = (cv::Mat_<double>(4,1) << yellowMarkerPoints[i].x, yellowMarkerPoints[i].y, yellowMarkerPoints[i].z, 1);
  cv::Mat pts3D_cam = cTw * pts3D ;
  double dist_to_cam = sqrt( pts3D_cam.at<double>(0)*pts3D_cam.at<double>(0) + pts3D_cam.at<double>(1)*pts3D_cam.at<double>(1) + pts3D_cam.at<double>(2)*pts3D_cam.at<double>(2) );
}

1 个答案:

答案 0 :(得分:0)

对于F(n) n斐波纳契数的from math import sqrt phi = (sqrt(5) + 1) / 2 # the golden ratio F(n) = round(phi**n / sqrt(5)) 来说,最有用的公式可能是

n

因此,对于给定值a,获取from math import sqrt, log, ceil phi = (sqrt(5) + 1) / 2 # the golden ratio n = ceil(log(a * sqrt(5), phi)) 值的一个公式是

n-1

由于近似和舍入问题,您应该检查nn+1a的值,以确保获得所需的值。如果经常这样做,则应预先定义保持黄金比率和平方根值为5的变量。如果float的值太大而sub array_contains { my ($arr_ref, $search, $strict) = @_; if ($strict) { return (grep {$_ eq $search} @$arr_ref); } else { return grep {index($_, $search) != -1} @$arr_ref; } } 类型无法准确存储,那么您需要一个更复杂的例程来处理更大的数字。