MATLAB模型预测控制工具箱函数

合集下载

使用MATLAB进行数据预测和预测

使用MATLAB进行数据预测和预测

使用MATLAB进行数据预测和预测引言:数据预测和预测在许多领域中都具有重要的应用价值。

它们可以帮助我们预测未来的发展趋势,做出合理的决策,并在经营和决策中提供有力的支持。

在这一过程中,MATLAB作为一种功能强大的编程语言和数据分析工具,为我们提供了一个强大的工具箱,可以进行数据预测和预测。

数据预处理:在开始数据预测和预测之前,我们首先需要对数据进行预处理。

预处理包括数据清洗、数据归一化、特征选择等步骤。

通过这些步骤,我们可以提高数据的质量,减少噪声的影响,并使数据更适合于预测模型的建立。

数据清洗是指删除或修复数据中的错误值、缺失值和异常值。

在MATLAB中,我们可以使用一些函数和工具箱来处理这些问题。

例如,我们可以使用`isnan`函数来检测缺失值,并使用`fillmissing`函数来填充缺失值。

对于异常值,我们可以使用一些统计方法,如3σ原则或箱线图来识别和处理。

数据归一化是将不同尺度的数据映射到统一的尺度上。

这是因为不同尺度的数据可能对预测模型的训练和预测产生不利影响。

在MATLAB中,有许多方法可以实现数据归一化,如MinMax归一化、Z-score归一化等。

我们可以使用`mapminmax`函数来实现MinMax归一化,并使用`zscore`函数来实现Z-score归一化。

特征选择是从原始数据中选择最相关的特征,以降低数据维度并提高预测模型的准确性。

在MATLAB中,我们可以使用一些算法和函数来实现特征选择。

例如,我们可以使用`fsrnca`函数(基于相关系数的特征选择)或`sequentialfs`函数(基于逐步搜索的特征选择)来选择最佳特征子集。

在完成数据预处理后,我们可以使用各种算法和方法进行数据预测。

在MATLAB中,有许多经典的预测算法和函数可供选择。

以下是几个常用的预测方法。

1. 线性回归:线性回归是一种基本的预测方法,它使用线性模型来建立输入变量和输出变量之间的关系。

模型预测控制matlab工具箱实例

模型预测控制matlab工具箱实例

模型预测控制matlab工具箱实例模型预测控制(MPC)是一种广泛应用于工业过程控制的高级控制策略。

Matlab提供了用于设计和实施MPC的工具箱。

本实例演示了如何使用Matlab MPC工具箱执行MPC控制。

1. 创建一个MPC对象首先,我们需要创建一个MPC对象。

使用mpc对象构造函数可以创建MPC对象。

例如:```mpcobj = mpc(object func, sample time, prediction horizon, control horizon);```其中,object func是被控制系统的离散时间状态空间模型的函数句柄;sample time是采样时间,prediction horizon是预测时域长度,control horizon是控制时域长度。

2. 配置MPC对象接下来,我们需要配置MPC对象。

可以使用MPC对象的属性来进行配置。

例如:```mpcobj.Model.Plant = ss(A,B,C,D);mpcobj.Model.Noise = 'Custom';mpcobj.Model.Disturbance = 'Custom';mpcobj.PredictionHorizon = 10;mpcobj.ControlHorizon = 2;mpcobj.Weights.OV = 1;mpcobj.Weights.MV = 0.1;mpcobj.Weights.ECR = [0.1 0.2];mpcobj.MV = struct('Min',-10,'Max',10);```上述代码中,我们设置了被控制系统的动态模型,噪声模型和干扰模型的类型。

我们还设置了预测时域长度,控制时域长度和权重。

3. 模拟仿真现在,我们可以使用MPC对象进行控制。

首先,我们需要对系统进行模拟仿真以生成实验数据。

可以使用sim函数进行仿真。

MATLAB的常用函数和工具介绍

MATLAB的常用函数和工具介绍

MATLAB的常用函数和工具介绍MATLAB是一款被广泛应用于科学计算和工程设计的软件,它提供了丰富的函数库和工具箱,能够帮助用户进行数据分析、模拟仿真、图像处理、信号处理等多种任务。

本文将介绍一些MATLAB常用的函数和工具,帮助读者更好地利用MATLAB进行编程和数据处理。

