小编Ben*_*enB的帖子

更新操作[]'d参数更改时的绘图

在项目的最后几天,我一直在与Mathematica的Manipulate功能作斗争.

我正在努力调整进入物理模型的假设和边界条件.为此,我希望能够绘制不同的方程并调整参数并使图表在运行中更新.Manipulate似乎是工作的完美工具 - 除了我无法让它工作.参数更改后,图表不会更新.

基本示例:

a =.;
b =.;
c =.;
func1[x_] := a*x;
func2[x_] := a*x^2 + b*x + c;
funcNamesList := {"Linear", "Quadratic"};
funcList := {func1[x], func2[x]}
Manipulate[
   Plot[function, {x, -5, 5}], {function,MapThread[Function[#1 -> #2],
    {funcList, funcNamesList}]}, {a, -5, 5}, {b, -5, 5}, {c, -5, 5},
    LocalizeVariables -> False
]
Run Code Online (Sandbox Code Playgroud)

例如,我可以func1通过单击func1,调整a然后func1再次单击来刷新,但我希望在调整时更新它,a 因为我使用的实际功能相对于它们的参数而言相当不稳定.

- 因为我将处理具有不同参数的长函数,使用函数列表很有用.

编辑:

如果它为任何人产生任何想法,这里有一些我想做的各个组件的工作示例(来自Wolfram文档):

绘制图表并在参数更改时更新它们:

Manipulate[
    Plot[Sin[a x + b], {x, 0, 6}], {{a, 2, "Multiplier"}, 1, …
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica

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

PlotLegends使得Manipulate []图形变慢

我有一个简短的程序设置,使用Manipulate显示具有不同参数的三个相同功能的图.我想用参数的值标记每个函数.我的出发点是让一个传奇出现.将PlotLegend添加到绘图会导致Mathematica变得非常慢.

我的代码是:

Needs["PlotLegends`"]
Manipulate[

 UemaxOverUe = ((VA/Vphs)^2 (2 p - 1) + 1 - Ves0/Vphs - 2)/((VA/Vphs)^2 - (1 - Ves0/Vphs));

 UemaxOverUe2 = ((VA/Vphs)^2 (2 p - 1) + 1 - Ves02/Vphs - 2)/((VA/Vphs)^2 - (1 - Ves02/Vphs));

 UemaxOverUe3 = ((VA/Vphs)^2 (2 p - 1) + 1 - Ves03/Vphs - 2)/((VA/Vphs)^2 - (1 - Ves03/Vphs));

 ListPlot[{
  Table[{Vphs/VA, 1/UemaxOverUe}, {Vphs, .001 VA, VA, .01 VA}], 
  Table[{Vphs/VA, 1/UemaxOverUe2}, {Vphs, .001 VA, VA, .01 VA}], 
  Table[{Vphs/VA, 1/UemaxOverUe3}, {Vphs, .001 VA, VA, .01 VA}]}, …
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica

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

Clear []和ClearAll []如何运作?清除[]无法清除两个不同的Manipulate []使用的变量

我有两个不同的Mathematica笔记本,具有相似但不同的功能.当它们是唯一开放的笔记本时,两者都可以正常工作.尽管我(自由)使用Clear []来清除相关变量,但是当其他笔记本打开时,其中一个始终失败.

称之为GlobalManipulate

ClearAll["Global`*"]
Clear["Global`*"]
Definition[linear]
linear[x_] := a x;
quad[x_] := a x^2;
functionList := {linear, quad};
Manipulate[
  Plot[function[dummy], {dummy, -10, 10}], 
  {function, functionList}, {a, -10, 10},
  LocalizeVariables -> False, TrackedSymbols -> All
]
Run Code Online (Sandbox Code Playgroud)

称之为LocalManipulate

Clear["Global`*"]; 
Manipulate[
   {
      linear := a x; quad := a x^2; 
      linear, quad, function, 
      Plot[ReleaseHold@function, {x, -10, 10}]
   }, 
   {function, {HoldForm@linear, HoldForm@quad}}, 
   {a, -10, 10}, TrackedSymbols -> All
]
Run Code Online (Sandbox Code Playgroud)

当它自己运行时,GlobalManipulate按预期工作,我看到更新的图a更改.线性产生的定义Null.

当LocalManipulate打开,运行时,GlobalManipulate不再有效.即使它重新运行它的情节会出现一秒然后消失.

我使用Mathematica 8的本地副本和Mathematica 7的远程副本重现了这一点.

问题必须涉及功能linear[x_] …

wolfram-mathematica

4
推荐指数
1
解决办法
2288
查看次数

空白在替换规则的分母中

Mathematica 7.0似乎不喜欢在分母中有空白.谁能解释为什么会这样?

输入:

ClearAll["Global`*"];
(*Without blanks:*)
a^2 / b^2 /. a^2 / b^2 -> d
(*with:*)
a^2 / b^2 /. a^c_ / b^c_ -> d
(*Without blanks:*)
a^2 / b^2 /. (a / b)^2 -> d
(*With:*)
a^2 / b^2 /. (a / b)^c_ -> d
(*Without blanks:*)    
a^2 / b^2 /. a^2 * b^(-2) -> d
(*With:*)
a^2 / b^2 /. a^c_ * b^(-c_) -> d
Run Code Online (Sandbox Code Playgroud)

输出:

d
a^2/b^2
d
a^2/b^2
d
a^2/b^2
Run Code Online (Sandbox Code Playgroud)

我正在努力解决一个更复杂的问题.我要做的替换是在表单中:

(a ^ c_. * Coefficient1_. …
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica

3
推荐指数
2
解决办法
336
查看次数

高斯混合模型 (GMM) 拟合不佳

我一直在玩 Scikit-learn 的 GMM 函数。首先,我刚刚创建了一个发行版x=y

from sklearn import mixture
import numpy as np 
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

line_model = mixture.GMM(n_components = 99)
#Create evenly distributed points between 0 and 1.
xs = np.linspace(0, 1, 100)
ys = np.linspace(0, 1, 100)

#Create a distribution that's centred along y=x
line_model.fit(zip(xs,ys))
plt.plot(xs, ys)
plt.show()
Run Code Online (Sandbox Code Playgroud)

这产生了预期的分布: 分布

接下来我给它拟合一个 GMM,并绘制结果:

#Create the x,y mesh that will be used to make a 3D plot
x_y_grid = []
for x in xs: …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn

2
推荐指数
1
解决办法
2341
查看次数

为什么C在double的计算中假设整数类型?

我试图在GNU情节中绘制一个函数,我的情节与文章中的情节不同.在阅读GNU将函数解释为C时,我尝试用C编写函数.同样的问题.

最终我发现这个问题可能会出现这个问题:

#include <stdio.h>
#include <stdlib.h>

int main()
{
double p = 1.0;
double pMinusOneHalf1 = p - (1.0/2.0);
double pMinusOneHalf2 = p - (1/2);

printf("\nFirst = %lf \n Second = %lf\n\n", pMinusOneHalf1, pMinusOneHalf2);

return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给出了输出

First = 0.500000 
Second = 1.000000
Run Code Online (Sandbox Code Playgroud)

只是想知道是否有人解释为什么C将假设"1"和"2"作为DOUBLE表达式中的INT.

对于人们来说似乎很容易被抓住.gcc的-Wall选项甚至没有评论它.

c

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

标签 统计

wolfram-mathematica ×4

c ×1

python ×1

scikit-learn ×1