小编Sim*_*mon的帖子

在Mathematica中打印符号名称和值

我想创建一个函数My`Print[args__]来打印我传递它的符号的名称及其值.问题是在传递符号之前,会对My`Print它们进行评估.所以My`Print永远不要看到符号名称.

一个解决方案是围绕每一个我传递给说法My`PrintUnevaluated[],不过这看起来凌乱.有没有一种定义MACRO的方法,当我输入时My`Print[args__],Mathematica内核会看到My`Print[Unevaluated /@ args__]

macros wolfram-mathematica

10
推荐指数
5
解决办法
2472
查看次数

如何克服数值积分中的奇点(在Matlab或Mathematica中)

我想以数字方式整合以下内容:

EQ1

哪里

EQ2

a,b并且?是常量,为简单起见,都可以设置为1.

Matlab使用dblquad,Mathematica使用NIntegrate都不能处理分母创建的奇点.由于它是双积分,我无法指定Mathematica中奇点的位置.

我确信它不是无限的,因为这个积分是基于扰动理论而没有

在此输入图像描述

之前已被发现(只是不是我,所以我不知道它是如何完成的).

有任何想法吗?

matlab wolfram-mathematica numerical-integration

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

提高RegionPlot的速度(或替代)

我想在Manipulate结构中包含一些区域图,但渲染几乎非常慢.代码是

ClearAll[regions, rplot]
r:regions[n_Integer, o_Integer] := r = Apply[And, 
    Subsets[Table[(#1 - Cos[t])^2 + (#2 - Sin[t])^2 <= 1, {t, 2 Pi/n, 
       2 Pi, 2 Pi/n}], {o}], {1}] &
r:rplot[n_Integer, o_Integer] := r = Show[{RegionPlot[
     Evaluate[regions[n, o][x, y]], {x, -2, 2}, {y, -2, 2},
     PlotRange -> {{-2, 2}, {-2, 2}}, PlotRangePadding -> .1, 
     Frame -> False, PlotPoints -> 100], 
    Graphics[Table[Circle[{Cos[t], Sin[t]}, 1], {t, 2 Pi/n, 2 Pi, 2 Pi/n}]]}]
Run Code Online (Sandbox Code Playgroud)

这产生的图形就像

GraphicsGrid[{{rplot[3, 2], rplot[5, 3]}, {rplot[7, 2], rplot[4, 1]}}]
Run Code Online (Sandbox Code Playgroud)

从上面的圈子!

以上大约需要40秒才能在我的计算机上进行计算和渲染.任何人都可以建议一种方法来更快地获得类似的质量图形? …

plot wolfram-mathematica

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

在Mathematica中生成输入/输出CellLabel的原因是什么?如何为它们添加自动计时?

当数学计算一个细胞,它给人的输入单元和输出单元的CellLabel小号In[$Line]:=Out[$Line]=其中$线是从每输入计算递增的计数器.

如果您输入类似TraditionalForm[expr]TeXForm[expr](或任何其他*表格$OutputForms)的内容,则表单的名称也会添加到输出单元格的标签中.例如Out[1]//TraditionalForm=.

我找不到任何自定义这些标签的方法.

  • 可以在"首选项"对话框中禁用它们.

  • 它们似乎不在输入和输出单元格的StyleSheet选项中 - 尽管有与CellLabel行为相关的选项.

  • 也不在Notebook选项中 - 尽管在Option Inspector中:Notebook Options> Evaluation Options> EvaluationCompletionAction可以通过添加TimeStamp来修改CellLabel.它还可以在StatusArea中显示Timing,一旦打印出其他内容,它就会被删除.

  • 也不是任何init.m类型的 配置文件.

那么,有谁知道这些CellLabel的生成位置?


特别是,我有兴趣将TimingCellLabel 添加到输出单元格.

wolfram-mathematica configuration-files

7
推荐指数
2
解决办法
727
查看次数

使用Mathematica中的$ NewSymbol移动上下文

我一直在$NewSymbol努力寻找能够回答这个问题的东西.文档说

在实际创建符号之前应用$ NewSymbol.如果$ NewSymbol的操作导致创建符号(可能在不同的上下文中),则创建的符号将是使用的符号.

