小编Nas*_*ser的帖子

求解变量平方的方程?

给出一个表达式(多项式,或一般的任何方程),如

a s^2+b = 0
Run Code Online (Sandbox Code Playgroud)

我想解决s ^ 2,得到s ^ 2 = -b/a.我们都知道,不能只写

Solve[eq==0,s^2]
Run Code Online (Sandbox Code Playgroud)

因为s ^ 2不是'变量'.只有s是'变量'.所以我做的是

eq  = a s^2+b;
sol = First@Solve[eq==0/.s^2->z,z];
z/.sol

-(b/a)
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法在没有中间变量替换的情况下完成上述操作?我尝试了很多命令,但没有成功(减少,收集,消除,因素等等).

谢谢 - 纳瑟

wolfram-mathematica

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

为什么Round [2.75,0.1]返回2.800000000003?

Mathematica 8.0.1

任何人都可以解释这个结果背后的逻辑

In[24]:= Round[10.75, .1]

Out[24]= 10.8

In[29]:= Round[2.75, .1]

Out[29]= 2.8000000000000003
Run Code Online (Sandbox Code Playgroud)

我预计上面的第二个结果是2.8?

编辑1:

我正在尝试上面的格式化目的只是为了使数字适合空间.我最终做了以下以获得我想要的结果:

In[41]:= NumberForm[2.75,2]
Out[41]   2.8
Run Code Online (Sandbox Code Playgroud)

我希望Mathematica有printf()之类的格式化功能.我在Mathematica中找到了确切字段宽度的格式编号,与使用printf()格式规则相比,形成了一点尴尬.

编辑2:我尝试$ MaxExtraPrecision = 1000我试图格式/回合的一些数字,但它没有用,这就是我发布这个问题的原因.这里是

In[42]:= $MaxExtraPrecision=1000;
Round[2035.7520395261859,.1]

Out[43]= 2035.8000000000002


In[46]:= $MaxExtraPrecision=50;
Round[2.75,.1]

Out[47]= 2.8000000000000003
Run Code Online (Sandbox Code Playgroud)

编辑3:

我找到了这种方法,只将数字格式化为一个小数点.使用Numberform,但首先需要通过计算小数点左边的位数来找到要使用的n位精度,然后加1.

In[56]:= x=2035.7520395261859;
NumberForm[x,IntegerLength[Round@x]+1]

Out[57]//NumberForm= 2035.8
Run Code Online (Sandbox Code Playgroud)

编辑4:

以上(编辑3)不适用于诸如此类的数字

a=2.67301785 10^7
Run Code Online (Sandbox Code Playgroud)

经过一些试验,我找到了会计表来做我想做的事.AccountingForm摆脱了NumberForm没有的10 ^ n形式:

In[76]:= x=2035.7520395261859;
AccountingForm[x,IntegerLength[Round@x]+1]

Out[77]//AccountingForm= 2035.8

In[78]:= x=2.67301785 10^7;
AccountingForm[x,IntegerLength[Round@x]+1]

Out[79]//AccountingForm= 26730178.5
Run Code Online (Sandbox Code Playgroud)

为了格式化数值,我找到的最好的语言是Fortran,遵循COBOL以及那些使用或支持printf()标准格式的语言.使用Mathematica,我可以肯定会做这样的格式化,但对我来说这看起来确实太复杂了.我从未理解为什么数学没有Printf [].

wolfram-mathematica

7
推荐指数
3
解决办法
1573
查看次数

如何在Mathematica笔记本中对齐注释?

我不知道之前是否有人询问过这件事.简单的格式化问题.我注意到有时很难将评论(----)排在彼此之上.必须是字体类型问题.如果我可以让事情完全相互对齐,它在屏幕上看起来会好一点.这是一个例子:

(*                        *)
(*  L E F T    P A N E L  *)
(*                        *)
Run Code Online (Sandbox Code Playgroud)

但它实际上在我面前的笔记本中看起来像这样:

在此输入图像描述

如果我在第二行中向左移动一个空格,它就像这样:

在此输入图像描述

所以,不能让它对齐.我正在使用Input(标准单元格)类型的单元格.

我不能使用其他细胞类型,如Code等.我想知道是否有人知道让这个对齐的技巧.

谢谢

编辑1:在样式表演示中显示输入单元格使用的字体

在此输入图像描述

编辑2:使用Alexey Popkov下面显示的代码修复了注释的字体问题,现在它们很容易对齐.这是一个截屏 在此输入图像描述

编辑3:

好吧,党不会持续很长时间.在演示中不允许使用SetOptions.太糟糕了,因为Alexey的解决方案效果很好,并使评论保持一致并且看起来更好.

无论如何.真的没什么大不了的.可以忍受一点点错位评论:)

在此输入图像描述

wolfram-mathematica mathematica-frontend

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

如何在源级别区分2个笔记本?

任何人都知道一个工具来找到源级别的2个笔记本之间的差异?

工作台2中的比较笔记本工具似乎在内部数据结构级别工作,这对我没用.我正在寻找能够查看源级差异的工具(在查看笔记本时看到的内容,即不是FullForm).

