R中cumsum函数的每个参数

时间: 2024-05-28 20:11:07 浏览: 15
在R语言中,cumsum()函数用于计算向量的累计和。该函数只有一个参数,即输入的数值向量x。 cumsum(x)函数将返回一个与x长度相同的数值向量,其中每个元素都是原始向量x中对应位置前面所有元素的累计和。例如,对于向量x=c(1,2,3,4),cumsum(x)将返回向量c(1,3,6,10),其中第一个元素为1,第二个元素为1+2=3,第三个元素为1+2+3=6,第四个元素为1+2+3+4=10。
相关问题

用R语言写一个函数: donut_plot(x, col), 能绘制出 甜甜圈图(donut chart)

以下是用R语言编写的donut_plot函数,可以绘制出甜甜圈图: ```R donut_plot <- function(x, col) { library(plotrix) # 计算每个部分所占的百分比 pct <- round(100 * x / sum(x)) # 计算每个部分的起始角度和结束角度 angles <- cumsum(x) - 0.5 * x # 绘制甜甜圈图 pie(x, col = col, border = "white", radius = 0.75, clockwise = TRUE, init.angle = 90) add.pie(z = pct, col = col, radius = 0.5, clock = FALSE, labels = paste(pct, "%"), label.pos = angles, font = 2, cex = 0.8) } ``` 其中,x表示每个部分的数值,col表示每个部分的颜色。调用该函数即可绘制出甜甜圈图,例如: ```R x <- c(10, 30, 50, 20) col <- c("red", "green", "blue", "yellow") donut_plot(x, col) ``` 该代码会生成一个甜甜圈图,其中每个部分的数值和颜色分别由x和col参数指定。

三目标函数nsgaiimatlab代码

