2016-05-05 9 views
0

私は、一次元で拡散関数を数値的に解くためにフォワード差分法を使用しています。解の最後のプロットは、解u(x、t)がxとtの値のグリッド上にプロットされるサーフェスでなければなりません。私は問題を解決しましたが、データをグリッド表示でプロットすることはできません。パラメトリック曲線の代わりにプロットサーフェス

私はこの問題を解決するには2つの方法を考えることができます。

1)マイxとtのアレイは、一次元でなければなりませんが、私のU配列は、2次元配列でなければなりません。最終的には、私はuの正方行列が必要ですが、それをコーディングするのは苦労しています。現在私はあなたのための1Dの配列を持っています。ここには、uが入力されるコードがあります。

u = zeros(Nx+1)   # unknown u at new time level 
u_1 = zeros(Nx+1)   # u at the previous time level 
# Set initial condition u(x,0) = I(x) 
for i in range(0, Nx+1): 
#set initial u's to I(xi) 
    u_1[i] = 25-x[i]**2 
for n in range(0, Nt): 
# Compute u at inner mesh points 
    for i in range(1, Nx): 
     u[i] = u_1[i] + F*(u_1[i-1] - 2*u_1[i] + u_1[i+1]) 

2)上記のコードは、Uのために1次元配列を返し、X、Y、Z 3つの1Dアレイと3D表面をプロットする方法はありますか?

答えて

0

まあ、あなたが提供していない多くの情報があります。例えば、あなたはx、y、zプロットが欲しいと言ったが、x、y、zはあなたのプロットの文脈の中にあるはずがないと言った。また、zは通常z(x、y)です。

次のレシピでは、表面に入れる変数としてtxおよびu(t,x)と仮定しています。

EDIT:も(このレシピの機能computeUである)あなたのコードは何もしていないようだNtのループを持っていた私は正確にあなたの考えではありませんが、それはあなたの運動に適応する必要があります想像します。私はこの例の目的のために削除しました。

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

def computeU(Nx,x,F,Nt): 
    u = np.zeros(Nx+1)   # unknown u at new time level 
    u_1 = np.zeros(Nx+1)   # u at the previous time level 
    # Set initial condition u(x,0) = I(x) 
    for i in range(0, Nx+1): 
    #set initial u's to I(xi) 
     u_1[i] = 25-x[i]**2 
    #for n in range(0, Nt): # I'm not sure what this is doing. It has no effect. 
    # Compute u at inner mesh points 
    for i in range(1, Nx): 
     u[i] = u_1[i] + F*(u_1[i-1] - 2*u_1[i] + u_1[i+1]) 
    return np.hstack((u[:,np.newaxis],u_1[:,np.newaxis])) 

Nx = 10 
F = 3 
Nt = 5 
x = np.arange(11) 
t = np.arange(2) 

X,Y = np.meshgrid(t,x) 
Z = computeU(Nx,x,F,Nt) 
fig = plt.figure() 
ax = fig.gca(projection='3d') 
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,linewidth=0, antialiased=False) 
plt.show() 

Xの同じ形状を持つことになりますUアレイ(、Yのあなたのスタックに対してマッピングする私は(1Dアレイからの)新しいtxを構築するためにmeshgridを使用しましたかお知らせ - 新しいtx)。結果は次のとおりです。

​​