一、MATLAB函数介绍1. plot函数:该函数用于绘制二维图形,如折线图、曲线图等。

通过输入数据点的坐标,plot函数可以帮助用户快速可视化数据分布,同时支持自定义线型、颜色和标注等功能。

2. imread函数:该函数用于读取图像文件,支持常见的图像格式,如JPEG、PNG等。

通过imread函数,用户可以方便地加载图像数据进行后续的处理和分析。

3. fft函数:该函数用于进行快速傅里叶变换,可以将时域信号转换为频域信号。

傅里叶变换在信号处理中广泛应用,通过fft函数,用户可以快速计算信号的频谱信息。

4. solve函数:该函数用于求解方程组,支持线性方程和非线性方程的求解。

用户只需输入方程组的表达式,solve函数会自动求解变量的值,帮助用户解决复杂的数学问题。

5. mean函数:该函数用于计算数据的平均值。

mean函数支持数组、矩阵和向量等多种数据类型,可以方便地对数据进行统计分析。

6. importdata函数:该函数用于导入外部数据文件,如文本文件、CSV文件等。

通过importdata函数,用户可以将外部数据加载到MATLAB中,进行后续的数据处理和分析。

二、MATLAB工具介绍1. MATLAB Editor:这是MATLAB自带的编辑器,可以用于编写和调试MATLAB代码。

它提供了代码高亮、自动缩进和代码片段等功能,能够提高编程效率和代码可读性。

2. Simulink:这是MATLAB的一个强大的仿真工具,用于建立动态系统的模型并进行仿真。

Simulink支持直观的图形化建模界面,用户可以通过拖拽元件和线条来搭建系统模型,进而进行仿真和系统分析。

预测控制matlab工具箱

预测控制matlab工具箱

matlab预测控制工具箱一、设计示例注:示例均为matlab自带1、伺服系统控制器的设计图4-1 位置伺服系统原理图(1)伺服系统数学模型位置伺服系统由直流电机、变速箱、弹性轴、负载等组成(见图4-1)。

可用如下微分方程来描述:上式中的变量定义及取值见表4-1。

将上述微分方程写成状态方程形式,有其中,。

(2)控制目标及约束控制目标:在电压V的控制下,使过载角位置跟踪指定值。

输出量仅有可观测。

弹性轴承受的强度有一定的限制,因此对输出力矩T的赋值作一定约束:对输入电压的约束:该系统有一个输入V,两个输出:(可测量)和T(不可测量)。

(3)在matlab中定义该系统的状态空间模型首先需要在matlab中对系统的数学模型进行定义。

可以直接在命令行输入mpcmotormodel(建议做法),也可以在命令行中输入下列命令:% DC-motor with elastic shaft%%Parameters (MKS)%-----------------------------------------------------------Lshaft=1.0; %Shaft lengthdshaft=0.02; %Shaft diametershaftrho=7850; %Shaft specific weight (Carbon steel)G=81500*1e6; %Modulus of rigiditytauam=50*1e6; %Shear strengthMmotor=100; %Rotor massRmotor=.1; %Rotor radiusJmotor=.5*Mmotor*Rmotor^2; %Rotor axial moment of inertia Bmotor=0.1; %Rotor viscous friction coefficient (A CASO)R=20; %Resistance of armatureKt=10; %Motor constantgear=20; %Gear ratioJload=50*Jmotor; %Load inertiaBload=25; %Load viscous friction coefficientIp=pi/32*dshaft^4; %Polar momentum of shaft(circular) sectionKth=G*Ip/Lshaft; %Torsional rigidity(Torque/angle)Vshaft=pi*(dshaft^2)/4*Lshaft; %Shaft volumeMshaft=shaftrho*Vshaft; %Shaft massJshaft=Mshaft*.5*(dshaft^2/4); %Shaft moment of inertiaJM=Jmotor;JL=Jload+Jshaft;Vmax=tauam*pi*dshaft^3/16; %Maximum admissible torqueVmin=-Vmax;%Input/State/Output continuous time form%----------------------------------------------------------AA=[0 1 0 0;-Kth/JL -Bload/JL Kth/(gear*JL) 0;0 0 0 1;Kth/(JM*gear) 0 -Kth/(JM*gear^2)-(Bmotor+Kt^2/R)/JM];BB=[0;0;0;Kt/(R*JM)];Hyd=[1 0 0 0];Hvd=[Kth 0 -Kth/gear 0];Dyd=0;Dvd=0;% Define the LTI state-space modelsys=ss(AA,BB,[Hyd;Hvd],[Dyd;Dvd]);(4)利用MPCTOOL界面设计控制器第一步:导入模型在命令行窗口中输入mpctool,工具箱界面出来后点击Imort Plant…,此时界面如4-2所示。