### 回答1: NSGA-II(Non-dominated Sorting Genetic Algorithm II)是一种多目标优化算法,其主要思想是通过将非占优的解分层来解决多目标优化问题。在NSGA-II中,通过使用非支配排序和拥挤度距离来确定最优解集,以保持解的多样性和平衡性。以下是NSGA-II的三个目标函数在MATLAB中的代码。 首先,我们需要定义目标函数。假设我们有三个目标函数f1,f2和f3,它们是x和y的函数。如下所示: ```matlab function [f1, f2, f3] = objectives(x,y) f1 = x.^2 + y.^2; f2 = (x-2).^2 + y.^2; f3 = abs(x).*sqrt(abs(x)) + abs(y).*sqrt(abs(y)); end ``` 接下来,我们可以使用以下代码来实现NSGA-II算法: ```matlab %% Problem definition n_var = 2; % number of variables n_obj = 3; % number of objectives l_bound = [-5 -5]; % lower bound u_bound = [5 5]; % upper bound max_eval = 100; % maximum number of evaluations %% NSGA-II algorithm pop_size = 100; % population size p_crossover = 0.9; % crossover probability p_mutation = 1/n_var; % mutation probability eta_crossover = 15; % crossover distribution index eta_mutation = 20; % mutation distribution index pop = init_pop(pop_size, n_var, l_bound, u_bound); % initialize population eval_count = pop_size; % number of evaluations while eval_count < max_eval % generate offspring [pop_off, ~] = sbx_crossover(pop, p_crossover, eta_crossover, l_bound, u_bound); [pop_off, ~] = polynomial_mutation(pop_off, p_mutation, eta_mutation, l_bound, u_bound); % evaluate offspring [f1_off, f2_off, f3_off] = objectives(pop_off(:,1), pop_off(:,2)); % merge parent and offspring populations pop = [pop; pop_off]; f1 = [f1; f1_off]; f2 = [f2; f2_off]; f3 = [f3; f3_off]; % non-dominated sorting and crowding distance assignment [fronts, crowding_distance] = non_dominated_sorting(f1, f2, f3); % select new population new_pop = []; current_front = 1; while length(new_pop) + length(fronts{current_front}) <= pop_size % add all solutions in current front new_pop = [new_pop; fronts{current_front}]; current_front = current_front + 1; end % sort solutions in current front by crowding distance crowding_distance_current_front = crowding_distance(fronts{current_front}); [~, crowding_distance_sort_index] = sort(crowding_distance_current_front, 'descend'); current_front_index = 1; current_front_size = length(fronts{current_front}); while length(new_pop) < pop_size % add solutions from current front based on crowding distance new_pop = [new_pop; fronts{current_front}(crowding_distance_sort_index(current_front_index))]; current_front_index = current_front_index + 1; if current_front_index > current_front_size current_front = current_front + 1; if current_front > length(fronts) break end current_front_size = length(fronts{current_front}); crowding_distance_current_front = crowding_distance(fronts{current_front}); [~, crowding_distance_sort_index] = sort(crowding_distance_current_front, 'descend'); current_front_index = 1; end end % update population pop = pop(new_pop,:); f1 = f1(new_pop); f2 = f2(new_pop); f3 = f3(new_pop); eval_count = eval_count + length(pop_off); end ``` 在此代码中,我们首先定义了问题,包括变量数、目标数、变量的界限和最大评估次数。然后,我们使用初始种群、交叉概率、变异概率、交叉和变异分布指数以及界限来生成子代种群,然后评估子代。接下来,我们将父代和子代种群合并,并根据目标函数的非支配排序和拥挤度距离来生成新种群。最后,我们更新种群并重复该过程,直到达到最大评估次数。 ### 回答2: NSGA-II是遗传算法的一种实现方式,用于解决多目标优化问题。其主要特点是将种群分为不同的等级,制定一定的选择规则,把较优的解与较差的解都纳入考虑范围内。 在NSGA-II中,目标函数扮演着非常重要的角色。NSGA-II可以同时处理多个目标函数,而且依据优化目标不同,目标函数的函数形式也会有所不同。比如,在优化问题中,若有三个目标函数,分别是f1, f2, f3.则可以通过如下的NSGA-II Matlab代码实现: 首先,需要载入所需的工具箱: clc clear close all % close all the window addpath(genpath('C:\Program Files\MATLAB\R2016a\toolbox')) %the path of tool box addpath(genpath(pwd)); warning off MATLAB:nearlySingularMatrix 在载入工具箱后,接下来需要定义目标函数,并计算目标函数在给定解空间上的取值: k = 3; n = 300; f = @(x) [f1(x), f2(x), f3(x)]; %definition of objective function XL = -100 * ones(1, k); %lower limit of decision variable XU = 100 * ones(1, k); %upper limit of decision variable PopObj = zeros(n, k); %initialize population objective values for i = 1:n PopDec = XL + rand(1, k) .* (XU - XL); %generate a set of decision variables for each individual PopObj(i, :) = f(PopDec); %calculate the objective function value for each individual in the population end 此时,我们已经成功地实现了三个目标函数的计算,并在解空间上计算了300个个体的目标函数值。接下来,需要对这些个体进行排名,并计算每个个体的较优性值: obj_min = min(PopObj); obj_max = max(PopObj); %min and max of objective function %calculate the rank and distance of each solution [n, k] = size(PopObj); PopObj_ = (PopObj-obj_min) ./ (obj_max-obj_min); FrontNo = inf(n, 1); [~,rank] = sortrows(PopObj_); %sort the individuals based on the objective function values [~,~,rank] = unique(PopObj_(:,1)); %sort the individuals into different fronts for i = 1:max(rank) F = find(rank==i); %find the individuals in a certain front FrontNo(F) = i; %assign the front number to each individual [dist,nF] = CrowdingDistance(PopObj(F,:)); %calculate the euclidean distance of each individual Distance(F) = dist; end FitnV = -FrontNo + (max(FrontNo) + 1); %calculate the fitness of each individual FitnV表示个体的较优性值,FrontNo表示每个个体所在的等级。其中,CrowdingDistance函数用于计算个体的拥挤度。最终,我们可以使用FitnV来选择个体进行下一轮进化: %select the parents based on roulette wheel selection [waste, rank] = sort(-FitnV); P = [1.1-cumsum(FitnV(rank))/sum(FitnV(rank)),1]; Nsel = 2*round(N/2); SP = 2*trunc(length(P)/2); %number of parents Mat_Dad = ones(SP, 1) * ((-min(P)*rand(2,SP)) + repmat(P(1:SP)',1,2)); %roulette wheel selection cumulative = cumsum(FitnV); for i = 1:Nsel idx = find(cumulative >= rand()*cumulative(end),1 ); MatingPool(i, :) = PopChrom(idx, :); end 到此,我们已经完成了三个目标函数的计算、排名和个体选择。这个NSGA-II的Matlab代码可以用于解决多目标优化问题,并可根据需要进行修改和扩展。 ### 回答3: NSGA-II算法是优化算法中的一种常用算法,它是基于遗传算法、非支配排序和拥挤度距离的进化算法。该算法可以用于多目标优化问题,而多目标优化问题会涉及到多个目标函数,因此,需要用三目标函数NSGA-II算法Matlab代码进行解决。下面将详细介绍三目标函数NSGA-II算法Matlab代码的编写。 首先,需要在Matlab环境中准备好目标函数的计算代码和Matlab的优化工具箱。然后,对NSGA-II算法进行初始化,包括设置种群数量、遗传操作参数等。接着,在算法迭代的过程中,需要进行以下操作:首先,对当前种群进行非支配排序,并计算每个个体的拥挤度。然后,进行选择操作,选择出优秀的个体进入下一代种群。接下来,进行遗传操作,包括选择、交叉和变异等操作。最后,得到新的种群,并进入下一轮迭代。在算法迭代结束后,输出最优解即可。 对于三目标函数NSGA-II算法Matlab代码,需要注意的是,需要将目标函数的值进行聚合,即将多个目标函数的值转化为一个综合的评价指标。常用的方法是使用加权求和的方式,将不同目标函数的值乘上相应的权重,再将乘积相加作为综合评价指标。 最后,需要进行代码调试和优化,以保证代码能够正确运行并得到较优解。同时,也可以根据具体问题进行算法改进和优化,以提高NSGA-II算法的求解效率和求解质量。

相关推荐

解释以下代码每一句的作用和最终结果% 定义模拟参数 dt = 0.01; % 时间步长 T = 100; % 模拟总时间 N = T/dt; % 时间步数 Vx = zeros(1,N); % 初始化 x 方向速度 Vy = zeros(1,N); % 初始化 y 方向速度 Px = 1; % x 方向阻尼系数 Py = 1; % y 方向阻尼系数 Sx = 0.1; % x 方向随机扰动系数 Sy = 0.1; % y 方向随机扰动系数 W1 = randn(1,N); % 服从正态分布的随机数 W2 = randn(1,N); % 模拟细胞迁移过程 for n = 1:N-1 Vx(n+1) = Vx(n) - dt/Px*Vx(n) + dt*Sx/sqrt(Px)*W1(n); Vy(n+1) = Vy(n) - dt/Py*Vy(n) + dt*Sy/sqrt(Py)*W2(n); end % 绘制细胞运动轨迹 figure; plot(cumsum(Vx)*dt, cumsum(Vy)*dt, 'LineWidth', 2); xlabel('x 方向位移'); ylabel('y 方向位移'); title('细胞迁移轨迹'); % 假设细胞轨迹数据保存在一个数组r中,每行为一个时间点的坐标(x,y,z) % 假设取样时间间隔Delta_t为1,n为时间间隔的倍数,即n * Delta_t为时间间隔 % 计算每个时间步长的位移的平方和 dx = cumsum(Vx*dt + Sx/sqrt(Px)*sqrt(dt)*W1).^2; dy = cumsum(Vy*dt + Sy/sqrt(Py)*sqrt(dt)*W2).^2; % 计算平均的位移平方和 msd_avg = mean(dx + dy); % 计算起始点的坐标的平方 init_pos_sq = Px+Py; % 计算MSD均方位移% msd_percent = msd_avg/init_pos_sq * 100; % 将dx和dy合并成一个矩阵 pos = [dx; dy]; d = pos(:, 2:end) - pos(:, 1:end-1); % 根据位移向量的定义,d(i,j) 表示 j+1 时刻 i 方向上的位移 msd = sum(d.^2, 1); time_interval = 1; % 假设每个时间间隔为1 t = (0:length(msd)-1) * time_interval; msd_avg = zeros(size(msd)); for i = 1:length(msd) msd_avg(i) = mean(msd(i:end)); end % 绘制 MSD 曲线 plot(t, msd_avg); xlabel('Time interval'); ylabel('Mean squared displacement'); % 绘制MSD曲线和拟合直线 t = 1:length(msd_avg); % 时间间隔数组,单位为1 coefficients = polyfit(t, msd_avg, 1); % 对MSD曲线进行线性拟合 slope = coefficients(1); % 提取拟合直线的斜率 plot(t, msd_avg, 'b'); hold on; plot(t, coefficients(1) * t + coefficients(2), 'r'); xlabel('Time interval (\Delta t)'); ylabel('Mean-Square Displacement (MSD)'); legend('MSD', 'Linear fit');

