前提・実現したいこと
当該プログラムの#配列の入れ替えg→0含まずg2→0含む のユニット
111行目
1001個ある配列(iso0)の前半500個を後半500個の後ろに挿入したい
(時間で-500^-120500^-12で設定している関数を周期関数として0500^-121000^-12の配列に入れる)
(変換前 -500^-12 ~ -1^-12 , 0 , 1^-12 ~ 500^-12
(変換後 0 , 1^-12 ~ 500^-12 , -500^-12 ~ -1^-12
発生している問題・エラーメッセージ
Traceback (most recent call last):
File "C:\Users\oreka\python\2jigen3.py", line 115, in <module>
iso0g[i] = iso0[i+501]
TypeError: can only concatenate tuple (not "int") to tuple
該当のソースコード
python
1import numpy as np 2import math 3import matplotlib.pyplot as plt 4 5#定数宣言 6a = np.arange(-500.0e-12,600.0e-12,1.0e-12) #500.0e-12~600.0e-12の時間t(要素1100個) 7a2 = np.arange(1,1000,1) #1~1000の整数(kの一行に要素が3つある行の代入に使用) 8a3 = np.arange(-500.0e-12,500.0e-12,1.0e-12) #-500.0e-12~500.0e-12の時間t(要素1001個) 9a4 = np.arange(0,1000.0e-12,1.0e-12)#グラフ用の時間t 10iso0g = np.arange(0,1001,1.0)#配列入れ替え後の入れもん 11isog = np.arange(0,1001,1.0)#配列入れ替え後の入れもん 12iso2g = np.arange(0,1001,1.0)#配列入れ替え後の入れもん 13g = np.arange(0,500,1.0)#0含まない 14g2 = np.arange(501,1001,1.0)#0含む 15k = np.eye(1001) #kの土台(単位行列(1001×1001)) 16A = 100 17B = 217.0e-28 18z = 30.0e+3 19T = 18016836.0e-18 20dz = 15000 21 22#p(t,z)とdp/dzの作成 23p = pow(A * T ,2) / np.sqrt(pow(T ,4)+pow(B * z ,2)) * np.exp((-1 * pow(T* a ,2))/(pow(T ,4)+pow(B * z ,2))) 24#p(a3サイズ) 25pa3 = pow(A * T ,2) / np.sqrt(pow(T ,4)+pow(B * z ,2)) * np.exp((-1 * pow(T* a3 ,2))/(pow(T ,4)+pow(B * z ,2))) 26#p1a3(t+dz) 27p1a3 = pow(A * T ,2) / np.sqrt(pow(T ,4)+pow(B * (z + dz) ,2)) * np.exp((-1 * pow(T* a3 ,2))/(pow(T ,4)+pow(B * (z + dz) ,2))) 28#p2a3(t-dz) 29p2a3 = pow(A * T ,2) / np.sqrt(pow(T ,4)+pow(B * (z - dz) ,2)) * np.exp((-1 * pow(T* a3 ,2))/(pow(T ,4)+pow(B * (z - dz) ,2))) 30 31dpdz = pow(A * T * B ,2) * z * ((2 * pow(T* a3 ,2))/(pow(T ,4)+pow(B * z ,2)) - 1) * pow(pow(T ,4) 32 + pow(B * z ,2) , -1.5) * np.exp(-1 * pow(T* a3 ,2)/(pow(T ,4) + pow(B * z ,2))) 33 34pp = (p1a3 - pa3)/dz#前進差分 35pp2 = (p1a3 - p2a3) /2 /dz#中心差分 36 37#dp/dzの行列を縦一列に変形 38dpdz = dpdz.reshape([1001,1]) 39pp = pp.reshape([1001,1]) 40pp2 = pp2.reshape([1001,1]) 41 42#k(単位行列(1001×1001))の2~1000行にpを繰り返し代入 ※一行に要素が3つある行 43for i in a2: 44 k[i][i-1] = p[i+1] + p[i+2] 45 k[i][i] = -(p[i+1] + 2*p[i+2] + p[i+3]) 46 k[i][i+1] =p[i+2] + p[i+3] 47 48#kの1行目と1001行目にpを代入 ※一行に要素が2つある行 49k[1000][1000] = -(p[1001] + 2*p[1002] + p[1003]) 50k[1000][999] = p[1001] + p[1002] 51k[0][0] = -(p[1] + 2*p[2] + p[3]) 52k[0][1] = p[2] + p[3] 53 54 55kin = np.linalg.inv(k) #kの逆行列kin 56 57b = dpdz / dz / B #作成とb(dpdz)の作成 58b2 = pp / dz / B #b2(前進差分) 59b3 = pp2 / dz / B #b3(中心差分) 60 61 62#各配列にどれだけ要素が入っているかの確認用(shape) 63""" 64print("a") 65print(a.shape) 66print("a2") 67print(a2.shape) 68print("a3") 69print(a3.shape) 70print("k") 71print(k.shape) 72print("p") 73print(p.shape) 74print("dpdz") 75print(dpdz.shape) 76print("kin") 77print(kin.shape) 78""" 79 80#各行列の確認用(shape) 81np.set_printoptions(linewidth=2000,edgeitems=7,precision=4, floatmode='maxprec') 82print("k") 83print(k) 84print("p") 85print(p) 86print("dpdz") 87print(dpdz) 88print("b") 89print(b) 90print("kin") 91print(kin) 92 93#3.13式よりφを計算 94 95iso0 = kin @ b#iso0 b=dpdz 96iso0 = iso0.reshape([1001,]) 97print("iso0") 98print(iso0.shape) 99print(iso0) 100 101iso = kin @ b2#iso b=前進差分 102iso = iso.reshape([1001,]) 103print("iso") 104print(iso.shape) 105print(iso) 106 107iso2 = kin @ b3#iso2 b=中心差分 108iso2 = iso2.reshape([1001,]) 109print("iso2") 110print(iso2.shape) 111print(iso2) 112 113#配列の入れ替えg→0含まずg2→0含む 114for i in enumerate(g): 115 iso0g[i] = iso0[i+501] 116 isog[i] = iso[i+501] 117 iso2g[i] = iso2[i+501] 118 119for i in g2: 120 iso0g[i] = iso0[i-501] 121 isog[i] = iso[i-501] 122 iso2g[i] = iso2[i-501] 123 124#iso確認用 125print("iso0") 126print(iso0g) 127print(iso0g.shape) 128 129 130#各行列のPLOt 131plt.figure(0) 132plt.xlabel("t") 133plt.ylabel("p(t,z)") 134plt.plot(a,p) 135 136plt.figure(1) 137plt.xlabel("t") 138plt.ylabel("bとpp") 139plt.plot(a3,dpdz) 140plt.plot(a3,pp) 141plt.plot(a3,pp2) 142 143plt.figure(2) 144plt.xlabel("t") 145plt.ylabel("φ") 146plt.plot(a4,iso0g) 147plt.plot(a4,isog) 148plt.plot(a4,iso2g) 149 150plt.show() 151 152
試したこと
以前エラーが出た際(float型にする)に関しておは修正しましたがその後がうまくいきません
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/19 08:01