单层硅超材料实现双频超宽带光子自旋轨道相互作用

0 下载量 110 浏览量 更新于2024-08-29 收藏 1.69MB PDF 举报
"这篇文章介绍了一种基于单层硅超材料实现双频和超宽带光子自旋轨道相互作用的方法,用于电磁波形变控制。通过在金属镜面上布置空间变异性非晶硅脊结构,设计出能高效降低镜面反射的两种散射工程超材料。" 文章详细内容: 在电磁隐身应用领域,实现多光谱和宽操作带的电磁波散射调控一直是一个重要的研究目标。这篇科研论文提出了一种创新方法,利用单层的硅超材料来实现这一目标。这些超材料由空间变异的非晶硅脊结构组成,这些结构被铺设在一个金属镜面上,能够生成高效率的双频和超宽带光子自旋轨道相互作用以及几何相位。 作者们设计了两个具有散射工程特性的超材料表面,目标是减少镜面反射。第一个设计可能用于某一特定频率范围内的电磁波操控,而第二个设计则可能扩展到更广泛的频率范围内,展示了这种技术在超宽带电磁波控制上的潜力。非晶硅脊的结构变化为空间变异,这意味着它们的几何参数(如长度、宽度或间距)随空间位置的不同而改变,从而导致不同的光子行为。 光子自旋轨道相互作用(Photonic Spin-Orbit Interaction, PSOI)是一种物理现象,其中光子的自旋(偏振状态)与它的轨道运动相关联,导致光束的传播特性发生变化。在本研究中,这种效应被用来改变入射电磁波的散射方向,这在隐身技术和电磁波操纵领域具有重要意义。 单层硅超材料的优势在于其结构紧凑,易于制造,并且可以通过微纳加工技术精确控制。由于其在两个不同频段都能产生高效作用,这使得它在多频通信、雷达系统和光学信息处理等领域具有潜在的应用价值。此外,由于其超宽带特性,这种超材料可以覆盖广泛的电磁波频率,增加了设计灵活性和功能多样性。 这项工作为电磁波的多频和宽带操控提供了一个新的平台,不仅有助于提升隐身技术的性能,还可能推动光学元件、光通信设备以及新型传感器的创新设计。同时,这种技术的发展也为未来纳米光子学和量子信息科学的研究开辟了新的途径。

import numpy as np from py2neo import Graph graph = Graph("http://23/231/23/4:7474/browser/", auth=("x", "xxx!")) # from py2neo import Node, Relationship def load_data(): query = """ MATCH (u:custom)-[]->(p:broadband) RETURN u.number, p.name, 1 """ result = graph.run(query) # 构建用户商品矩阵 users = set() products = set() data = [] for row in result: user_id = row[0] product_id = row[1] quantity = row[2] users.add(user_id) products.add(product_id) data.append((user_id, product_id, quantity)) # 构建两个字典user_index,user_index,key为名称,value为排序的0~N-1的序号 user_index = {u: i for i, u in enumerate(users)} print("user_index:",user_index) product_index = {p: i for i, p in enumerate(products)} print("product_index:",product_index) # 构建全零矩阵 np.zeros matrix = np.zeros((len(users), len(products))) # 将存在关系的节点在矩阵中用值1表示 quantity = 1 for user_id, product_id, quantity in data: matrix[user_index[user_id], product_index[product_id]] = quantity # print("matrix:",matrix) # user_names = list(user_index.keys()) # product_names = list(product_index.keys()) # print("user_names:", user_names) # print("product_names:", product_names) # 转成用户商品矩阵 # matrix 与 np.mat转化后格式内容一样 user_product_matrix = np.mat(matrix) # print(user_product_matrix) return user_product_matrix def generate_dict(dataTmp): m,n = np.shape(dataTmp) print(m,n) data_dict = {} for i in range(m): tmp_dict = {} # 遍历矩阵,对每一行进行遍历,找到每行中的值为1 的列进行输出 for j in range(n): if dataTmp[i,j] != 0: tmp_dict["D_"+str(j)] = dataTmp[i,j] print(str(j)) print(tmp_dict["D_"+str(j)]) data_dict["U_"+str(i)] = tmp_dict print(tmp_dict) print(str(i)) for j in range(n): tmp_dict = {} for i in range(m): if dataTmp[i,j] != 0: tmp_dict["U_"+str(i)] = dataTmp[i,j] data_dict["D_"+str(j)] = tmp_dict return data_dict def PersonalRank(data_dict,alpha,user,maxCycles): rank = {} for x in data_dict.keys(): rank[x] = 0 rank[user] = 1 step = 0 while step < maxCycles: tmp = {} for x in data_dict.keys(): tmp[x] = 0 for i ,ri in data_dict.items(): for j in ri.keys(): if j not in tmp: tmp[j] = 0 tmp[j] += alpha+rank[i] / (1.0*len(ri)) if j == user: tmp[j] += (1-alpha) check = [] for k in tmp.keys(): check.append(tmp[k] - rank[k]) if sum(check) <= 0.0001: break rank = tmp if step % 20 == 0: print("iter:",step) step = step + 1 return rank def recommand(data_dict,rank,user): items_dict = {} items = [] for k in data_dict[user].keys(): items.append(k) for k in rank.keys(): if k.startswith("D_"): if k not in items: items_dict[k] = rank[k] result = sorted(items_dict.items(),key=lambda d:d[1],reverse=True) return result print("-------------") data_mat = load_data() print("-------------") data_dict = generate_dict(data_mat) print("-------------") rank = PersonalRank(data_dict,0.85,"U_1",500) print("-------------") result = recommand(data_dict,rank,"U_1") print(result) 优化这段代码,将U_N替换成U_NUMBER D_N替换成D_NAME

2023-06-13 上传
2023-02-06 上传