我一直想知道像mathematica和mathlab等程序如何优雅而快速地绘制函数图.任何人都可以向我解释他们是如何做到这一点的,而且,我怎么做到这一点?它与计算机编程或数学的方面或课程有关吗?然后呢?
math graphics matlab wolfram-mathematica discrete-mathematics
Random.NextDouble()(一个从双[0.0,1.0的范围内))有时具有大的Int64相乘(让大的Int64 = 9000000000L),并且将结果地板以获得随机的Int64值比可以从随机获得较大.Next()(范围为[0,Int32.MaxValue)的Int32).
Random r = new Random();
long big = 9000000000L;
long answer = (long) (r.NextDouble() * big);
Run Code Online (Sandbox Code Playgroud)
在我看来,在[0.0,1.0]范围内Double的唯一值的总数提供了它可能生成的唯一Int64的数量的上限.事实上,一个松散的上限,因为许多不同的双打将映射到相同的Int64.
因此,我想知道:在[0.0,1.0]范围内,double的唯一值总数是多少?
如果你可以告诉我"大"可以采取的最大值是什么,以便"回答"可以是范围[0,大]的值,以及"回答"的值的分布是否均匀,假设Random.NextDouble()是统一的.
编辑:Double(double)在这里指的是IEEE 754浮点双精度,而Int64(long)和Int32(int)分别指64位和32位有符号2的补码.
灵感来自这个问题:在java中生成10位唯一随机数
虽然我使用C#,这个问题是语言无关,更多的是离散数学不是编程,但它困扰我不主要是从数学的好奇感,但是从想使用一个公式,只有当它做什么它一个程序员应该从安全角度来做.
language-agnostic random floating-point discrete-mathematics
我看到这个算法将采用数字或单词并找到所有可能的组合
我正在使用它,但它不会返回所有"真正的"组合.
PHP:
<?php
require_once 'Math/Combinatorics.php';
$words = array('cat', 'dog', 'fish');
$combinatorics = new Math_Combinatorics;
foreach($combinatorics->permutations($words, 2) as $p) {
echo join(' ', $p), "\n";
}
?>
Run Code Online (Sandbox Code Playgroud)
它返回:
cat dog
dog cat
cat fish
fish cat
dog fish
fish dog
Run Code Online (Sandbox Code Playgroud)
但这些都不是真正的组合,所有真正的组合也包括这些:
cat cat
dog dog
fish fish
Run Code Online (Sandbox Code Playgroud)
这就是我需要的,获得所有真实组合的方法:
cat dog
dog cat
cat fish
fish cat
dog fish
fish dog
cat cat
dog dog
fish fish
Run Code Online (Sandbox Code Playgroud) php algorithm combinations combinatorics discrete-mathematics
如何有效地枚举有限集上的所有偏序?
我想检查是否存在具有指定属性的部分订单.为了检查这一点,我将用蛮力来枚举小有限集上的所有可能的偏序.
我正在尝试优化具有多个输入变量(24到30之间)的目标函数.这些变量是三个不同统计变量的样本,目标函数值是t检验概率值.误差函数表示期望和实际t检验概率之间的误差(差的平方和).对于所有三个t检验,我只能接受误差小于1e-8的解决方案.
我正在使用scipy.optimize.fmin它,效果很好.有许多目标函数变为零的解决方案.
问题是我需要找到一个解决方案,其中变量介于0和10.0之间,并且是整数或不具有多个数字小数部分.有效值的示例是0 10 3 5.5 6.8.无效值的示例:-3 2.23 30或0.16666667.
我碰巧知道至少有一种解决方案,因为目标值来自实际测量数据.原始数据丢失了,我的任务是找到它们.但我不知道怎么做.使用试验/错误不是一种选择,因为每个变量有大约100个可能的值,并且给定变量的数量,可能的情况的数量将是100**30,这太多了.使用fmin很棒,但它不适用于谨慎的值.
有办法解决这个问题吗?如果我需要运行一个程序数小时才能找到解决方案,这不是问题.但是我需要在几天内找到大约10个目标值的解决方案,而且我没有新的想法.
这是一个MWE示例:
import math
import numpy
import scipy.optimize
import scipy.stats
import sys
def log(s):
sys.stdout.write(str(s))
sys.stdout.flush()
# List of target T values: TAB, TCA, TCB
TARGETS = numpy.array([
[0.05456834, 0.01510358, 0.15223353 ], # task 1 to solve
[0.15891875, 0.0083665, 0.00040262 ], # task 2 to solve
])
MAX_ERR = 1e-10 # Maximum error in T values
NMIN,NMAX = 8,10 # Number of …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种算法来解决以下问题.我有一组给定集合(ah)的子集(1-n).我想找到最小的子集合,这些子集将允许我通过组合构造所有给定的子集.此集合可以包含1-n中不存在的子集.
a b c d e f g h
1 1
2 1 1
3 1 1 1
4 1 1
5 1 1
6 1 1 1 1
7 1 1 1 1
8 1 1 1
9 1 1 1
Run Code Online (Sandbox Code Playgroud)
下面是两个可能的集合,其中最小的集合包含七个子集.我用x表示了新的子集.
1 1
x 1
x 1
x 1
x 1
x 1
x 1
x 1
1 1
x 1
x 1
x 1
x 1
x 1 1
x 1
Run Code Online (Sandbox Code Playgroud)
我相信这一定是一个已知问题,但我对算法并不熟悉.非常感谢任何帮助,以及更好的主题标题的建议.
谢谢!
图形着色让我走了很长的路,谢谢.但是,在我的情况下,允许子集重叠.例如:
a b …Run Code Online (Sandbox Code Playgroud) algorithm combinations graph-theory mathematical-optimization discrete-mathematics
对于x(t)具有间距dt(等于1/fs,fs即采样率)的给定离散时间信号,能量为:
E[x(t)] = sum(abs(x)**2.0)/fs
Run Code Online (Sandbox Code Playgroud)
然后我做了一个DFT x(t):
x_tf = np.fft.fftshift( np.fft.fft( x ) ) / ( fs * ( 2.0 * np.pi ) ** 0.5 )
Run Code Online (Sandbox Code Playgroud)
并再次计算能量:
E[x_tf] = sum( abs( x_tf ) ** 2.0 ) * fs * 2 * np.pi / N
Run Code Online (Sandbox Code Playgroud)
(这里因子fs*2*np.pi/N=脉动间距dk,文档fftfreq提供了有关频域间距的更多细节),我有相同的能量:
E[x(t)] = E[x_tf]
Run Code Online (Sandbox Code Playgroud)
但是...当我计算的功率谱密度x(t)使用scipy.signal.welch,我无法找到合适的能量.scipy.signal.welch返回频率f和能量的矢量Pxx(或每个频率的能量,取决于scaling我们在参数中输入的能量scipy.signal.welch).
我怎样才能找到E[x(t)]和 …
我有一个长度为 N 的整数数组,其中包含值 0, 1, 2, .... (N-1),表示整数索引的排列。
鉴于我也有 O(N) 的并行计算,确定排列是否具有奇偶校验的最有效方法是什么?
例如,您可以使用并行计算对 log(N) 中的 N 个数字求和。我也希望在 log(N) 中找到排列的奇偶校验,但似乎找不到算法。我也不知道这个“并行计算的复杂度顺序”是如何调用的。
我知道这不是提出这个问题的正确位置,但也许是一个聪明人遇到并有解决方案.
我正在尝试编写一个电脑游戏,我需要一个算法来解决这个问题:
游戏在2名玩家之间进行.每边都有1.000美元.有三个"盒子",每个玩家记下他要放入这些盒子里的钱.然后比较这些数量.谁在一个盒子里放了更多的钱,得分为1分(如果每个人得到半分).获得更多积分的人赢得了对手1.000美元.游戏示例:
玩家A:[500,500,0]玩家B:[333,333,334]
玩家A获胜是因为他赢得了方框A和方框B(但输掉了方框C).
问题:放钱的最佳策略是什么?
我有更多问题要问(算法相关,而不是数学相关)但我需要首先知道这个问题的答案.
更新(1):经过一些研究后,我了解到这些类型的问题/游戏被称为Colonel Blotto Games.我尽了最大努力,发现了很少(高技术性)的文件.简而言之,我所遇到的问题(如上所述)被称为简单的Blotto游戏(只有三个具有对称资源的战场).困难的是具有10个以上具有非对称资源的战场.我读过的所有文件都说简单的Blotto游戏很容易解决.问题是,他们都没有真正说出那个"简单"的解决方案.
更新(2):我写了一个小动作文件来演示Tom Sirgedas提到的论文中的策略.你可以在megaswf测试它.说明:单击三角形内的一个点.红色区域代表胜诉案例.蓝色区域代表丢失的情况,微小的白色线代表抽奖.
algorithm ×6
math ×4
combinations ×2
numpy ×2
python ×2
fft ×1
game-theory ×1
graph ×1
graph-theory ×1
graphics ×1
java ×1
matlab ×1
permutation ×1
php ×1
poset ×1
random ×1
scipy ×1