所以我尝试自动将一个特定的新符号移动到一个测试上下文中,该测试上下文应该阻止它在Global`*上下文中的创建,但是符号在两个上下文中都被创建.

In[1]:= Remove["Global`*"]
In[2]:= $NewSymbol=(Print[#1," : ",#2];
                    If[#1==="aLongTestSymbolName"&&#2==="Global`",
                       Symbol["TestContext`"<>#1]])&;

In[3]:= x
During evaluation of In[3]:= x : Global`
Out[3]= x

In[4]:= aLongTestSymbolName
During evaluation of In[4]:= aLongTestSymbolName : Global`
During evaluation of In[4]:= aLongTestSymbolName : TestContext`
Out[4]= aLongTestSymbolName

In[5]:= Names["Global`*"]
Out[5]= {aLongTestSymbolName,x}

In[6]:= Names["TestContext`*"]
Out[6]= {TestContext`aLongTestSymbolName}
Run Code Online (Sandbox Code Playgroud)

我认为"aLongTestSymbolName"不应该在这种Global`背景下.任何人都可以看到我做错了什么或者我是否误解了文档?


注意:在两个上下文中创建符号不是上述链接到问题中自动突出显示的选项.我们的想法是保留某些符号名称,例如"x"~~___变量和"f"~~___函数,然后使用字符串模式$NewSymbol将符号移动到适当的突出显示的上下文.

wolfram-mathematica

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

在Mathematica中删除大小为零的子列表

假设您有一个列表列表,并且您希望仅删除长度为零的列表,例如:

a={{...},{...},{...},...}
DeleteCases[a, ?]
Run Code Online (Sandbox Code Playgroud)

应该?是什么?

wolfram-mathematica

7
推荐指数
2
解决办法
837
查看次数

评估[]似乎无法在Button []内部工作

知道如何让这个工作吗?

y = {}; Table[Button[x, AppendTo[y, Evaluate[x]]], {x, 5}]
Run Code Online (Sandbox Code Playgroud)

结果:单击[ 1],单击[ 2],获取{6,6}

我轻视实际的任务,但我们的目标是建立一个内部的按钮做什么MapTableParallelTable.

请帮忙!


编辑想
出来...... Evaluate只在第一级工作.在这里,它太深了.所以我用过ReplaceRule:

Remove[sub]; y = {}; Table[Button[x, AppendTo[y, sub]] /. sub -> x, {x, 5}]
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica mathematica-8

7
推荐指数
2
解决办法
495
查看次数

使用`With`和`Rules`列表 - 但不影响`With`的正常行为

说我有一个清单 Rules

rules = {a -> b, c -> d};
Run Code Online (Sandbox Code Playgroud)

我在整个笔记本中使用它.然后,在某一点上,在表达式中进行任何其他评估之前,希望应用规则是有意义.通常,如果你想要这样的东西,你会使用

In[2]:= With[{a=b,c=d}, expr[a,b,c,d]]
Out[2]= expr[b, b, d, d]
Run Code Online (Sandbox Code Playgroud)

我怎样才能把rules它插入到第一个参数中With


编辑

无论一些解决方案未能尽我一直在寻找-但我应该强调了这一点多一点.见上面的粗体部分.

例如,让我们来看看

rules = {a -> {1, 2}, c -> 1};
Run Code Online (Sandbox Code Playgroud)

如果我使用这些vaules With,我会得到

In[10]:= With[{a={1,2},c=1}, Head/@{a,c}]
Out[10]= {List,Integer}
Run Code Online (Sandbox Code Playgroud)

某些版本的WithRules收益率

In[11]:= WithRules[rules, Head/@{a,c}]
Out[11]= {Symbol, Symbol}
Run Code Online (Sandbox Code Playgroud)

(实际上,我没有注意到Andrew的答案有属性HoldRest- 所以它就像我想要的那样.)

wolfram-mathematica

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

如何使DifferenceRoot和RecurrenceTable对非数字差分方程有用?

在今天早上回答一个物理论坛问题时,我遇到了非常糟糕的表现,DifferenceRoot并且RecurrenceTable通过天真​​地采用指数生成函数的导数来计算表达式.极少量的挖掘表明DifferenceRoot并且RecurrenceTable 不会简化表达式.

例如,查看以下输出RecurrenceTable以及如何通过Expand结果简化它:

In[1]:= RecurrenceTable[f[n] == a f[n - 1] + (a - 1) f[n - 2] && 
                        f[0] == 0 && f[1] == 1, 
                        f, {n, 6}]
% // Expand

Out[1]= {0, 1, a, -1+a+a^2, -a+a^2+a (-1+a+a^2), 1-a-a^2+a (-1+a+a^2)+a (-a+a^2+a (-1+a+a^2))}
Out[2]= {0, 1, a, -1+a+a^2, -2 a+2 a^2+a^3, 1-2 a-2 a^2+3 a^3+a^4}
Run Code Online (Sandbox Code Playgroud)

这很快失控,因为第20次迭代的叶数(使用计算 DifferenceRoot)显示:

dr[k_] := DifferenceRoot[Function[{f, n}, 
          {f[n] == a f[n - …
Run Code Online (Sandbox Code Playgroud)

recurrence wolfram-mathematica

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

根据方程系数创建矩阵

给出方程式

eqn1 = 5 x1 + 2 x2 + 3 x3 == 8
eqn2 = 4 x1 + 7 x2 + 9 x3 == 5
eqn3 = 6 x1 +   x2 + 9 x3 == 2
Run Code Online (Sandbox Code Playgroud)

如何提取系数x1, x2, x3以形成矩阵?

我试过使用,CoefficientArrays但输出是作为一个SparseArray.

wolfram-mathematica

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