前提
Python(Google Colaboratory)でポアソン方程式の計算を行いその結果をグラフや図として出力することはできましたが座標の数値をcsvファイルとして出力することができません
実現したいこと
計算結果を数値として出力する
x,y,φ(このコードではp)を一列ごと、計3列で出力したい
発生している問題・エラーメッセージ
TypeError: writerows() takes exactly one argument (3 given)
該当のソースコード
Python
1from logging import fatal 2from matplotlib import pyplot as plt 3from matplotlib import cm 4from mpl_toolkits.mplot3d import Axes3D 5import numpy as np 6import itertools 7import csv 8 9# 条件設定 10nx = 100 11ny = 100 12nt = 1 13xmin = 0 14xmax = 2 15ymin = 0 16ymax = 2 17 18dx = (xmax - xmin) / (nx - 1) 19dy = (ymax - ymin) / (ny - 1) 20 21# 初期状態 22p = np.zeros((ny, nx)) 23pd = np.zeros((ny, nx)) 24b = np.zeros((ny, nx)) 25c = np.zeros((ny, nx)) 26f = np.zeros((ny, nx)) 27g = np.zeros((ny, nx)) 28h = np.zeros((ny, nx)) 29k = np.zeros((ny, nx)) 30l = np.zeros((ny, nx)) 31o = np.zeros((ny, nx)) 32x = np.linspace(xmin, xmax, nx) 33y = np.linspace(xmin, xmax, ny) 34 35# 電荷 36b[ 50 , 1 : 101 : 4 ] = -10.e-8 37c[ 50 , 2 : 101 : 8 ] = -10.e-8 38f[ 50 , 3 : 101 : 8 ] = -10.e-8 39g[ 50 , 4 : 101 : 8 ] = -10.e-8 40h[ 47:50 , 1 : 101 : 4 ] = -10.e-8 41k[ 47 , 0 : 101 : 8 ] = -10.e-8 42l[ 47 , 6 : 101 : 8 ] = -10.e-8 43o[ 47 , 7 : 101 : 8 ] = -10.e-8 44for it in range(nt): 45 46 pd = p.copy() 47 48 p[1:-1,1:-1] = (((pd[1:-1, 2:] + pd[1:-1, :-2]) * dy**2 + 49 (pd[2:, 1:-1] + pd[:-2, 1:-1]) * dx**2 - 50 (b[1:-1, 1:-1] + c[1:-1 , 1:-1] + f[1:-1 , 1:-1] + g[1:-1 , 1:-1] + h[1:-1 , 1:-1] + k[1:-1 , 1:-1] + l[1:-1 , 1:-1] + o[1:-1 , 1:-1]) * dx**2 * dy**2) / 51 (2 * (dx**2 + dy**2))) 52 53 p[0, :] = 0 54 p[ny-1, :] = 0 55 p[:, 0] = 0 56 p[:, nx-1] = 0 57 58 59def plot2D(x, y, p): 60 fig = plt.figure(figsize=(11, 7), dpi=100) 61 ax = fig.gca(projection='3d') 62 X, Y = np.meshgrid (x , y) 63 surf = ax.plot_surface(X, Y, p[:], rstride=1, cstride=1, cmap=cm.viridis,linewidth=0, antialiased=False) 64 ax.view_init(30, 225) 65 ax.set_xlabel('x') 66 ax.set_ylabel('y') 67 ax.set_zlabel('φ') 68 69plot2D(x, y, p) 70plt.show() 71 72csv_path = "/content/drive/MyDrive/" 73# CSVファイル名 74csv_name = 'out_name.csv' 75# リストをCSVファイルに出力 76with open(csv_path+csv_name, 'w', newline='') as f: 77 writer = csv.writer(f) 78 writer.writerows(x, y, p) 79# リスト形式の配列のままcsvファイルに出力 80 81#オブジェクトを生成 82fig = plt.figure(figsize=(11,7), dpi=100) 83fig 84 85xmin = 0 86xmax = 2 87ymin = 0 88ymax = 2 89 90x = np.linspace(xmin, xmax, nx) 91y = np.linspace(xmin, xmax, ny) 92 93X, Y = np.meshgrid(x, y) 94plt.contourf(X, Y, p, alpha=0.5, cmap=cm.viridis) 95plt.colorbar() 96plt.xlabel('X') 97plt.ylabel('Y') 98
試したこと
2.3日調べながら模索しましたが課題の締め切りが近いので質問させていただくことにしましたよろしくお願いします
補足情報(FW/ツールのバージョンなど)
そのままエクセルに出力する方法があれば最高です
プログラミング初心者なのでご容赦願います

回答2件
あなたの回答
tips
プレビュー