瞎猫碰见死耗子:把三列数据转换为matlab联合cst仿真的格式数据

通过计算狄拉克介电常数的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');

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值