最新推荐

recommend-type

图书馆管理系统数据库设计与功能详解

"图书馆管理系统数据库设计.pdf" 图书馆管理系统数据库设计是一项至关重要的任务,它涉及到图书信息、读者信息、图书流通等多个方面。在这个系统中,数据库的设计需要满足各种功能需求,以确保图书馆的日常运营顺畅。 首先,系统的核心是安全性管理。为了保护数据的安全,系统需要设立权限控制,允许管理员通过用户名和密码登录。管理员具有全面的操作权限,包括添加、删除、查询和修改图书信息、读者信息,处理图书的借出、归还、逾期还书和图书注销等事务。而普通读者则只能进行查询操作,查看个人信息和图书信息,但不能进行修改。 读者信息管理模块是另一个关键部分,它包括读者类型设定和读者档案管理。读者类型设定允许管理员定义不同类型的读者,比如学生、教师,设定他们可借阅的册数和续借次数。读者档案管理则存储读者的基本信息,如编号、姓名、性别、联系方式、注册日期、有效期限、违规次数和当前借阅图书的数量。此外,系统还包括了借书证的挂失与恢复功能,以防止丢失后图书的不当借用。 图书管理模块则涉及图书的整个生命周期,从基本信息设置、档案管理到征订、注销和盘点。图书基本信息设置包括了ISBN、书名、版次、类型、作者、出版社、价格、现存量和库存总量等详细信息。图书档案管理记录图书的入库时间,而图书征订用于订购新的图书,需要输入征订编号、ISBN、订购数量和日期。图书注销功能处理不再流通的图书,这些图书的信息会被更新,不再可供借阅。图书查看功能允许用户快速查找特定图书的状态,而图书盘点则是为了定期核对库存,确保数据准确。 图书流通管理模块是系统中最活跃的部分,它处理图书的借出和归还流程,包括借阅、续借、逾期处理等功能。这个模块确保了图书的流通有序,同时通过记录借阅历史,方便读者查询自己的借阅情况和超期还书警告。 图书馆管理系统数据库设计是一个综合性的项目,涵盖了用户认证、信息管理、图书操作和流通跟踪等多个层面,旨在提供高效、安全的图书服务。设计时需要考虑到系统的扩展性、数据的一致性和安全性,以满足不同图书馆的具体需求。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

表锁问题全解析:深度解读,轻松解决

