Wolfram mathematica 我想为样本数据的每个x值添加高斯噪声,然后绘制

Wolfram mathematica 我想为样本数据的每个x值添加高斯噪声,然后绘制,wolfram-mathematica,plot,noise,Wolfram Mathematica,Plot,Noise,我在策划这件事时遇到了一些问题。在plot语句中没有任何绘图之前,一切都正常。谁能帮帮我,让它能策划些什么。以下是我的代码: j = 10; s = 0; r = 0; B[n_] = Integrate[2*Sin[n*Pi*x]*(x), {x, 0, 1}]; u[x_, psi_] = Sum[B[n]*Sin[n*Pi*x]*Exp[-(n*Pi)^2*psi], {n, 1, j}]; K[x_, psi_] = Sum[Sin[n*Pi*x]* Sin[n*Pi

我在策划这件事时遇到了一些问题。在plot语句中没有任何绘图之前,一切都正常。谁能帮帮我,让它能策划些什么。以下是我的代码:

j = 10; 
s = 0; r = 0;

B[n_] = Integrate[2*Sin[n*Pi*x]*(x), {x, 0, 1}];
u[x_, psi_] = Sum[B[n]*Sin[n*Pi*x]*Exp[-(n*Pi)^2*psi], {n, 1, j}];

K[x_, psi_] = 
  Sum[Sin[n*Pi*x]*
    Sin[n*Pi*
      psi]*(2*Exp[-(n*Pi)^2*
         Abs[s + r]] - (Exp[-(n*Pi)^2*Abs[s - r]] - 
         Exp[-(n*Pi)^2*(s + r)])/(n*Pi)^2 ), {n, 1, j}];

w = RandomReal[NormalDistribution[0, 1], 101];
d = Round[100*x + 1];
S = Total[Total[u[x, psi]/Length[u[x, psi]]] + w[d]]

T[x_, psi_] = Integrate[K[x - y, psi]*(y)*S, {y, -10, 10}]

Plot3D[T[x, psi], {x, 0, 1}, {psi, 0.01, 1}, 
 AxesLabel -> {"x", "t", "Temperature"}, Boxed -> False, 
 Mesh -> False]
基本上,我有一些来自“u”的数据,我想对每个“x”值进行噪声处理(来自“w”),然后在“T”中进行卷积并绘制

我将非常感谢任何人的帮助


非常感谢

它看起来很像是在使用
=
您应该在哪里使用
:=
。前者进行即时赋值(称为
Set
),另一个进行延迟赋值(
SetDelayed
)。在Mathematica中,差异是最基本的,您应该阅读文档,直到完全理解这种差异。

以下是基于您的问题大纲的模板解决方案:

data = RandomInteger[{0, 1}, 100]; (* data creation function *) 
noise = RandomVariate[NormalDistribution[0, 1], Length@data]; (* noise vector *)
noisyData = data + noise; (* sum noise and data *)
ListConvolve[data, noisyData] (* apply convolution *)
{8.20928}


这个原型如何与您的目标相匹配

我不确定我是否理解您试图解决的问题。但是,如下所示修改代码可以让它运行-我将几个表达式重新表述为函数(一个好的经验法则是使用:=如果左侧包含一个模式,如B[n_]),并且我删除了一些显然试图将标量视为向量的代码

j = 10; s = 0; r = 0;

ClearAll[B];
B[n_] := B[n] = Integrate[2*Sin[n*Pi*a]*(a), {a, 0, 1}];

ClearAll[u];
u[x_, psi_] := Sum[B[n]*Sin[n*Pi*x]*Exp[-(n*Pi)^2*psi], {n, 1, j}];

K[x_, psi_] := 
  Sum[Sin[n*Pi*x]*
    Sin[n*Pi*
      psi]*(2*Exp[-(n*Pi)^2*Abs[s + r]] - (Exp[-(n*Pi)^2*Abs[s - r]] -
          Exp[-(n*Pi)^2*(s + r)])/(n*Pi)^2), {n, 1, j}];

S[x_, psi_] := u[x, psi] + RandomReal[NormalDistribution[]]

T[x_, psi_] := Integrate[K[x - y, psi]*(y)*S[x, psi], {y, -10, 10}]

Plot3D[T[x, psi], {x, 0, 1}, {psi, 0.01, 1}, 
 AxesLabel -> {"x", "t", "Temperature"}, Boxed -> False, 
 Mesh -> False]
运行一段时间(约1小时)后,它将生成下面的绘图


也许有一种更有效的方法可以使用更惯用的方法来制作这个情节。如果你能提供更多关于你试图用你发布的代码做什么的详细信息,那么也许我或其他人可以给你一个更有用的答案。

你能告诉我应该在哪里使用:=让它工作吗。很抱歉给您带来不便。我一直收到以下错误:Part::pspec表示它不是“S”中的整数。“T”的集成解决方案看起来也不错,但我不知道为什么绘图不起作用,因为它在插入数字和绘图时很有意义。你见过
convalve
listcolvalve
?我确实尝试先使用它,但它对我不起作用,所以我这样做了。如果有人能纠正我的错误,请告诉我。我将不胜感激。与此主题相关的文档链接将改进此答案。在
S
的定义中,您编写
w[d]
,但
w
是一个数字列表,而不是一个函数。您可以尝试类似于
插值[w][d]
的方法。谢谢您的帮助!我一定会把它作为一个替代方案。我试着在我的机器上运行代码,但它没有给我一个绘图:(只是空轴…你能告诉我可能有什么问题吗?我使用了你修改过的代码你使用的是什么版本的MM?我在运行Mac OS X 10.7.4的8.0.1.0上。如果你运行Plot3D[Sin[X+y^2],{X,-3,3},{y,-2,2}]?是的,我得到了那个情节。我正在运行MM7.0.0,我在Windows7(MAC的训练营)中运行它
randovariate
是在MM 8中引入的;可能是这导致了问题?我更新了答案,改为使用RandomReal。非常感谢…它很有效!我还想知道你是否有时间来交流,你是否可以看看我发布的另一个问题,很抱歉打扰你,尽管你已经帮了很多忙。我非常感谢你t: