我尝试在两个单独的绘图命令中使用NDSolve的答案时遇到了问题.为了说明这个问题,我将使用一个简单的微分方程和一个绘图命令.如果我写这样的东西:
{Plot[x[t], {t, 0, 10}], x[4]}
/. NDSolve[{x'[s] == - x[s], x[0] == 1}, x, {s, 0, 10}]
Run Code Online (Sandbox Code Playgroud)
它解决了方程并且没有问题地计算x [4],但是情节变空了,我不知道为什么.
在我的实际问题中,我的方程是一个非常复杂的系统,用于几个函数,而不是x [4]我绘制了求解函数的参数图.我最终打算将所有这些包含在Manipulate语句中,所以我不希望NDSolve语句出现多次(花费太长时间)而且我不能提前计算它(因为它有很多参数).
编辑:我想澄清并扩展我的问题:我实际想要做的是通过以下方式将我的绘图语句包含在Manipulate语句中:
Manipulate[{Plot[x[t], {t, 0, 10}], x[4]}
/. NDSolve[{x'[s] == - a*x[s], x[0] == 1}, x, {s, 0, 10}]
,{{a,1},0,5}]
Run Code Online (Sandbox Code Playgroud)
由于只有Manipulate语句为参数a赋值,因此我无法事先计算出NDSolve的答案.另外,由于我的实际方程系统非常复杂且非线性,我不能使用符号函数DSolve.
对不起,如果以前不清楚.
我必须找到任意数量的给定线性方程的任何解决方案(可能存在很多或没有),其中包含任意数量的变量.在Java中.什么库和方法使用?要实施什么?我想尽可能地做到最好.
FindDivisions []被添加到Mma v7中,似乎是一种很好的方法来获得灵活的图表.例如,请参阅此问题及其答案.
用法示例:
f[fd_] := Join[
{#, #, {.07, 0}, Directive[Black, Thickness[.01]]} & /@ fd[[1]],
{#, #, {.05, 0}, Directive[Black, Thin]} & /@ Flatten[fd[[2]]]];
plot[pr_List] :=
Plot[Sin[x], Evaluate@Join[{x}, pr], Ticks -> {f[FindDivisions[pr, {2,5}]]}]
plot[{0, 10}]
Run Code Online (Sandbox Code Playgroud)
一切似乎都是对的.
但是有一个小问题:
f[fd_] := Join[
{#, #, {.03, 0}, Directive[Red, Thickness[.01]]} & /@ fd[[1]],
{#, #, {.05, 0}, Directive[Black, Thin]} & /@ Flatten[fd[[2]]]];
plot[pr_List] :=
Plot[Sin[x], Evaluate@Join[{x}, pr], Ticks -> {f[FindDivisions[pr, {2,5}]]}]
plot[{0, 10}]
Run Code Online (Sandbox Code Playgroud)
如您所见,红色和黑色的蜱是叠加的.那是因为
FindDivisions[{0, 2}, {2, 4}]
(*
-> …
Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个LayeredGraphPlot,其中一些节点连接到其他节点,如树.我想有自由选择每个边缘的厚度,颜色,是否存在标签.
我还想自由地显示一些顶点名称并将一些顶点显示为"点".我似乎无法理解EdgeRenderingFunction和VertexRenderingFunction如何使我能够做到这一点.
我是mathematica的新手.我点击了有关Wolfram帮助页面的更多信息,但它似乎有一个模糊的描述而不是精确的语法,其次是一些可爱但无益(对我而言)的例子(与数学工作中的matlab相比,帮助提供了精确的语法..至少在我的脑海里).
我已经查阅了大约10本数学书籍(史密斯和布拉奇曼,mathematica揭秘等等),但它们似乎都只用一两个例子来表面覆盖函数,并没有提供最通用的语法.
有人可以帮忙解决这个问题,我也很欣赏如何学习mathematica的技巧吗?我是个聪明人,学习如何使用命令我不会有太多麻烦.
LayeredGraphPlot [{1-> 2,1-> 3,2> 4,3> 5,3-> 6}]
例如,我想:
在32位Linux上的Mathematica 8.0.1.0中,表达式
InverseFunction[0 &]@0
Run Code Online (Sandbox Code Playgroud)
回报33/10
.(对于其他整数和有理数值也是如此;我用它0
作为例子.)
根据以下文件InverseFunction
:
正如在没有唯一值的函数中所讨论的那样,许多数学函数没有唯一的反转.在这种情况下,InverseFunction [f]只能表示f的可能反转之一.
由于常量函数0&
将返回0
而不管其输入如何,它具有无限多个反函数(每个函数仅在0处定义).如此定义,这个答案在规范范围内.
谜团是,为什么它给出33/10
而不是任何其他价值?
尝试使用具有Beta边缘的内置copula分布(Clayton,Frank,Gumbel)创建两个相关随机变量之和的分位数表.尝试NProbability
和FindRoot
各种方法 - 不够快.我需要探索的copula-marginal组合的一个例子如下:
nProbClayton[t_?NumericQ, c_?NumericQ] :=
NProbability[ x + y <= t, {x, y} \[Distributed]
CopulaDistribution[{"Clayton", c}, {BetaDistribution[8, 2],
BetaDistribution[8, 2]}]]
Run Code Online (Sandbox Code Playgroud)
对于使用的数值概率的单一评估
nProbClayton[1.9, 1/10] // Timing // Quiet
Run Code Online (Sandbox Code Playgroud)
我明白了
{4.914, 0.939718}
Run Code Online (Sandbox Code Playgroud)
在Vista 64bit Core2 Duo T9600 2.80GHz机器上(MMA 8.0.4)
要获得总和的分位数,请使用
FindRoot[nProbClayton[q, 1/10] == 1/100, {q, 1, 0, 2}// Timing // Quiet
Run Code Online (Sandbox Code Playgroud)
用各种方法
( `Method -> Automatic`, `Method -> "Brent"`, `Method -> "Secant"` )
Run Code Online (Sandbox Code Playgroud)
花大约一分钟才能找到一个分位数:时间是
{48.781, {q -> 0.918646}}
{50.045, {q -> 0.918646}}
{65.396, {q -> 0.918646}}
Run Code Online (Sandbox Code Playgroud)
对于其他copula-marginal组合,时间稍微好一些. …
这是我需要解决的研究设计中的一个现实问题.请帮忙.
在3厘米2的大圆圈(面积= 3厘米2,这个大圆的计算半径= 9.77毫米)中,我需要放置12个小孔(所有相同尺寸).它们应均匀分布,彼此间距为4mm,并且应尽可能靠近大圆的边缘.如何定位这些小孔以及如何计算小孔的半径?
谢谢
我知道要从中心点绘制正多边形,您可以使用以下内容:
for (int i = 0; i < n; i++) {
p.addPoint((int) (100 + 50 * Math.cos(i * 2 * Math.PI / n)),
(int) (100 + 50 * Math.sin(i * 2 * Math.PI / n))
);
}
Run Code Online (Sandbox Code Playgroud)
但是,无论如何都要更改此代码(不添加旋转)以确保始终绘制多边形,以使最上边或最下边与180度线平行?例如,通常,上面的代码为五边形或正方形(分别为n = 5和4)会产生类似于:
我正在寻找的是:
是否有任何数学方法可以实现这一目标?
发现试图用来the usual trick
重新定义GaussianFilter []:
out[x_]:=Print["(*"<>ToString@x<>"*)"];
(* Redefining Circle[ ] works as expected*)
Unprotect[Circle];
Circle[a_,args__]:=
Block[{$i=True},{"Circle",a}]/;!TrueQ[$i];
Protect[Circle];
out@Circle[{0,1},1,{0,2Pi}]
(*{Circle, {0, 1}}*)
(* Redefining GaussianFilter[ ] does not*)
Unprotect[GaussianFilter];
GaussianFilter[a_,args__]:=
Block[{$j=True},{"GaussianFilter",a}]/;!TrueQ[$j];
Protect[GaussianFilter];
SetDelayed::write: Tag GaussianFilter in GaussianFilter[a_,args__] is Protected>>
Run Code Online (Sandbox Code Playgroud) 给出两个Mathematica数据集,如
data1 = {0, 1, 3, 4, 8, 9, 15, 6, 5, 2, 0};
data2 = {0, 1, 2, 5, 8, 7, 16, 5, 5, 2, 1};
Run Code Online (Sandbox Code Playgroud)
如何创建一个集合,为我提供两个列表的最大值,即如何获取
data3 = {0, 1, 3, 5, 8, 9, 16, 6, 5, 2, 1};
Run Code Online (Sandbox Code Playgroud)
?