MATLAB常用工具箱与函数库介绍

MATLAB常用工具箱与函数库介绍

MATLAB常用工具箱与函数库介绍1. 统计与机器学习工具箱(Statistics and Machine Learning Toolbox):该工具箱提供了各种统计分析和机器学习算法的函数,包括描述统计、概率分布、假设检验、回归分析、分类与聚类等。

可以用于进行数据探索和建模分析。

2. 信号处理工具箱(Signal Processing Toolbox):该工具箱提供了一系列信号处理的函数和算法,包括滤波、谱分析、信号生成与重构、时频分析等。

可以用于音频处理、图像处理、通信系统设计等领域。

3. 控制系统工具箱(Control System Toolbox):该工具箱提供了控制系统设计与分析的函数和算法,包括系统建模、根轨迹设计、频域分析、状态空间分析等。

可以用于控制系统的设计和仿真。

4. 优化工具箱(Optimization Toolbox):该工具箱提供了各种数学优化算法,包括线性规划、非线性规划、整数规划、最优化等。

可以用于寻找最优解或最优化问题。

5. 图像处理工具箱(Image Processing Toolbox):该工具箱提供了图像处理和分析的函数和算法,包括图像滤波、边缘检测、图像分割、图像拼接等。

可以用于计算机视觉、医学影像处理等领域。

6. 神经网络工具箱(Neural Network Toolbox):该工具箱提供了神经网络的建模和训练工具,包括感知机、多层前馈神经网络、循环神经网络等。

可以用于模式识别、数据挖掘等领域。

7. 控制系统设计工具箱(Robust Control Toolbox):该工具箱提供了鲁棒控制系统设计与分析的函数和算法,可以处理不确定性和干扰的控制系统设计问题。

8. 信号系统工具箱(Signal Systems Toolbox):该工具箱提供了分析、设计和模拟线性时不变系统的函数和算法。

可以用于信号处理、通信系统设计等领域。

9. 符号计算工具箱(Symbolic Math Toolbox):该工具箱提供了符号计算的功能,可以进行符号表达式的运算、求解方程、求解微分方程等。

matlab的mpc函数

matlab的mpc函数

在MATLAB中,MPC(模型预测控制)函数可用于实现模型预测控制(MPC)算法。

MPC是一种先进的控制策略,用于处理具有预测模型的连续或离散时间线性系统。

它通过优化性能指标并限制未来的行为,实现对系统的控制。

要使用MATLAB的MPC函数,您需要遵循以下步骤:
1. 定义模型:首先,您需要定义系统的模型。

这可以是一个线性时不变(LTI)系统,也可以是一个非线性系统。

您可以使用MATLAB 的控制系统工具箱中的函数(如`tf`,`ss`等)来定义模型。

2. 定义优化问题:接下来,您需要定义优化问题。

优化问题应包括预测模型、性能指标和约束条件。

在MPC中,预测模型通常是一个预测矩阵,用于预测未来的系统状态。

性能指标可以是控制变量的权重或状态变量的权重。

约束条件可以是控制变量的限制或状态变量的限制。

3. 调用MPC函数:一旦您定义了模型和优化问题,您可以使用MATLAB的MPC函数来求解优化问题并生成控制序列。

常用的MPC函数包括`mpcmin`和`mpcmove`。

4. 应用控制序列:最后,您需要将生成的control sequence应用于系统。

这可以通过使用一个数字或模拟控制器来实现。

这些步骤是使用MATLAB的MPC函数进行模型预测控制的一般流程。

但是,请注意,具体的实现方法可能会因应用而异。

建议查阅MATLAB的官方文档以获取更详细的信息和使用示例。

