基于GML的几何数据模型

本文介绍了GML 3.1.0版本的几何模型,包括基本几何、聚合几何和复杂几何的层次结构。以Polygon为例,详细阐述了如何在GML中表示二维图元,讲解了exterior和interior元素在描述多边形边界中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目前GML 3.1.0版本中所使用的几何模型的XML模式文档包括: geometryBasic0d1d.xsdgeometryBasic2d.xsdgeometryPrimitives.xsdgeometryAggregates.xsdgeometryComplexes.xsd。其中,geometryBasic0d1d.xsd 的部分类型和元素是为了兼容以前的GML2版本(GML2中只有一个模式geometry.xsd),其它的几个模式文档则完全是由新的类型和元素组成的。下图是GML中几何模型的类型层次。

 

其中,_Geometry元素是所有GML3几何元素的置换组的抽象头(h

### 使用Matlab实现SBM-GML模型 #### SBM-GML模型简介 SBM (Slack-Based Measure) 模型是一种基于数据包络分析(DEA)的方法,能够处理多输入多输出的情况并考虑松弛变量的影响。GML (Geometric Mean Luenberger) 指数则用于衡量全要素生产率的变化情况。结合这两种方法可以在更广泛的背景下评估技术进步和效率变化。 #### 实现步骤概述 为了在Matlab中实现SBM-GML模型,通常需要准备如下几个部分: - 输入与输出的数据集定义; - 定义目标函数来求解每个决策单元(DMU)下的最优权重向量; - 计算各期的技术效率得分; - 利用这些分数构建时间序列上的GML指数。 以下是具体的代码示例[^3]: ```matlab % 加载必要的库 addpath('lib'); % 假设有一个名为 'lib' 的目录包含了辅助函数 % 导入数据 data = readtable('example_data.csv'); inputs = data{:, {'input1', 'input2'}}; % 设置输入列名 outputs = data{:, {'output1', 'undesirable_output'}}; % 输出包括期望和非期望产出 % 初始化参数 nDMUs = size(inputs, 1); % DMU数量 T = max(data.Year); % 时间跨度的最大年份 t_start = min(data.Year); % 开始年份 years = t_start:T; % 创建存储结构体保存每一年的结果 results = struct(); for year = years' results.(num2str(year)) = []; end % 对于每一个时间段内的所有DMU执行SBM分析 for t = t_start:(T-1) current_year = num2cell(repmat(t, nDMUs, 1)); % 构建线性规划问题LP LP = linprog(@sbm_objective_function,... [],... % Aineq为空表示无不等式约束条件 [],... % bineq同上 [-ones(1,nDMUs), ones(1,nDMUs)],... zeros(nDMUs*2,1), ... % 等式约束矩阵Aeq及其右侧beq lb,... % 下界lb设置为零向量 ub,... % 上界ub同样为正无穷大 initial_guess,... % 初始猜测值initial_guess options); % 将结果存入对应年度的字段里 results.(num2str(t)).efficiency_scores = -LP.x; end % 计算相邻两年间的几何平均增长率作为GML指数 gml_indices = cell(T-t_start, 1); for i = 1:length(gml_indices)-1 prev_efficiencies = results.(num2str(i+t_start-1)).efficiency_scores'; curr_efficiencies = results.(num2str(i+t_start)).efficiency_scores'; gml_index_i = prod(curr_efficiencies ./ prev_efficiencies).^(1/(length(prev_efficiencies))); gml_indices{i} = gml_index_i; end disp('The calculated GML indices are:'); celldisp(gml_indices); function fval = sbm_objective_function(x) global inputs outputs s_plus = x(1:end/2)'; lambda = x(end/2+1:end)'; numerator = sum(s_plus .* inputs') + eps; denominator = sum(lambda .* outputs') + eps; fval = log(numerator / denominator); end ``` 这段脚本展示了如何通过循环遍历不同年份来进行SBM分析,并最终计算出各个时期的GML指数。注意这里的`@sbm_objective_function`是一个自定义的目标函数,它接受一个包含松弛变量`s_plus`和权重向量`lambda`的一维数组作为输入,并返回相应的负对数值形式的目标函数值以便优化器最小化之。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值