标签: logarithm

Matlab 日志与 Numpy np.log 不匹配

在将旧的 Matlab 代码重写为 NumPy 时,我注意到对数计算方面的差异。在 NumPy 中,我使用np.log,Matlab 使用log函数。

b = [1 1 2 3 5 1 1];
p = b ./ sum(b);
sprintf('log(%.20f) = %.20f', p(5), log(p(5)))
Run Code Online (Sandbox Code Playgroud)
import numpy as np
b = np.array([1, 1, 2, 3, 5, 1, 1])
p = b.astype('float64') / np.sum(b)
print(f'log({p[4]:.20f}) = {np.log(p[4]):.20f}')
Run Code Online (Sandbox Code Playgroud)

对于配备 M1 芯片的 MacBook Pro 2020,我发现小数点后第 16 位不匹配。

log(0.35714285714285715079) = -1.02961941718115834732  # Matlab
log(0.35714285714285715079) = -1.02961941718115812527  # NumPy
Run Code Online (Sandbox Code Playgroud)

我想得到完全相同的结果。知道如何修改我的 Python 代码吗?

precision matlab numpy logarithm numeric

1
推荐指数
1
解决办法
80
查看次数

你如何编码来确定Ada中值的对数?

使用Ada(GNAT):我需要确定给定值的10的幂.最明显的方法是使用对数; 但是无法编译.

with Ada.Numerics.Generic_Elementary_Functions;
procedure F(Value : in Float) is
      The_Log : Integer := 0;
begin
      The_Log := Integer(Log(Value, 10));
      G(Value, The_Log);
end;
Run Code Online (Sandbox Code Playgroud)

错误:

  • utilities.adb:495:26:"日志"不可见
    • utilities.adb:495:26:a-ngelfu.ads:24处的不可见声明,第482行的实例
    • utilities.adb:495:26:a-ngelfu.ads:23处的不可见声明,第482行的实例

那么我尝试引用包,但也失败了:

with Ada.Numerics.Generic_Elementary_Functions;
procedure F(Value : in Float) is
      The_Log : Integer := 0;
      package Float_Functions is new Ada.Numerics.Generic_Elementary_Functions (Float);
begin
      The_Log := Integer(Float_Functions.Log(Value, 10));
      G(Value, The_Log);
end;
Run Code Online (Sandbox Code Playgroud)

错误:

  • utilities.adb:495:41:没有候选解释符合实际值:
  • utilities.adb:495:41:调用"Log"时参数太多
  • utilities.adb:495:53:预期类型"Standard.Float"
  • utilities.adb:495:53:在a-ngelfu.ads:24调用"Log"时发现类型为通用整数==>,第482行为实例

logarithm ada

0
推荐指数
1
解决办法
1963
查看次数

为什么Math.Log只在我的for循环中崩溃?

我有以下代码

A = 1.0
B = 0.20
N = 8.0
for i in 1..Total
  t = Maxt * rand
  x = A * Math.cos(t) / (Math.log(B*Math.tan(t/(2*N))))
  y = A * Math.sin(t) / (Math.log(B*Math.tan(t/(2*N))))
end
Run Code Online (Sandbox Code Playgroud)

如果我注释掉For循环它会执行正常并产生我想要的结果之一.如果我没有注释掉for循环,它会生成以下内容.我是Ruby的新手,主要是好奇为什么它只在for循环出现时才会中断.

rubyfile.rb:22:in `log': Numerical argument out of domain - log (Errno::EDOM)
    from rubyfile.rb:22
    from rubyfile.rb:20:in `each'
    from rubyfile.rb:20
Run Code Online (Sandbox Code Playgroud)

ruby for-loop logarithm

0
推荐指数
1
解决办法
946
查看次数

一个C++实现的日志,可以指定基础?

我最近一直在玩一些数学,我想知道是否有人编写/看过日志的C++实现,可以指定基数(根...?)?如:

数学函数定义http://i1091.photobucket.com/albums/i383/dannydeth1/forumla.png

显然我更喜欢将基数作为参数:double d = log(b,x);

