在对我之前的问题的评论中,建议从Mathematica 5.2 InterpolatingFunction生成所有数据,然后在Mathematica 8中创建另一个数据.建议的方法是使用包中定义的函数从中提取数据.天真地尝试,DifferentialEquations`InterpolatingFunctionAnatomy`InterpolatingFunction
Needs["DifferentialEquations`InterpolatingFunctionAnatomy`"]
ifun = First[
x /. NDSolve[{x'[t] == Exp[x[t]] - x[t], x[0] == 1},
x, {t, 0, 10}]];
data = Transpose@{InterpolatingFunctionGrid[ifun],
InterpolatingFunctionValuesOnGrid[ifun]};
interpolationOrder =
Developer`FromPackedArray@
InterpolatingFunctionInterpolationOrder[ifun];
ifun2 = Interpolation[data, InterpolationOrder -> interpolationOrder];
Table[ifun[x] - ifun2[x], {x, 0, 0.5160191740198963`, .1}]
Run Code Online (Sandbox Code Playgroud)
我在原始函数和重构函数之间有显着差异:
{0., 2.13061*10^-7, 2.05087*10^-7, 2.46198*10^-7, 6.68937*10^-7,
1.5624*10^-7}
Run Code Online (Sandbox Code Playgroud)
查看InputForm这些功能可以发现它们并不完全相同.是否有可能重建InterpolatingFunction从中提取所有数据并调用Interpolation提取的数据?
默认情况下Notebook[]有一小部分Options:
In[4]:= Options[EvaluationNotebook[]]
Out[4]= {FrontEndVersion ->
"7.0 for Microsoft Windows (32-bit) (February 18, 2009)",
StyleDefinitions -> "Default.nb",
WindowMargins -> {{0, Automatic}, {Automatic, 0}},
WindowSize -> {616, 537}}
Run Code Online (Sandbox Code Playgroud)
有时我希望修改Notebook外观并设置其他内容Options.例如,我喜欢评论Plain而不是Bold:
SetOptions[EvaluationNotebook[],
AutoStyleOptions -> {"CommentStyle" -> {FontWeight -> Plain,
FontColor -> GrayLevel[0.6`], ShowAutoStyles -> False,
ShowSyntaxStyles -> False, AutoNumberFormatting -> False}}]
Run Code Online (Sandbox Code Playgroud)
现在Options[EvaluationNotebook[]]还将返回我设置的新选项.
但有时我希望恢复默认行为并删除其他内容Options.我怎样才能做到这一点?
StyleBox默认情况下打印字符串时,我们在字符串中获得格式良好的数字:
StyleBox["some text 1000000"] // DisplayForm
Run Code Online (Sandbox Code Playgroud)
我的意思是数字看起来好像会有额外的小空格:"1 000 000".
但是在Message所有数字中都显示没有格式化:
f::NoMoreMemory =
"There are less than `1` bytes of free physical memory (`2` bytes \
is free). $Failed is returned.";
Message[f::NoMoreMemory, 1000000, 98000000]
Run Code Online (Sandbox Code Playgroud)
有没有办法让Messages 里面的数字格式化?
美好的一天,
当试图通过使用标准和命令以及他们在最近的线程中开发的漂亮的视觉表示来理解Mathematica的评估序列时,我在他们的行为中遇到了一些含糊之处.TraceTraceScan
首先,当我评估时
在[1]中:=跟踪[a + 1,TraceOriginal-> True]
我明白了
Out [1] = {a + 1,{Plus},{a},{1},a + 1,1 + a,{Plus},{1},{a},1 + a}
所有子列表都对应于子评估(如文档中所述).最后一个表达式1+a可能对应于评估结果,尽管文档中没有明确说明.但究竟是什么意思表达式a+1和1+a列表中间?它们对应的标准评估序列的评估步骤是什么?
第二个奇怪的是TraceScan.考虑以下:
在[1]中:= list = {}; TraceScan [AppendTo [列表,StyleForm [#, "输入"]],(A + 1),_,AppendTo [列表,#]]; 名单
OUT [1] = { A + 1,加,另外,一,一,1,1,1 +α,加,另外,1,1,一,一,1 + A,A + 1}
您可以看到列表中的最后两个表达式是1+a …
美好的一天,
这个问题来自关于中止对全部输入序列的评估的问题.
我认为可能通过重新定义FrontEndEventActions两个事件来实现所需的行为:( "EvaluateCells"或按Shift+ Enter)和按Alt+ ..它应该是这样的:
SetOptions[$FrontEndSession,
FrontEndEventActions -> {"EvaluateCells" :> Last$PreRead,
{{"Alt", "."} :> AbortAllNextInputs}}]
Run Code Online (Sandbox Code Playgroud)
要么
SetOptions[$FrontEndSession,
FrontEndEventActions -> {{{"ShiftKey", "ReturnKeyDown"} :> Last$PreRead}
{{"Alt", "."} :> AbortAllNextInputs}}]
Run Code Online (Sandbox Code Playgroud)
其中AbortAllNextInputs和Last$PreRead定义如下:
AbortAllNextInputs := AbortProtect[
$new$PreRead = True;
last$PreRead = ToString[Definition[$PreRead], InputForm];
ClearAll[$PreRead];
$PreRead := # &] /; ! TrueQ[$new$PreRead]
Last$PreRead :=
$PreRead := AbortProtect[
$new$PreRead = False;
ClearAll[$PreRead];
If[last$PreRead === "Null", #,
ToExpression[last$PreRead]; $PreRead@#]
] &
Run Code Online (Sandbox Code Playgroud)
但我无法 …
我对MathKernel的这些命令行选项的使用一无所知
-lmverbose
-run cmd
-password "pw"
-pwfile "file"
Run Code Online (Sandbox Code Playgroud)
他们是如何工作的以及他们需要什么?
MathKernel和FrontEnd还有其他可能有用的命令行选项吗?
PS 相关答案.
resources wolfram-mathematica command-line-arguments mathematica-frontend
我正在尝试使用可选参数定义替换规则color_RGBColor,Sequence[]当原始表达式中不存在时,该替换规则应替换为:
style[line_Line, ___,
color_RGBColor: Unevaluated@Sequence[], ___] :> {color, line}
Run Code Online (Sandbox Code Playgroud)
当RGBColor原始表达式中存在时,规则有效:
style[Line[], RGBColor[{}]] /.
style[line_Line, ___,
color_RGBColor: Unevaluated@Sequence[], ___] :> {color, line}
=> {RGBColor[{}], Line[]}
Run Code Online (Sandbox Code Playgroud)
但是当它不存在时,它不会:
style[Line[], Thickness[0.01]] /.
Style[line_Line, ___,
color_RGBColor: Unevaluated@Sequence[], ___] :> {color, line}
=> style[Line[], Thickness[0.01]]
Run Code Online (Sandbox Code Playgroud)
我的问题是:
1)为什么它不起作用?
2)是否可以构建一个可以按要求工作的单一模式?
所有..Values功能都有未记录的选项Sort:
In[1]:= Options /@ {OwnValues, DownValues, UpValues, SubValues,
DefaultValues, FormatValues, NValues}
Out[1]= {{Sort -> True}, {Sort -> True}, {Sort -> True}, {Sort ->
True}, {Sort -> True}, {Sort -> True}, {Sort -> True}}
Run Code Online (Sandbox Code Playgroud)
这个选项的用途和用途可能有用吗?
我需要优化种群中配子频率的计算.
我每个人口都有np人口和Ne个人.每个人由两个配子(男性和女性)组成.每个配子包含三个基因.每个gen可能是0或1.所以每个人都是2x3矩阵.矩阵的每一行都是由父母之一给出的配子.每个人口中的一组个体可以是任意的(但总是Ne长度).为简单起见,有个人的初始人群可以给出如下:
Ne = 300; np = 3^7;
(*This table may be arbitrary with the same shape*)
ind = Table[{{0, 0, 0}, {1, 1, 1}}, {np}, {Ne}]
Run Code Online (Sandbox Code Playgroud)
全套可能的配子:
allGam = Tuples[{0, 1}, 3]
Run Code Online (Sandbox Code Playgroud)
每个人都可以通过8种可能的方式以相同的概率生成配子.这些配子是:( Tuples@Transpose@ind[[iPop, iInd]]其中iPop和iInd- 人口和人口中的个体指数).我需要计算个体为每个种群生成的配子频率.
此时我的解决方案如下.
首先,我将每个人转换成它可以产生的配子:
gamsInPop = Map[Sequence @@ Tuples@Transpose@# &, ind, {2}]
Run Code Online (Sandbox Code Playgroud)
但更有效的方法是:
gamsInPop =
Table[Join @@ Table[Tuples@Transpose@ind[[i, j]], {j, 1, Ne}], {i, 1, np}]
Run Code Online (Sandbox Code Playgroud)
其次,我计算了所产生的配子的频率,包括可能但在种群中不存在的配子的零频率:
gamFrq = Table[Count[pop, gam]/(8 …Run Code Online (Sandbox Code Playgroud) Mathematica具有CheckAbort允许捕获和处理用户生成和编程Abort的功能.但它不允许赶上通过这样的功能产生例如中断TimeConstrained和MemoryConstrained:
TimeConstrained[CheckAbort[Pause[100], Print["From CheckAbort"]], 1]
Run Code Online (Sandbox Code Playgroud)
(不打印"From CheckAbort").
有没有办法在Mathematica中捕获这样的中断?
编辑:我知道第三个参数,TimeConstrained并MemoryConstrained允许在中断的情况下评估一些代码,但这种方式不是我需要的:我需要一种方法来完全处理我的函数内部的这些中断,允许用户不关心它内部.
PS我之所以需要这个,是因为我有一个创建MathLink对象的函数,在任何中断或中止的情况下必须关闭,但在其他情况下则不能.