0

これをプロットする際にいくつか問題があります。何もプロットされないプロットステートメントまではすべて問題ありません。何かをプロットできるように、誰かが私を助けてくれませんか。以下は私のコードです:

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」で畳み込みを実行してプロットします。

誰の親切な助けにも本当に感謝します。

どうもありがとう!

4

3 に答える 3

1

=を使用する必要がある場所を使用しているかのように見えます:=。前者は即時割り当て ( と呼ばれるSet) を作成し、もう一方は遅延割り当て ( SetDelayed) を作成します。この違いはMathematicaの基本的なものです。この違いを完全に理解するまでドキュメントを読む必要があります。

于 2012-07-11T14:31:41.980 に答える
1

あなたが解決しようとしている問題を理解しているかどうかわかりません。ただし、以下に示すようにコードを変更すると、実行できるようになります-いくつかの式を関数に言い換えました(経験則として、左側に 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時間)実行した後、以下のプロットが生成されます

T のプロット

より慣用的なアプローチを使用して、このプロットを生成するはるかに効率的な方法がおそらくあります。投稿したコードで何をしようとしているのかについてより詳細な情報を提供できれば、私や他の人がより有用な答えを提供できるかもしれません.

于 2012-07-12T04:13:32.297 に答える
0

質問の概要に基づくテンプレート ソリューションを次に示します。

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}

このプロトタイプはあなたの目標とどのように一致しますか?

于 2012-07-11T19:14:23.720 に答える