MATLAB中的模型预测控制算法实现方法

MATLAB中的模型预测控制算法实现方法

MATLAB中的模型预测控制算法实现方法1. 引言模型预测控制(Model Predictive Control,MPC)是一种广泛应用于工业过程控制的先进控制策略。

它基于数学模型对系统未来行为进行预测,并通过优化算法计算出最优控制输入,以实现对系统的稳定控制和性能优化。

在MATLAB中,实现MPC算法可以借助一些工具箱和函数,本文将介绍其中一种典型方法。

2. MPC算法的基本原理MPC算法通过建立系统的数学模型,预测系统未来的行为。

在每个控制时刻,MPC算法根据已知的系统状态和控制目标,计算出最优的控制输入,并将其应用于系统中。

这个优化问题可以通过求解一个多目标优化问题来完成。

3. MATLAB中的MPC工具箱MATLAB的Control System Toolbox提供了一个用于设计和实现MPC控制器的工具箱。

首先,我们需要使用命令"mpc"创建一个空白的MPC对象。

然后,我们可以通过指定MPC对象的属性来定义系统模型、控制目标、约束条件等。

4. 构建系统模型在MPC算法中,必须先构建系统的数学模型。

在MATLAB中,可以使用State Space工具箱中的ss或tf函数构建系统模型。

我们可以根据实际系统的特点选择不同的模型结构。

例如,对于连续时间系统,可以使用连续时间状态空间模型或传递函数模型;对于离散时间系统,可以使用离散时间状态空间模型或传递函数模型。

5. 设置MPC对象属性创建MPC对象后,我们需要设置一些重要的属性。

其中,PredictionHorizon属性定义了预测时间窗口的长度,即MPC算法根据模型预测未来的时长;ControlHorizon属性定义了控制时间窗口的长度,即MPC算法计算最优控制输入的时间长度。

一般来说,预测时间窗口应大于控制时间窗口。

6. 设定控制目标与约束条件MPC算法的目标是使系统的输出尽可能地接近控制目标,并同时满足一定的约束条件。

MATLAB环境下的模型预测控制理论的应用

MATLAB环境下的模型预测控制理论的应用

MATLAB环境下的模型预测控制理论的应用丛爽邓娟(中国科学技术大学自动化系,合肥230027)E-mail:scong@ustc.edu.cn摘要从模型预测控制的原理出发。

介绍利用MA7ⅡAB模型预测控制工具箱进行模型预测控制器设计的全过程。

就被控对象的不同模型。

以及备类模型形式之间的转换做了具体的系统的阐述。

在控刺器的设计过程中,给出不同情况下的控制器的设计方法,并且对控制器设计申的参数选择对系统控制性能的影响进行了分析与总结。

最后通过数值实例说明了如何进行了模型预测控制器的设计。

关键词模型预测控制模型辨识阶跃响应模型系统仿真文章编号l002—8331一(2005)16-0196—03文献标识码A中圈分类号TPl3ModelPredictiveControlTheoryandApplicationunderMATLABEnvironment(Dept.ofAutomation,UniversityofScience&TechnologyofChina,Hefei230027)Abstract:Basedtheprincipleofmodelpredictivecontrol,thepaperintroducesthewholeprocessofmodelpredic—fivecontrollerdesignwithmodelpredictivecontroltoolboxinMATLAB.Systematicallyrepresentthedifferentmodelsofcontrolledplant,aswellastheconversionsofthosemodels.Intheprocedureofthecontrollerdesign,differentcontrollerdesignmethodsintroduced.Atthe8alTletime,theanalysesandconclusionofeffectstosystemcontrolperformanceintheaspectofparametersselection啪done.Atlast.annumericalexampleofthemodelpredictivecontrollerdesignisgiven.Keywords:modelpredictivecontrol,modelidentification,stepresponsemodel,systemsimulation1引言以状态空间法为基础的现代控制理论从20世纪60年代提出到70年代在理论上日趋完善,并且在许多方面得到了成功的运用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

M A T L A B模型预测控制
工具箱函数
TTA standardization office【TTA 5AB- TTAK 08- TTA 2C】
M A T L A B模型预测控制工具箱函数
系统模型建立与转换函数
前面读者论坛了利用系统输入/输出数据进行系统模型辨识的有关函数及使用方法,为时行模型预测控制器的设计,需要对系统模型进行进一步的处理和转换。