![表锁问题全解析:深度解读,轻松解决](https://img-blog.csdnimg.cn/8b9f2412257a46adb75e5d43bbcc05bf.png) # 1. 表锁基础** 表锁是一种数据库并发控制机制,用于防止多个事务同时修改同一行或表,从而保证数据的一致性和完整性。表锁的工作原理是通过在表或行上设置锁,当一个事务需要访问被锁定的数据时,它必须等待锁被释放。 表锁分为两种类型:行锁和表锁。行锁只锁定被访问的行,而表锁锁定整个表。行锁的粒度更细,可以提高并发性,但开销也更大。表锁的粒度更粗,开销较小,但并发性较低。 表锁还分为共享锁和排他锁。共享锁允许多个事务同时
recommend-type

麻雀搜索算法SSA优化卷积神经网络CNN

麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种生物启发式的优化算法,它模拟了麻雀觅食的行为,用于解决复杂的优化问题,包括在深度学习中调整神经网络参数以提高性能。在卷积神经网络(Convolutional Neural Networks, CNN)中,SSA作为一种全局优化方法,可以应用于网络架构搜索、超参数调优等领域。 在CNN的优化中,SSA通常会: 1. **构建种群**:初始化一组随机的CNN结构或参数作为“麻雀”个体。 2. **评估适应度**:根据每个网络在特定数据集上的性能(如验证集上的精度或损失)来评估其适应度。 3. **觅食行为**:模仿
recommend-type

***物流有限公司仓储配送业务SOP详解

"该文档是***物流有限公司的仓储配送业务SOP管理程序,包含了工作职责、操作流程、各个流程的详细步骤,旨在规范公司的仓储配送管理工作,提高效率和准确性。" 在物流行业中,标准操作程序(SOP)是确保业务流程高效、一致和合规的关键。以下是对文件中涉及的主要知识点的详细解释: 1. **工作职责**:明确各岗位人员的工作职责和责任范围,是确保业务流程顺畅的基础。例如,配送中心主管负责日常业务管理、费用控制、流程监督和改进;发运管理员处理运输调配、计划制定、5S管理;仓管员负责货物的收发存管理、质量控制和5S执行;客户服务员则处理客户指令、运营单据和物流数据管理。 2. **操作流程**:文件详细列出了各项操作流程,包括**入库及出库配送流程**,强调了从接收到发货的完整过程,包括验收、登记、存储、拣选、包装、出库等环节,确保货物的安全和准确性。 3. **仓库装卸作业流程**:详细规定了货物装卸的操作步骤,包括使用设备、安全措施、作业标准,以防止货物损坏并提高作业效率。 4. **货物在途跟踪及异常情况处理流程**:描述了如何监控货物在运输途中的状态,以及遇到异常如延误、丢失或损坏时的应对措施,确保货物安全并及时处理问题。 5. **单据流转及保管流程**:规定了从订单创建到完成的单据处理流程,包括记录、审核、传递和存档,以保持信息的准确性和可追溯性。 6. **存货管理**:涵盖了库存控制策略,如先进先出(FIFO)、定期盘点、库存水平的优化,以避免过度库存或缺货。 7. **仓库标志流程**:明确了仓库内的标识系统,帮助员工快速定位货物,提高作业效率。 8. **仓库5S管理及巡检流程**:5S(整理、整顿、清扫、清洁、素养)是提高仓库环境和工作效率的重要工具,巡检流程则确保了5S的持续实施。 9. **仓库建筑设备设施的维护流程**:强调了设备设施的定期检查、保养和维修,以保证其正常运行,避免因设备故障导致的运营中断。 10. **附件清单**:列出所有相关的附件和表格,便于员工参考和执行。 通过这些详尽的SOP,***物流有限公司能够系统化地管理仓储配送业务,确保服务质量,减少错误,提升客户满意度,并为公司的持续改进提供基础。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

MySQL索引失效大揭秘:案例分析与解决方案

![MySQL索引失效大揭秘:案例分析与解决方案](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/0537141761/p536336.png) # 1. MySQL索引基础** MySQL索引是一种数据结构,它可以加快对数据库表的查询速度。索引通过在表中创建指向特定列或列组合的指针来实现这一目的。当执行查询时,MySQL可以利用索引快速找到所需的数据,而无需扫描整个表。 索引的类型有很多,包括B树索引、哈希索引和全文索引。每种索引类型都有自己的优缺点,在创建索引时需要根据查询需求进行选择。 索引可以显著提高查询
recommend-type

AttributeError: 'bpy_prop collection' object has no attribute 'bezier points'

The error message "AttributeError: 'bpy_prop_collection' object has no attribute 'bezier_points'" in the Blender context typically occurs when you're trying to access an attribute or method that doesn't exist in the object you're working with. In this case, it seems you are referring to a `bpy_prop_
recommend-type

机械专业实习经验与学习收获

"这篇文档是关于机械专业实习的总结,主要涵盖了实习的目的、内容和具体的学习目标。实习的目的是为了将理论知识与实践相结合,理解机械制造的过程,熟悉各种机械零件的加工工艺,并掌握机床、工具的使用。实习内容包括了解生产过程、典型零件的加工工艺、拆卸工艺,以及公差测量技术和新工艺新技术的应用。此外,实习还锻炼了学生的业务能力、吃苦耐劳的精神,并提供了对企业管理的初步认识。" 实习对于机械专业学生来说至关重要,因为它不仅提供了一个将课堂所学知识应用于实际生产环境的机会,还帮助学生建立起对机械设备、工艺流程的直观理解。在实习过程中,学生能够了解一个产品从原材料到成品的完整生产过程,这通常涉及到机械加工过程卡片和机械加工工序卡片等工艺文件的运用。 在实习中,学生会接触到各种典型零件,如机床箱体、传动轴、主轴、柴油机机座等,通过观察和分析它们的加工工艺过程,可以学习到如何制定和分析机械加工工艺,以及如何使用不同加工手段和设备。同时,实习还会涉及机床零部件的拆卸工艺,让学生掌握拆卸后的安全性检查和简单修复技巧。 了解和操作一般刀、夹、量具是实习的重要环节,这要求学生熟练掌握这些工具的结构和使用方法,以便在实际工作中准确测量和调整。此外,参观工厂的计量室和车间检验室,学生能学习到公差测量技术在生产中的实际应用,这对于保证产品质量和精度至关重要。 现代制造业中,新技术和新工艺不断涌现,实习期间,学生还有机会接触到工厂的先进设备,如特种加工设备,从而拓宽专业知识面,了解并适应技术发展的趋势。 实习同时也是一次对企业管理和工作环境的体验,学生可以学习到如何在团队中协作,如何按照企业规定和流程进行工作,培养了初步的技术工作能力和企业管理技能,这对他们未来的职业生涯发展有着深远的影响。 这份机械专业实习总结强调了实习在理论与实践结合、技能提升、职业素养培养方面的重要性,充分展示了实习作为高等教育不可或缺的一部分,对学生全面成长的意义。通过这样的实习经历,学生不仅能巩固理论知识,还能提升实践操作能力,更好地为未来的专业工作做好准备。
recommend-type

关系数据表示学习

关系数据卢多维奇·多斯桑托斯引用此版本:卢多维奇·多斯桑托斯。关系数据的表示学习机器学习[cs.LG]。皮埃尔和玛丽·居里大学-巴黎第六大学,2017年。英语。NNT:2017PA066480。电话:01803188HAL ID:电话:01803188https://theses.hal.science/tel-01803188提交日期:2018年HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaireUNIVERSITY PIERRE和 MARIE CURIE计算机科学、电信和电子学博士学院(巴黎)巴黎6号计算机科学实验室D八角形T HESIS关系数据表示学习作者:Ludovic DOS SAntos主管:Patrick GALLINARI联合主管:本杰明·P·伊沃瓦斯基为满足计算机科学博士学位的要求而提交的论文评审团成员:先生蒂埃里·A·退休记者先生尤尼斯·B·恩