在将旧的 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 代码吗?
使用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)
错误:
那么我尝试引用包,但也失败了:
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)
错误:
我有以下代码
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) 我最近一直在玩一些数学,我想知道是否有人编写/看过日志的C++实现,可以指定基数(根...?)?如:
数学函数定义http://i1091.photobucket.com/albums/i383/dannydeth1/forumla.png
显然我更喜欢将基数作为参数:double d = log(b,x);
感谢您的时间和任何答案,非常感谢.:}
编辑:另外,我认为它会使用泰勒系列?
所以我们在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) 我在计算对数并将答案用作变量时遇到了麻烦.有人可以帮忙吗?
这是一个示例 - 单击第一个按钮时会出现简单的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) 我正在尝试计算这个公式,
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中计算这样的操作?
我正在尝试加速以下代码:
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用于测试目的
这是我写的:
>>> 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)
有人可以解释一下我做错了什么吗?谢谢.
考虑以下游戏:
彼得希望以最少的猜测获胜.
有明显的解决方案需要最坏情况的O(log n)猜测,但是一位朋友告诉我,有一个解决方案具有比这更好的渐近行为.我的朋友对吗?