我在Windows上使用Mathematica的V8.

EDIT1:

我如何以更易读的形式显示NotebookDiff的输出/报告?

在此输入图像描述

wolfram-mathematica

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

如何使用条件,功能方式动态构建列表

我仍然不能很好地使用Mathematica中的列表来实现功能.这是一个小问题,我想问一下什么是一个很好的功能解决方法.

我说以下列表由点组成.因此,每个元素是一个点的坐标(x,y).

a = {{1, 2}, {3, 4}, {5, 6}}
Run Code Online (Sandbox Code Playgroud)

我想遍历这个列表,每当我找到一个y坐标为> 3.5的点时,我想生成一个复杂的共轭点.最后,我想返回生成的点列表.因此,在上面的例子中,有2个点可以满足这个条件.因此,最终列表中将有5个点,3个原始列表和2个复共轭点.

我试过这个:

If[#[[2]] > 3.5, {#, {#[[1]], -#[[2]]}}, #] & /@ a
Run Code Online (Sandbox Code Playgroud)

但我明白了

{{1, 2}, {{3, 4}, {3, -4}}, {{5, 6}, {5, -6}}}
Run Code Online (Sandbox Code Playgroud)

你会看到中间的额外{},我必须添加一个复共轭点.我希望结果是这样的:

{{1, 2}, {3, 4}, {3, -4}, {5, 6}, {5, -6}}
Run Code Online (Sandbox Code Playgroud)

我尝试插入Flatten,但没有工作,所以,我发现自己有时会回到我原来的程序方式,并使用像Table和Do这样的东西:

a = {{1, 2}, {3, 4}, {5, 6}}
result = {};
Do[

 If[a[[i, 2]] > 3.5, 
   {
    AppendTo[result, a[[i]]]; AppendTo[result, {a[[i, 1]], -a[[i, 2]]}]
   }, 
   AppendTo[result, a[[i]]]
 ],
 {i, 1, Length[a]}
 ]
Run Code Online (Sandbox Code Playgroud)

这给了我想要的东西,但不是功能性解决方案,我不喜欢它.

什么是解决这种列表操作的最佳功能方法? …

wolfram-mathematica

7
推荐指数
4
解决办法
671
查看次数

使用结构通过引用传递参数

这个问题是关于在M中通过引用的主题(我的相关问题是关于在函数之间传递数据的简单问题)

虽然我试图找到一种方法来通过引用传递东西而不使用Unevaluted[]或者HoldFirst[],但是我错误地使用了这种方法并且看起来对我来说效果很好,即使我不理解它是如何工作的以及使用它的任何隐藏风险.所以我想在这里向专家展示,并询问他们是否认为使用是安全的(我有非常大的演示,需要将参数打包成不同结构的数量来帮助管理它们,这就是我发现这个的方法我正在尝试的方法).

这是方法:首先我们知道不能写下面的内容:

Remove[p]
foo[p_] := Module[{u},
   u = Table[99, {10}];
   p = u
   ];

p = 0;
foo[p];
Run Code Online (Sandbox Code Playgroud)

在上面更新"p"的一种方法是更改​​为调用成为

foo[Unevaluated@p];
Run Code Online (Sandbox Code Playgroud)

或者通过定义foo[]HoldFirst.

但这是我发现的方式,它通过引用传递,没有这些:

我将所有参数放在一个结构中(我现在无论如何都这样做),并传递结构,然后可以更新结构内部的字段,foo[]更新将反映在函数调用的后面:

Remove[parms]
foo[parms_] := Module[{u},
   u = Table[99, {10}];
   parms["p"] = u
   ];

parms["p"] = 0;
foo[parms];
Run Code Online (Sandbox Code Playgroud)

现在,parms["p"]包含新列表{99, 99, 99, 99, 99, 99, 99, 99, 99, 99}

所以,parms内部被覆盖/更新foo[],我不必告诉M parms通过引用传递!

我在我的程序中试过这个,我看到没有奇怪的副作用.CDF更新正常,没有错误.我不知道这是如何工作的,可能是M parms将此示例中的所有字段视为全局?

但无论哪种情况,我都很满意,因为它为我提供了一种将我的许多参数打包成结构的方法,同时我能够在函数内部更新结构.

但我的问题是:你看到这种方法存在重大问题吗?它在内部如何运作?我的意思是如何处理中号这逝去的没有我做的HoldFirst还是Unevaluated …

wolfram-mathematica

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

关于使用Internal`Bag和任何官方文档?

(Mathematica版本:8.0.4)

lst = Names["Internal`*"];
Length[lst]
Pick[lst, StringMatchQ[lst, "*Bag*"]]
Run Code Online (Sandbox Code Playgroud)

293    
{"Internal`Bag", "Internal`BagLength", "Internal`BagPart", "Internal`StuffBag"}
Run Code Online (Sandbox Code Playgroud)

Mathematica编程指南作者:迈克尔·特罗特,第494页,内部背景说

"但与Experimental`上下文相似,不能保证在Mathematica的更高版本中仍然可以使用这些函数的行为和语法"

另外,这里提到的Bag功能:

在Mathematica中实现四叉树

但是,由于我已经看到Mathematica专家在这里建议Internal`Bag功能并自己使用它们,我假设在实际代码中使用它们会有点安全吗?若然,我有以下问题:

我在哪里可以找到这些函数(API等)的更正式的描述,就像在文档中心找到的那样? 现在没有任何关于他们的事情

??Internal`Bag
Internal`Bag
Attributes[Internal`Bag]={Protected}
Run Code Online (Sandbox Code Playgroud)

