通过计算狄拉克介电常数的matlab代码:
clear;
clc;
%******************************狄拉克********************************
x=[0.1:0.01:100];
e0=1.60219e-19; %Charge of electron 电子带电量
h1=6.626e-34/2/pi;%Reduced Planck constant 约化普朗克常数
ec=3;% epsilonC=3;
epsilonB=1;%介电常数用
epsilon0 =8.854187817e-12;% Permittivity of free space自由空间的介电常数
g=40;
vf=1e6;%费米速度fermi velocity
Ef=0.09*e0;%Fermi level
kf=Ef/(h1*vf); %fermi monentum
tao=4.5e-13;
f=x.*1e12;%频率frequency
omiga=((2*f.*pi*h1)/Ef)+1i*(h1/(tao*Ef));
A=(e0^2*g*kf)/(24*pi*h1);
[m,n]=size(omiga);
sigmaR=zeros(1,n);
sigmaI=zeros(1,n);
epsilonR=zeros(1,n);
epsilonI=zeros(1,n);
sigma=zeros(1,n);
epsilon=zeros(1,n);
B=stepfun(omiga,2);
for a=1:n
sigmaR(1,a)=A*omiga(a)*B(a); % real part
sigmaI(1,a)=(A/pi)*(4/omiga(a)-omiga(a)*log((4*ec^2)/(abs(omiga(a)^2-4)))); % Imag part
sigma(1,a)=sigmaR(a)+1i*sigmaI(a);
epsilon(1,a)=epsilonB+1i*(sigma(1,a)/(f(a)*2*pi*epsilon0));
epsilonR(1,a)=real(epsilon(1,a));% real part
epsilonI(1,a)=imag(epsilon(1,a)); % Imag part
end
a1=real(sigma)/(1e9*(e0^2)/h1);%实部real part
a2=imag(sigma)/(1e9*(e0^2)/h1);%虚部 Imag part
subplot(2,2,1)
plot(omiga,a1,'r:');
axis([0.1 2.5 -0.05 0.2]);
subplot(2,2,2)
plot(omiga,a2,'g');
axis([0.1 2.5 -0.3 0.8]);
f1=f/1e12;
subplot(2,2,3)
plot(f1,epsilonR,'r')%实部
axis([1.35 1.45 -4e3 0]);
hold on
subplot(2,2,4)
plot(f1,epsilonI,'g');%虚部
axis([1.35 1.45 0 1200]);
for i=1:1001
jiedianchangshu(i,1)=(f(i)/1e12)';
jiedianchangshu(i,2)=(epsilonR(i))';
jiedianchangshu(i,3)=(epsilonI(i))';
end
得到三列数据如下:
如果想进行cst联合matlab仿真,必须更换格式如同:
通过一系列乱搞的代码:
import codecs
f = codecs.open(r'C:\Users\hubao\Desktop\ceshi.txt', mode='r',encoding='utf-8')#打开txt文件
line =f.readline()#以行的形式进行读取文件
list1 = []
list2 = []
while line:
a = line.split()
b = a[0:1] #将其添加到列表里
c = a[1:2]
d = a[2:3]
list1.append(a)
list2.append(d)
line = f.readline()
f.close()
# for i in list1:
# print(i)
# result2txt=str(list1) # data是前面运行出的数据,先将其转为字符串才能写入
for j in list1:
print(j)
result2txt=str(list1) # data是前面运行出的数据,先将其转为字符串才能写入
with open('结果存放.txt','a') as file_handle: # .txt可以不自己新建,代码会自动新建
file_handle.write(result2txt) # 写入
file_handle.write('\n') # 有时放在循环里面需要自动转行,不然会覆盖上一条数据
实现了将三列数据依次变为字符串形式:
通过记事本的替换功能:
成功的将 1.0000000000000001e-01 -6.5093228767675762e+04 2.3029589284695822e+05变为invoke(material,'AddDispersionFittingValueEps','1.0000000000000001e-01', '-6.5093228767675762e+04', '2.3029589284695822e+05' ,'1.0');