小编Sza*_*lcs的帖子

你能解释一下这个Mathematica $ Assumptions行为吗?

考虑以下三行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,但如果有什么我想念的,请告诉我.

wolfram-mathematica

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

为什么MappedByteBuffer的array()方法不起作用?

我是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()返回falsebuffer.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)

java wolfram-mathematica memory-mapped-files jlink

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

用于有效地从集合中检索最近元素的数据结构

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可以使用多维数据以及任意距离函数,所以我认为它使用了更通用的东西.但如果事实证明它专门用于某些类型的数据/距离函数,我不会感到惊讶.

language-agnostic algorithm data-structures

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

远程内核的防火墙设置工作(Mathematica)

必须在远程计算机上使用哪些防火墙设置才能使远程内核连接正常工作?

特别是我对从Windows(前端)到Linux机器(内核)的连接感兴趣.

wolfram-mathematica

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

检测前端令牌是否可用于执行

如何检测前端令牌是否可以执行?或者,如何检测前端令牌是否未能执行?

示例:如果未选择任何内容,则"编辑" - >"复制"命令不可用. FrontEndTokenExecute["Copy"]在这种情况下会发出哔哔声,但它没有给我(编程)指示它已经失败了.

wolfram-mathematica mathematica-frontend

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

刻度标记不会在图形中缩放 - 为什么以及如何解决这个问题?

当我们以更高和更高的分辨率光栅化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)

Mathematica图形

Column[Table[
   Image[Rasterize[g, "Image", ImageResolution -> n 72], Magnification -> 1], 
   {n, 6}], Alignment -> Left]
Run Code Online (Sandbox Code Playgroud)

点击这里查看输出(太大而不方便内联)

wolfram-mathematica

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

如何运行调色板的初始化代码?

有时,最好为调色板(按钮)设置一些初始化代码.例如,它可以定义调色板按钮使用的一些函数.

为调色板定义/运行初始化代码的最简单和最好的方法是什么?

  • 初始化可以在加载调色板或第一次按下任何按钮时运行(可能的问题:如果在加载调色板后重新启动内核会怎样?)
  • 定义应该以某种方式进行本地化(即在他们自己的上下文中 - 这里有独特的笔记本上下文帮助吗?)
  • 如果可能的话,我更喜欢最小化的解决方案(即在尽可能少的地方添加额外的代码,不包含额外包文件的自包含调色板文件,使用调色板菜单的现有便利工具创建调色板CreatePalette等)
  • (您可以假设初始化代码运行得很快,例如它只包含定义)

wolfram-mathematica initialization mathematica-frontend

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

粘贴Mathematica代码,以便将其分解为单独的输入单元格

我经常将Mathematica代码从网站(例如SO)复制到笔记本中.代码通常被粘贴为单个输入单元格.我正在寻找一种简单的方法将其粘贴为几个输入单元格,以便于逐步评估.

例如,

a = 2;
f[x_] := x^a

Plot[f[x], {x,0,2}]
Run Code Online (Sandbox Code Playgroud)

理想情况下会粘贴为两个输入单元格.最好还应保留手动格式化(即原始换行符)(默认粘贴不是这种情况).

通常,如果选择所有输入单元格(ALT-单击),将它们复制到文本编辑器中,然后将生成的文本复制回笔记本,应该与复制的原始单元格相当.

wolfram-mathematica cells mathematica-frontend

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

如何设计这个程序,并考虑到简单的修改?

这个问题是关于如何设计程序,以便进行某些修改.

我有一个类,它包含一些(非平凡的)数据,并有几个成员函数来更改这些数据.

有时我需要计算这些数据的一些属性.但是,每次改变都要从头开始重新计算它.相反,计算这些属性的小更新要快得多.

我有几个这样的属性,我需要能够轻松地添加到我的班级或从我的班级删除(或打开/关闭)进行一些数值实验.该类仅由我自己修改并用于数值模拟(科学代码).

具体例子

假设我有一个包含数字的类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)

c++

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

Doxygen:防止由于前向声明和模板导致的重复

Doxygen通常很好地处理前向声明.例如,

/** \file */

class A;

class B {
    // uses A
};

class A {
    // uses B
};
Run Code Online (Sandbox Code Playgroud)

结果是

在此输入图像描述

没有重复A.

但是,如果我制作AB类模板,则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)

在此输入图像描述

我怎么能阻止这个?

c++ doxygen

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