感谢您的时间和任何答案,非常感谢.:}

编辑:另外,我认为它会使用泰勒系列?

c++ math logarithm

0
推荐指数
2
解决办法
1240
查看次数

警告:内置函数log2的不兼容的隐式声明

所以我们在C中有这个程序,我们需要使用base-2对数函数,得到n的基数2的对数.这是代码:

#include <math.h>

int partSize(int n) {
    return log2(n);
}
Run Code Online (Sandbox Code Playgroud)

但是在编译时,它会给我们以下警告.

sim.c:在函数中partSize:sim.c:114:警告:内置函数的不兼容隐式声明log2

这是我们使用的命令

 gcc $file -o $name.out -lm 
Run Code Online (Sandbox Code Playgroud)

c compiler-errors logarithm

0
推荐指数
1
解决办法
3865
查看次数

为什么这个math.log函数不起作用?

我在计算对数并将答案用作变量时遇到了麻烦.有人可以帮忙吗?

这是一个示例 - 单击第一个按钮时会出现简单的4*4计算,但单击math.log(100)函数的按钮时没有任何反应...

<html>
<head>
<script language="JavaScript">

function Multiply(form)
{
var m = 4*4;
form.MultiOut.value = m;
}

function Log(form)
{
var l = math.log(100);
form.LogOut.value = l;
}
</script>

<FORM>
A normal calculation - 4*4:
<INPUT NAME="calc" VALUE="Calculate" TYPE=BUTTON 
onClick=Multiply(form)>
<INPUT NAME="MultiOut" SIZE=15>
<br>
A log function calculation:
<INPUT NAME="calc" VALUE="Calculate" TYPE=BUTTON 
onClick=Log(form)>
<INPUT NAME="LogOut" SIZE=15>
</FORM>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

javascript logarithm

0
推荐指数
1
解决办法
65
查看次数

在Android中使用Math.log

我正在尝试计算这个公式,

i = (495 / (1.0324 - 0.19077 * (Math.log(76.2 - 25.4)) + 0.15456 * (Math.log(170.18))) - 450);
Run Code Online (Sandbox Code Playgroud)

而不是给出20.6的正确答案,它显示错误的答案9.59!

然后我发现Math.log函数输出错误!如何在Android中计算这样的操作?

java android logarithm

0
推荐指数
1
解决办法
3079
查看次数

用Python中的对数加速一个大循环

我正在尝试加速以下代码:

from math import log
from random import random

def logtest1(N):
    tr=0
    for i in range(1,N):
        T= 40 + 10*random()
        tr += -log(random())/T
Run Code Online (Sandbox Code Playgroud)

我是python的新手(来自matlab)...而这个相同的代码在python中运行速度比matlab(和Julia)慢5倍,这引起了我的注意.

我尝试使用numba和一个长尾小鹦鹉包装器,而不是python的numpy函数,但根本没有任何改进.

我很感激任何帮助.谢谢.

编辑:整个事情是蒙特卡罗模拟,所以N非常大... 10e6用于测试目的

python performance matlab logarithm

0
推荐指数
1
解决办法
673
查看次数

使用日志时python中的数学域错误

这是我写的:

>>> import math
>>> 2/3*math.log(2/3,2)
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下我做错了什么吗?谢谢.

python math logarithm

0
推荐指数
1
解决办法
5736
查看次数

近似数发现算法

考虑以下游戏:

  • 约翰和彼得同意一个数字n.
  • 约翰选择1和n之间的数字x.
  • 彼得提出了一系列猜测ķ 1和之间Ñ.对于每个猜测:
    • 如果X/2≤  ķ  ≤2 X,然后彼得获胜.
    • 否则,约翰告诉彼得x是否小于k.

彼得希望以最少的猜测获胜.

有明显的解决方案需要最坏情况的O(log  n)猜测,但是一位朋友告诉我,有一个解决方案具有比这更好的渐近行为.我的朋友对吗?

algorithm search logarithm

0
推荐指数
1
解决办法
72
查看次数