如果我开始使用它们,我会发现很难通过查看一些示例和反复试验来了解它们的功能.我想知道这里是否有人可能有一个更完整和自包含的文档,使用这些,描述API和更多已经存在的内容或链接到这样的地方.

wolfram-mathematica

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

将函数映射到列表时如何删除额外的{}

简单的问题,给出这样的列表

Clear[a, b, c, d, e, f];
lst = {{a, b}, {c, d}, {e, f}};
Run Code Online (Sandbox Code Playgroud)

并假设我有一个这样定义的函数:

foo[x_,y_]:=Module[{},...]
Run Code Online (Sandbox Code Playgroud)

我想将此功能应用于列表,所以如果我输入

Map[foo, lst]
Run Code Online (Sandbox Code Playgroud)

这给了

{foo[{a, b}], foo[{c, d}], foo[{e, f}]}
Run Code Online (Sandbox Code Playgroud)

我想要它出来

{foo[a, b], foo[c, d], foo[e, f]}
Run Code Online (Sandbox Code Playgroud)

所以它有效.

做这个的最好方式是什么?假设我无法修改函数foo []定义(假设它是内置函数)

我现在只知道两种方式

Map[foo[#[[1]], #[[2]]] &, lst]
{foo[a, b], foo[c, d], foo[e, f]}
Run Code Online (Sandbox Code Playgroud)

(太多的工作),或

MapThread[foo, Transpose[lst]]
{foo[a, b], foo[c, d], foo[e, f]}
Run Code Online (Sandbox Code Playgroud)

(减少输入,但需要先转置)

问题:还有其他更好的方法吗?我看了看其他地图和它的朋友,我看不到比我拥有的更直接的功能.

wolfram-mathematica

7
推荐指数
3
解决办法
1249
查看次数

如何在最新的notepad++编辑器中启用文档列表面板?

我刚刚更新到 notepad++ V 8.1.3,它不再提供在左侧面板中显示打开文件的选项。

如何再次启用文档列表面板?我也看了这个问题notepad-show-open-files-on-the-left,但他们都说同样的事情

Settings > Preferences > tab General > Document List Panel > check Show

Windows 10 的 8.1.3 版本中不再存在该功能

notepad++

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

在PackedArray上,寻找使用它们的建议

我之前没有使用过PackedArray,但是今天就开始考虑使用它们来阅读它们.

我所拥有的是所有实数的大尺寸1D和2D矩阵,没有符号(它是有限差分PDE求解器),所以我认为我应该利用PackedArray.

我有一个初始化函数,我分配所需的所有数据/网格.所以我去ToPackedArray了他们.它似乎更快一点,但我需要做更多的性能测试,以更好地比较前后的速度,并比较RAM的使用情况.

但是当我看到这个时,我注意到M中的一些操作已经自动返回PackedArray中的列表,而有些则没有.

例如,这不会返回打包数组

a = Table[RandomReal[], {5}, {5}];
Developer`PackedArrayQ[a]
Run Code Online (Sandbox Code Playgroud)

但这样

a = RandomReal[1, {5, 5}];
Developer`PackedArrayQ[a]
Run Code Online (Sandbox Code Playgroud)

这样

a = Table[0, {5}, {5}];
b = ListConvolve[ {{0, 1, 0}, {1, 4, 1}, {0, 1, 1}}, a, 1];
Developer`PackedArrayQ[b]
Run Code Online (Sandbox Code Playgroud)

并且矩阵乘法确实在打包数组返回结果

a = Table[0, {5}, {5}];
b = a.a;
Developer`PackedArrayQ[b]
Run Code Online (Sandbox Code Playgroud)

但元素乘法不是

b = a*a;
Developer`PackedArrayQ[b]
Run Code Online (Sandbox Code Playgroud)

我的问题:是否有一个列表哪个文件哪个M命令返回PackedArray而不是?(假设数据符合要求,例如Real,不混合,没有符号等.)

另外,一个小问题,你认为在调用ToPackedArray它之前首先检查创建的列表/矩阵是否已经打包会更好吗?我认为呼叫ToPackedArray已经打包的列表不会花费任何费用,因为呼叫将立即返回.

谢谢,

更新(1)

只是想提一下,刚发现在演示CDF中不允许使用PackedArray符号,因为我在上传一个时遇到错误.所以,不得不删除我的所有包装代码.由于我主要编写演示,现在这个主题对我来说只是学术兴趣.但是要感谢大家的时间和好的答案.

wolfram-mathematica

6
推荐指数
2
解决办法
797
查看次数