MATLAB的模型预测控制工具箱中提供了一系列函数完成多种模型转换和复杂系统模型的建立功能。

在模型预测控制工具箱中使用了两种专用的系统模型格式,即MPC状态空间模型和MPC传递函数模型。

这两种模型格式分别是状态空间模型和传递函数模型在模型预测控制工具箱中的特殊表达形式。

这种模型格式化可以同时支持连续和离散系统模型的表达,在MPC传递函数模型中还增加了对纯时延的支持。

表8-2列出了模型预测控制工具箱的模型建立与转换函数。

表8-2 模型建立与转换函数
模型转换
在MATLAB模型预测工具箱中支持多种系统模型格式。

这些模型格式包括:
①通用状态空间模型;
②通用传递函数模型;
③MPC阶跃响应模型;
④MPC状态空间模型;
⑤MPC传递函数模型。

在上述5种模型格式中,前两种模型格式是MATLAB通用的模型格式,在其他控制类工具箱中,如控制系统工具箱、鲁棒控制工具等都予以支持;而后三种模型格式化则是模型预测控制工具箱特有的。

其中,MPC状态空间模型和MPC传递函数模型是通用的状态空间模型和传递函数模型在模型预测控制工具箱中采用的增广格式。

模型预测控制工具箱提供了若干函数,用于完成上述模型格式间的转换功能。

下面对这些函数的用法加以介绍。

1.通用状态空间模型与MPC状态空间模型之间的转换
MPC状态空间模型在通用状态空间模型的基础上增加了对系统输入/输出扰动和采样周期的描述信息,函数ss2mod()和mod2ss()用于实现这两种模型格式之间的转换。

1)通用状态空间模型转换为MPC状态空间模型函数ss2mod()
该函数的调用格式为
pmod= ss2mod(A,B,C,D)
pmod= ss2mod(A,B,C,D,minfo)
pmod= ss2mod(A,B,C,D,minfo,x0,u0,y0,f0)
式中,A, B, C, D为通用状态空间矩阵;
minfo为构成MPC状态空间模型的其他描述信息,为7个元素的向量,各元素分别定义为:
◆minfo(1)=dt,系统采样周期,默认值为1;
◆minfo(2)=n,系统阶次,默认值为系统矩阵A的阶次;
◆minfo(3)=nu,受控输入的个数,默认值为系统输入的维数;
◆minfo(4)=nd,测量扰的数目,默认值为0;
◆minfo(5)=nw,未测量扰动的数目,默认值为0;
◆minfo(6)=nym,测量输出的数目,默认值系统输出的维数;
◆minfo(7)=nyu,未测量输出的数目,默认值为0;
注:如果在输入参数中没有指定m i n f o,则取默认值。

x0, u0, y0, f0为线性化条件,默认值均为0;
pmod为系统的MPC状态空间模型格式。

例8-5将如下以传递函数表示的系统模型转换为MPC状态空间模型。

解:MATLAB命令如下:
2)MPC状态空间模型转换为通用状态空间模型函数mod2ss()
该函数的调用格式为
[A, B, C, D]= mod2ss(pmod)
[A, B, C, D, minfo]= mod2ss(pmod)
[A,B,C,D,minfo,x0,u0,y0,f0]= mod2ss(pmod)
式中,pmod为系统的MPC状态空间模型格式;A,B,C,D为通用状态空间矩阵;minfo 为构成MPC状态空间模型的其他描述信息,其说明参见函数ss2mod()。

2.通用传递函数模型转换为MPC传递函数模型
通用传递函数模型与MPC传递函数模型的转换函数poly2tfd()的调用格式为
g=poly2tfd(num,den,delt,delay)
式中,num为通用传递函数模型的分子多项式系数向量;
den为通用传递函数模型的分母多项式系数向量;
delt为采样周期,对连续系统,该参数为0;
delay为系统纯时延,对于离散系统,纯时延为采样时间周期的整数倍;
g为被控对象的MPC传递函数模型。

例8-6考虑如下的纯时延二阶对象,并将其转换为MPC传递函数模型。

