考虑以下三行Mathematica代码并注意输入行1和3完全相同(这是我发现的用于演示此行为的最小代码段).
>> Integrate[Exp[-a^2] Sin[2 p] ((a^2 + b^2) + b*Cos[p] + a*Sin[p]), {p, 0, 2 \[Pi]}]
0
>> $Assumptions = {t > 0};
>> Integrate[Exp[-a^2] Sin[2 p] ((a^2 + b^2) + b*Cos[p] + a*Sin[p]), {p, 0, 2 \[Pi]}]
8/3 Sqrt[a^2+b^2] E^-a^2
Run Code Online (Sandbox Code Playgroud)
请注意,积分应该产生0,就像在Mathematica的第一个答案中一样.我输入的假设显然与集成无关.这是一个错误(我使用Mathematica 8.0)?
更奇怪的是,如果我将积分分成2或3个积分的总和,则每个积分都会产生0.如果我从积分中取出不依赖于p的部分,那就相同了.
对我来说它看起来像一个bug,但如果有什么我想念的,请告诉我.
我是Java的新手,并尝试使用Mathematica的Java接口来使用内存映射来访问文件(希望提高性能).
我所拥有的Mathematica代码(我相信)相当于以下Java代码(基于此):
import java.io.FileInputStream;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
public class MainClass {
private static final int LENGTH = 8*100;
public static void main(String[] args) throws Exception {
MappedByteBuffer buffer = new FileInputStream("test.bin").getChannel().map(FileChannel.MapMode.READ_ONLY, 0, LENGTH);
buffer.load();
buffer.isLoaded(); // returns false, why?
}
}
Run Code Online (Sandbox Code Playgroud)
我想array()在缓冲区上使用该方法,所以我首先尝试将缓冲区内容加载到内存中load().但是,即使之后load(),isLoaded()返回false并buffer.array()抛出异常:java.lang.UnsupportedOperationException
at java.nio.ByteBuffer.array(ByteBuffer.java:940).
为什么不加载缓冲区以及如何调用该array()方法?
我的最终目标是获得一系列double的使用asDoubleBuffer().array().该方法getDouble()确实可以正常工作,但我希望能够一次完成这项工作以获得良好的性能.我究竟做错了什么?
正如我在Mathematica中所做的那样,我将发布我使用的实际Mathematica代码(相当于Java中的上述代码):
Needs["JLink`"]
LoadJavaClass["java.nio.channels.FileChannel$MapMode"]
buffer = JavaNew["java.io.FileInputStream", "test.bin"]@getChannel[]@map[FileChannel$MapMode`READUONLY, 0, 8*100] …Run Code Online (Sandbox Code Playgroud) tl; dr如何Nearest有效地实施Mathematica这样的东西?
Mathematica有一个函数叫做Nearest"事物"列表(它们可以是数字,坐标在n维空间,字符串等),并返回一个NearestFunction对象.此对象是一个函数,当应用于该对象时x,将返回最接近x某个距离度量的列表元素.距离度量可以作为参数传递给Nearest:默认情况下,它使用数字数据的欧几里德距离和字符串的某种编辑距离.
示例(这有望使问题更加明确):
nf = Nearest[{92, 64, 26, 89, 39, 19, 66, 58, 65, 39}];
nf[50]将返回58,最接近的元素50. nf[50, 2]将返回{58, 39}两个最接近的元素.
问题:实现此功能的有效方法是什么?NearestFunction内部可能使用哪种数据结构?为不同类型的数据计算最近元素的最佳复杂性是什么?
对于一个简单的数字列表,对它们进行排序并进行二分查找是可行的,但是Nearest可以使用多维数据以及任意距离函数,所以我认为它使用了更通用的东西.但如果事实证明它专门用于某些类型的数据/距离函数,我不会感到惊讶.
必须在远程计算机上使用哪些防火墙设置才能使远程内核连接正常工作?
特别是我对从Windows(前端)到Linux机器(内核)的连接感兴趣.
如何检测前端令牌是否可以执行?或者,如何检测前端令牌是否未能执行?
示例:如果未选择任何内容,则"编辑" - >"复制"命令不可用. FrontEndTokenExecute["Copy"]在这种情况下会发出哔哔声,但它没有给我(编程)指示它已经失败了.
当我们以更高和更高的分辨率光栅化3D图像时,每个图像元素应该按比例变大和变大.然而,刻度线在一段时间后停止增长.有没有办法确保刻度线应该与图形的其余部分成比例增长,就像文本一样?
插图:
g = Graphics3D[Sphere[], Axes -> True, ImageSize -> 200]
Table[Image[
ImageResize[Rasterize[g, "Image", ImageResolution -> n 72],
Scaled[1/n]], Magnification -> 1], {n, 6}]
Run Code Online (Sandbox Code Playgroud)

Column[Table[
Image[Rasterize[g, "Image", ImageResolution -> n 72], Magnification -> 1],
{n, 6}], Alignment -> Left]
Run Code Online (Sandbox Code Playgroud)
有时,最好为调色板(按钮)设置一些初始化代码.例如,它可以定义调色板按钮使用的一些函数.
为调色板定义/运行初始化代码的最简单和最好的方法是什么?
CreatePalette等)我经常将Mathematica代码从网站(例如SO)复制到笔记本中.代码通常被粘贴为单个输入单元格.我正在寻找一种简单的方法将其粘贴为几个输入单元格,以便于逐步评估.
例如,
a = 2;
f[x_] := x^a
Plot[f[x], {x,0,2}]
Run Code Online (Sandbox Code Playgroud)
理想情况下会粘贴为两个输入单元格.最好还应保留手动格式化(即原始换行符)(默认粘贴不是这种情况).
通常,如果选择所有输入单元格(ALT-单击),将它们复制到文本编辑器中,然后将生成的文本复制回笔记本,应该与复制的原始单元格相当.
这个问题是关于如何设计程序,以便进行某些修改.
我有一个类,它包含一些(非平凡的)数据,并有几个成员函数来更改这些数据.
有时我需要计算这些数据的一些属性.但是,每次改变都要从头开始重新计算它.相反,计算这些属性的小更新要快得多.
我有几个这样的属性,我需要能够轻松地添加到我的班级或从我的班级删除(或打开/关闭)进行一些数值实验.该类仅由我自己修改并用于数值模拟(科学代码).
假设我有一个包含数字的类x.但我也需要2^x("属性" x).基本课程是:
class C {
double x;
public:
C() : x(0.0)
{ }
void inc() { x += 1; }
void dec() { x -= 1; }
void set(double x_) { x = x_; }
};
Run Code Online (Sandbox Code Playgroud)
但现在我需要跟踪2^x并在每次x更改时不断更新此值.所以我最终得到了
class expC {
double expx;
public:
expC(const double &x) {
recompute(x);
}
void inc() { expx *= 2; } // fast incremental change
void dec() { expx /= 2; …Run Code Online (Sandbox Code Playgroud) Doxygen通常很好地处理前向声明.例如,
/** \file */
class A;
class B {
// uses A
};
class A {
// uses B
};
Run Code Online (Sandbox Code Playgroud)
结果是
没有重复A.
但是,如果我制作A和B类模板,则A提取两次:
/** \file */
template<typename T> class A;
template<typename T>
class B {
// uses A<T>
};
template<typename T>
class A {
// uses B<T>
};
Run Code Online (Sandbox Code Playgroud)
我怎么能阻止这个?