解:MATLAB命令如下:
>> num=[1 1];den=[1 4 4];
>> g=poly2tfd(num,den,0,
结果显示:
g =
0 0
3.MPC传递函数模型转换为MPC状态空间模型函数tfd2mod()
该函数的调用格式为
pmod=tfd2mod(delt,ny,g1,g2,……,g25)
式中,delt为采样时间;
ny为输出个数;
g1,g2,……为SISO传递函数,对应多变量系统传递函数矩阵的各个元素按行向量顺序排序构成的向量,其最大个数限制为25;
pmod为系统的MPC状态空间模型。

4.MPC阶跃响应模型与其他模型格式之间的转换
函数mod2step()、tfd2step()和ss2step()分别用于将MPC状态空间模型、MPC传递函数模型和通用状态空间模型转换为MPC阶跃响应模型。

下面对这个三函数的用法进行说明。

1)MPC状态空间模型转换为MPC阶跃响应模型函数mod2step()
plant=mod2step(pmod,tfinal)
[plant, dplant]=mod2step(pmod,tfinal,delt,nout)
式中,pmod为系统的MPC状态空间模型;
tfinal为阶跃响应模型的截断时间;
delt为采样周期,默认值由MPC状态空间模型的参数minfo(1)决定;
nout为输出稳定性向量,用于指定输出的稳定性。

对于稳定的系统,nout等于输出的个数;对于具有一个或多个积怨分输出的系统,nout为一个长度等于输出个数的向量,该向量对应积分输出的分量为0,其余分量为1;
plant为对象在受控变量作用下的阶跃响应系数矩阵;
dplant为对象在扰动作用下阶跃响应矩阵。

2)MPC传递函数模型转换为MPC阶跃响应模型函数tfd2step()
该函数的调用格式为
plant=tfd2step(tfinal,delt,nout,g1)
plant=tfd2step(tfinal,delt,nout,g1,……,g25)
式中,tfinal为阶跃响应的截断时间;
delt为采样周期;
nout为输出稳定性向量,参见函数mod2step()的有关说明;
g1,……,g25为SISO传递函数,对应多变量系统传递函数矩阵的各个元素按行向量顺序排列构成的向量,其最大个数限制为25;
plant为对象的阶跃响应系统矩阵。

例8-8设系统传递函数为
将其转换为阶跃响应模型。

解:MATLAB命令如下:
>> num=[1 2];den=[1 3 1];
>> tf1=poly2tfd(num,den,0,0);
>> plant=tfd2step(5,,1,tf1);
>> plotstep(plant)
由阶跃响应模型绘制的系统阶跃响应曲线如图8-5所示。

图8-5 系统阶跃响应曲线
基于阶跃响应模型的控制器设计与仿真函数
基于系统的阶跃响应模型进行模型预测控制器设计的方法称为动态矩阵控制方法。

该方法是采用工程上易于获取的对象阶跃响应模型,算法较为简单,计算量较少,鲁棒性较强,适用于纯时迟、开环渐近稳定的非最小相位系统,在工业过程控制中得到成功应用。

MATLAB的模型预测控制工具箱提供了对动态矩阵控制方法的支持,有关的函数能够基于阶跃响应模型的模型预测控制器设计与仿真,见表8-3。

表8-3 动态矩阵控制设计与仿真函数
例8-12考虑如下的双输入输出纯时延对象,其传递函数矩阵为
解:MATLAB程序如下:
ywt为二次型性能指标的输出误差加权矩阵;
uwt为二次型性能指标的控制量加权矩阵;
M为控制时域长度;
P为预测时域长度;
tend为仿真的结束时间;
r为输入设定值或参考轨迹;
ulim=[ulow uhigh delu],式中,ulow为控制变量的下界,uhigh为控制变量的上界,delu为控制变量的变化率约束;
ylim=[ylow yhigh],式中,ylow为输出的下界,yhigh为输出的上界;
kest为估计器的增益矩阵;
z为测量噪声;v为测量扰动;w为输出未测量扰动;wu为施加到控制输入的未测量扰动;
y为系统响应;u为控制变量;ym为模型预测输出。

例8-15考虑如下的双输入输出纯时延对象,其传递函数矩阵为解:MATLAB程序如下:。

相关文档
最新文档