MATLAB运算基础(第2章)答案

合集下载

第二章 MATLAB基础

第二章 MATLAB基础
27
3 )向量是一个数学量,一般高级语言中也未引入, 它可视为矩阵的特例。从MATLAB的工作区可以查 看到:一个 n 维的行向量是一个 1 × n 阶的矩阵,而 一个n维的列向量则当成n×1阶的矩阵。 如A=[1 2 3 4]就是一个4维的行向量。也可看成是 一个一维数组,还要看成是一个1×4阶的矩阵。
3
数据类型转换函 数 uint8 uint16 uint32 uint64 int8 int16 int32 int64
说 明 无符号8位整数 无符号16位整数 无符号32位整数 无符号64位整数 有符号8位整数 有符号16位整数 有符号32位整数 有符号64位整数
字节数 1 2 4 8 1 2 4 8
22
【例 2.8】变量赋值 >> a=3.14 a= 3.1400 >> class(a) %函数class用来是判断变量数据类 型的 ans = double %变量a是双精度的浮点型数据
23
>> a='hello!' hello! >> class(a) ans = char
%变量a重新赋值
13
>> whos Name Size a 1x1 x 1x1 y 1x1 z 1x1
Bytes Class Attributes 16 double complex 4 int32 4 int32 8 int32 complex
14
2.2MATLAB的常量及变量
2.2.1常量 常量是程序语句中取不变值的那些量。如表达式 y=0.314*x,其中就包含一个0.314这样的数值常数,它 便是一个数值常量。而在另一表达式s='Hello'中,单引 号内的英文字符串“Hello”则是一个字符串常量。

matlab第2章

matlab第2章
21
2. MATLAB变量的显示
任何MATLAB语句的执行结果都可以在屏幕上显示,同时赋值
给指定的变量。没有指定变量பைடு நூலகம்,赋值给默认变量名ans,数据
的显示格式由format命令控制。
Format只影响结果的显示,不影响计算与存储。
MATLAB以双字长浮点数(双精度)执行所有的运算。
22
2.4.1.2 字符串
a在前面未赋值时,非法命令。
19
1. 变量命名规则 (1)变量名区分字母的大小写,A与a表示不同的变量。 (2)变量名必须以英文字母开头,之后可以使用字母、数字、下画线, 但不能使用空格和标点符号。 (3)变量名长度不能超过31个字符,超过部分将被忽略
(4)某些常量也可以作为变量使用。
如 i 在MATLAB中表示虚数单位,但也可以作为变量使用。
5
3.Debug主菜单项 (1)Open M-Files when Debugging:调试时打开M文件 (2)Step:单步调试程序
(3)Step In:单步调试进入子程序
(4)Step Out:单步调试从子程序跳出 (5)Continue:程序执行到下一断点 (6)Clear Breakpoints in All Files:清除所有打开文件中的断点 (7)Stop if Errors/Warnings:在程序出错或报警处停止往下执行
8
5.Window主菜单项 (1)Close All documents:关闭所有文档 (2)0 Command Window:选定命令窗口为当前活动窗口 (3)1 Command History:选定历史命令窗口为当前活动窗口 (4)2 Current Directory:选定当前路径窗口为当前活动窗口

(完整word版)含答案《MATLAB实用教程》

(完整word版)含答案《MATLAB实用教程》

第二章 MATLAB 语言及应用实验项目实验一 MATLAB 数值计算三、实验内容与步骤1.创建矩阵⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=987654321a(1(2)用(3)用(42.矩阵的运算(1)利用矩阵除法解线性方程组。

⎪⎪⎩⎪⎪⎨⎧=+++=-+-=+++=+-12224732258232432143214321421x x x x x x x x x x x x x x x 将方程表示为AX=B ,计算X=A\B 。

(2)利用矩阵的基本运算求解矩阵方程。

已知矩阵A 和B 满足关系式A -1BA=6A+BA ,计算矩阵B 。

其中⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=7/10004/10003/1A ,Ps: format rata=[1/3 0 0;0 1/4 0;0 0 1/7];b=inv(a)*inv(inv(a)-eye(3))*6*a(3)计算矩阵的特征值和特征向量。

已知矩阵⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=1104152021X ,计算其特征值和特征向量。

(4)Page:322利用数学函数进行矩阵运算。

已知传递函数G(s)=1/(2s+1),计算幅频特性Lw=-20lg(1)2(2w )和相频特性Fw=-arctan(2w),w 的范围为[0.01,10],按对数均匀分布。

3.多项式的运算(1)多项式的运算。

已知表达式G(x)=(x-4)(x+5)(x 2-6x+9),展开多项式形式,并计算当x 在[0,20]内变化时G(x)的值,计算出G(x)=0的根。

Page 324(2)多项式的拟合与插值。

将多项式G(x)=x 4-5x 3-17x 2+129x-180,当x 在[0,20]多项式的值上下加上随机数的偏差构成y1,对y1进行拟合。

对G(x)和y1分别进行插值,计算在5.5处的值。

Page 325 四、思考练习题1.使用logspace 函数创建0~4π的行向量,有20个元素,查看其元素分布情况。

Ps: logspace(log10(0),log10(4*pi),20) (2) sort(c,2) %顺序排列 3.1多项式1)f(x)=2x 2+3x+5x+8用向量表示该多项式,并计算f(10)值. 2)根据多项式的根[-0.5 -3+4i -3-4i]创建多项式。

第2章--MATLAB数据及其运算-习题答案教学内容

第2章--MATLAB数据及其运算-习题答案教学内容

第2章--M A T L A B数据及其运算-习题答案第2章 MATLAB数据及其运算习题2一、选择题1.下列可作为MATLAB合法变量名的是()。

D A.合计 B.123 C.@h D.xyz_2a 2.下列数值数据表示中错误的是()。

CA.+10 B.1.2e-5 C.2e D.2i3.使用语句t=0:7生成的是()个元素的向量。

A A.8 B.7 C.6 D.54.执行语句A=[1,2,3;4,5,6]后,A(3)的值是()。

B A.1 B.2 C.3 D.45.已知a为3×3矩阵,则a(:,end)是指()。

D A.所有元素 B.第一行元素C.第三行元素 D.第三列元素6.已知a为3×3矩阵,则运行a (1)=[]后()。

A A.a变成行向量 B.a变为2行2列C.a变为3行2列 D.a变为2行3列7.在命令行窗口输入下列命令后,x的值是()。

B >> clear>> x=i*jA.不确定 B.-1 C.1 D.i*j 8.fix(354/100)+mod(354,10)*10的值是()。

D A.34 B.354 C.453 D.439.下列语句中错误的是()。

BA.x==y==3 B.x=y=3C.x=y==3 D.y=3,x=y10.find(1:2:20>15)的结果是()。

CA.19 20 B.17 19C.9 10 D.8 911.输入字符串时,要用()将字符括起来。

C A.[ ] B.{ } C.' ' D." " 12.已知s='显示"hello"',则s的元素个数是()。

A A.9 B.11 C.7 D.1813.eval('sqrt(4)+2')的值是()。

BA.sqrt(4)+2 B.4 C.2 D.2, 214.有3×4的结构矩阵student,每个结构有name(姓名)、scores(分数)两个成员,其中scores是以1×5矩阵表示的5门课的成绩,那么要删除第4个学生的第2门课成绩,应采用的正确命令是()。

MATLAB基础教程第2章

MATLAB基础教程第2章

第二章 数组、矩阵及其运算
2.1 数组的创建和寻访
例2-2 一维数组的生成与访问
命令:X=rand(1,5) 命令:X(3) 命令:X([1 2 5]) 命令:X(1:3) 命令:X(3:end) 命令:X(3:-1:1) 命令:X(find(X>0.5)) 命令:X([1 2 3 4 4 3 2 1])
第二章 数组、矩阵及其运算
2.2 矩阵的运算
例2-6 矩阵的乘法(接着上面的例子) A*B 3*A
注意:矩阵相乘时要求A的列数等于B的行数
第二章 数组、矩阵及其运算
2.2 矩阵的运算
A/B(矩阵右除)表示的是方程X*B=A的解 A\B(矩阵左除)表示的是方程A*X=B的解
例2-7 矩阵的除法( 见教材P.23)
第二章 数组、矩阵及其运算
2.3 数组的运算
1、数组的基本运算
例2-8 ( 见教材P.25)
第二章 数组、矩阵及其运算
2.3 数组的运算
数组运算和矩阵运算指令对照表
数组运算 指令 A.’ A=s A+s,A-s s.*A s./A,A.\s A.^n A+B,A-B A.*B A./B B.\A 含义 非共轭转置,相当于conj(A’) 把标量s赋给A中每个元素 标量s分别于A的元素之和(差) 标量s分别于A的元素之积 S分别被A的元素除 A的每个元素自乘n次 对应元素相加(减) 对应元素相加(乘) A的元素被B的对应元素相除 (与上相同) A^n A+B,A-B A*B A /B B\A 方阵A自乘n次 矩阵和(差) 同内维矩阵相乘 A右除B A左除B S*A 标量s分别于A的元素之积 A’ 指令 共轭转置 矩阵运算 含义
第二章 数组、矩阵及其运算

Matlab习题答案

Matlab习题答案
(1) (3− 5i)(4 + 2i) (2) sin (2 − 8i)
参考答案: (1) >> (3-5*i)*(4+2*i) ans =
22.0000 -14.0000i
(2) >> sin(2-8*i) ans =
1.3553e+003 +6.2026e+002i
5.判断下面语句的运算结果。 (1) 4 < 20 (2) 4 <= 20 (3) 4 == 20 (4) 4 ~= 20 (5) 'b'<'B' 参考答案: (1) >> 4<20 ans =
y_nearest(i)=interp1(x,y,scalar_x(i),'nearest'); y_linear(i) =interp1(x,y,scalar_x(i),'linear'); y_spline(i) =interp1(x,y,scalar_x(i),'spline'); y_cubic(i) =interp1(x,y,scalar_x(i),'cubic'); end subplot(2,2,1),plot(x,y,'*'),hold on,plot(scalar_x,y_nearest),title('method=nearest'); subplot(2,2,2),plot(x,y,'*'),hold on,plot(scalar_x,y_linear),title('method=linear'); subplot(2,2,3),plot(x,y,'*'),hold on,plot(scalar_x,y_spline),title('method=spline'); subplot(2,2,4),plot(x,y,'*'),hold on,plot(scalar_x,y_cubic),title('method=cubic'); 得到结果为:

数字图像处理及应用(MATLAB)第2章习题答案

数字图像处理及应用(MATLAB)第2章习题答案

7.平均值说明f (x ,y )的平均值等于其傅里叶变换F (u ,v )在频率原点的值F (0,0)。

2-3证明离散傅里叶变换的频率位移和空间位移性质。

证明:)(2101),(1),(NvyM ux j M x N y e y x f MN v u F +--=-=∑∑=π),(),(1),(100)(21010)(2)(21010000v v u u F dxdy ey x f MNe ey x f MN y Nv v x M u u j M x N y N yv M x u j Nvy M ux j M x N y --==-+---=-=++--=-=∑∑∑∑πππ因为()()v u F y x f ,,⇔ 所以 ),(),(00)(200v v u u F e y x f N y v M x u j --⇔+π2-4小波变换是如何定义的?小波分析的主要优点是什么?小波之所以小,是因为它有衰减性,即是局部非零的;而称为波,则是因为它有波动性,即其取值呈正负相间的振荡形式,将)(2R L 空间的任意函数f (t )在小波基下展开,称其为函数f (t )的连续小波变换。

小波变换是时间(空间)频率的局部化分析,它通过伸缩平移运算对信号(函数)逐步进行多尺度细化,最终达到高频处时间细分,低频处频率细分,能自动适应时频信号的要求从而可聚焦到信号的任意细节,解决了Fourier 变换的困难问题。

2-5 在图像缩放中,采用最近邻域法进行放大时,如果放大倍数太大,可能会出现马赛克效应,这个问题有没有办法解决,或者有所改善。

可以利用线性插值法,当求出的分数地址与像素点不一致时,求出周围四个像素点的距离比,根据该比率, 由四个邻域的像素灰度值进行线性插值。

2-6 复合变换的矩阵等于基本变换的矩阵按顺序依次相乘得到的组合矩阵。

即,T=T N T N-1…T 1。

问矩阵顺序的改变能否影响变换的结果。

矩阵顺序的改变不会影响变换的结果。

第2章 MATLAB数值计算

第2章  MATLAB数值计算

第2章 MATLAB数值计算MATLAB的数学计算=数值计算+符号计算其中符号计算是指使用未定义的符号变量进行运算,而数值计算不允许使用未定义的变量。

2.1 变量和数据2.1.1数据类型数据类型包括:数值型、字符串型、元胞型、结构型等数值型=双精度型、单精度型和整数类整数类=无符号类(uint8、uint16、uint32、uint64)和符号类整数(int8、int16、int32、int64)。

2.1.2数据1. 数据的表达方式▪可以用带小数点的形式直接表示▪用科学计数法▪数值的表示范围是10-309~10309。

以下都是合法的数据表示:-2、5.67、2.56e-56(表示2.56×10-56)、4.68e204(表示4.68×10204)2. 矩阵和数组的概念在MATLAB的运算中,经常要使用标量、向量、矩阵和数组,这几个名称的定义如下:▪标量:是指1×1的矩阵,即为只含一个数的矩阵。

▪向量:是指1×n或n×1的矩阵,即只有一行或者一列的矩阵。

▪矩阵:是一个矩形的数组,即二维数组,其中向量和标量都是矩阵的特例,0×0矩阵为空矩阵([])。

▪数组:是指n维的数组,为矩阵的延伸,其中矩阵和向量都是数组的特例。

3. 复数复数由实部和虚部组成,MATLAB用特殊变量“i”和“j”表示虚数的单位。

复数运算不需要特殊处理,可以直接进行。

复数可以有几种表示:z=a+b*i或z=a+b*jz=a+bi 或z=a+bj(当b 为标量时) z=r*exp(i*theta)● 得出一个复数的实部、虚部、幅值和相角。

a=real(z) %计算实部 b=imag(z) %计算虚部 r=abs(z) %计算幅值 theta=angle(z) %计算相角 说明:复数z 的实部a=r*cos(θ); 复数z 的虚部b=r*sin(θ); 复数z 的幅值22b a r +=;复数z 的相角theta=arctg(b/a),以弧度为单位。

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

实验01讲评、参考答案讲评未交实验报告的同学名单批改情况:问题1:不仔细,式子中出错。

问题2:提交的过程不完整。

问题3:使用语句尾分号(;)不当,提交的过程中不该显示的结果显示。

问题4:截屏窗口没有调整大小。

附参考答案:实验01 MATLAB 运算基础(第2章 MATLAB 数据及其运算)一、实验目的1. 熟悉启动和退出MATLAB 的方法。

2. 熟悉MATLAB 命令窗口的组成。

3. 掌握建立矩阵的方法。

4. 掌握MATLAB 各种表达式的书写规则以及常用函数的使用。

二、实验内容1. 数学表达式计算先求下列表达式的值,然后显示MATLAB 工作空间的使用情况并保存全部变量。

1.1 计算三角函数122sin 851z e=+(注意:度要转换成弧度,e 2如何给出) 示例:点击Command Window 窗口右上角的,将命令窗口提出来成悬浮窗口,适当调整窗口大小。

命令窗口中的执行过程:《MATLAB 软件》课内实验王平1.2 计算自然对数221ln(1)2z x x =++,其中2120.455i x +⎡⎤=⎢⎥-⎣⎦(提示:clc 命令擦除命令窗口,clear 则清除工作空间中的所有变量,使用时注意区别,慎用clear 命令。

应用点乘方)命令窗口中的执行过程:1.3 求数学表达式的一组值0.30.330.3sin(0.3)ln , 3.0, 2.9,,2.9,3.022a a e e a z a a --+=++=--L提示:利用冒号表达式生成a 向量,求各点的函数值时用点乘运算。

命令窗口中的执行过程:1.4 求分段函数的一组值2242011122123t t z t t t t t ⎧≤<⎪=-≤<⎨⎪-+≤<⎩,其中t =0:0.5:2.5 提示:用逻辑表达式求分段函数值。

命令窗口中的执行过程:1.5 对工作空间的操作接着显示MATLAB当前工作空间的使用情况并保存全部变量提示:用到命令who, whos, save, clear, load,请参考教材相关内容。

命令窗口中的执行过程:>> who %显示当前工作空间中的变量名Your variables are:a t x z1 z2 z3 z4>> whos %显示当前工作空间中的变量名及信息Name Size Bytes Class Attributesa 1x61 488 doublet 1x6 48 doublex 2x2 64 double complexz1 1x1 8 doublez2 2x2 64 double complexz3 1x61 976 double complexz4 1x6 48 double>> save varfile %生成文件varfile.mat,并将当前工作空间的变量存入其中>> clear all %清除当前工作空间中的全部变量>> who>> whos>> load varfile %将文件varfile.mat装入>> whoYour variables are:a t x z1 z2 z3 z4>> whosName Size Bytes Class Attributesa 1x61 488 double t 1x6 48 double x 2x2 64 double complex z1 1x1 8 double z2 2x2 64 double complex z3 1x61 976 double complex z4 1x6 48 double >>2. 矩阵运算与数组运算已知:1234413134787,2033657327A B --⎡⎤⎡⎤⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦2.1 矩阵加、减和数乘运算A+6*B 和A-B+I (其中I 为单位矩阵。

注意:如何得到单位矩阵) 命令窗口中的执行过程:2.2 矩阵乘积和点乘积A*B和A.*B命令窗口中的执行过程:2.3 矩阵的乘方和点乘方A^3和A.^3命令窗口中的执行过程:2.4 矩阵的右除和左除A/B及B\A命令窗口中的执行过程:2.5 拼接矩阵成大的矩阵[A,B]和[A([1,3],:);B^2]命令窗口中的执行过程:3. 矩阵乘积、矩阵的子矩阵设有矩阵A 和B123453166789101769,111213141502341617181920970212223242541311A B ⎡⎤⎡⎤⎢⎥⎢⎥-⎢⎥⎢⎥⎢⎥⎢⎥==-⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦3.1 求矩阵A 和B 的乘积求它们的乘积并赋给C 。

(提示:可简化A 的输入,用冒号表达式、reshape 、矩阵转置)命令窗口中的执行过程:3.2 求矩阵C的子矩阵将矩阵C的右下角3×2子矩阵赋给D。

命令窗口中的执行过程:3.3 查看MATLAB工作空间的使用情况命令窗口中的执行过程:4. 完成下列数据操作4.1 求[100,999]之间能被21整除的数的个数提示:先利用冒号表达式,再利用find和length函数。

命令窗口中的执行过程:4.2 建立一个字符串向量,删除其中的大写字母提示:利用find函数和空矩阵。

命令窗口中的执行过程:三、实验提示1.1 计算三角函数提示122sin 851z e=+(注意:度要转换成弧度,e 2如何给出) 提示1:示例:点击Command Window 窗口右上角的,将命令窗口提出来成悬浮窗口,适当调整窗口大小。

命令窗口中的执行过程:提示2:e 2的表示请查表“2.3 常用数学函数及其含义”。

用exp(2)。

1.2 计算自然对数提示221ln(1)2z x x =+,其中2120.455i x +⎡⎤=⎢⎥-⎣⎦ 提示1:clc 命令擦除命令窗口,clear 则清除工作空间中的所有变量,使用时注意区别,慎用clear 命令。

提示2:ln 和开方的表示请查“表2.3 常用数学函数及其含义”。

用log, sqrt 。

提示3:x 2是数组运算。

用x.^2或x.*x 。

提示4:i 为复数的虚数单位(j 也是)。

若将i 作变量则其虚数单位无效,恢复用clear i 。

慎用i, j 做变量。

1.4 求分段函数的一组值提示2242011122123t t z t t t t t ⎧≤<⎪=-≤<⎨⎪-+≤<⎩,其中t =0:0.5:2.5 提示:用逻辑表达式求分段函数值。

提示1: 参考例2.4。

提示2:对于第1个分段条件表达式 0 ≤ t < 1,有以下结果:对于第2、3个分段条件表达式,有类似的结果。

于是,可以得到:分段函数值=第1个表达式*第1个分段条件表达式+第2个表达式*第2个分段条件表达式+第3个表达式*第3个分段条件表达式+…注意:分段区间是不重叠的。

对于在定义区间中任给的变量值,它只满足一个分段条件表达式(值为1),其它不满足(值为0),满足的对应项的值是其表达式的值,不满足的对应项值为0。

代入本题得:z4=t^2*(t>=0&&t<1)+(t^2-1)*(t>=1&&t<2)+(t^2+2*t+1)*(t>=2&&t<3)继续做下去可以完成本题。

若变量取100个值,求对应的函数值,还按这种方法来求做就有问题啦。

MATLAB提供了一种简单的方法:t不是一个个取值,而是把所有值放到t中成一个行向量,表达式自动逐个将t中的值代入表达式计算,得到对应的一组函数值。

实现这种功能需要将上面的表达式中的乘方号(^)和乘号(*)前加点(.),即改成(.^)和(.*),相当于循环,它不同于线性代数中相应的矩阵乘方(^)和乘法(*)运算。

用冒号表达式更简单:以下是分解式:至此,能理解表达式的计算结果了吗?1.5 对工作空间的操作提示接着显示MATLAB当前工作空间的使用情况并保存全部变量提示1:用到命令who, whos, save, clear, load,请参考教材相关内容。

步骤:查看工作空间;保存工作空间;清除工作空间;再查看工作空间;装入工作空间;再查看工作空间。

2.1 矩阵加、减和数乘运算提示A+6*B和A-B+I(其中I为单位矩阵。

注意:如何得到单位矩阵)提示1:3阶单位矩阵用eye(3)或eye(3,3)。

4. 完成下列数据操作4.1 求[100,999]之间能被21整除的数的个数提示提示:先利用冒号表达式,再利用find和length函数。

提示1:步骤:用冒号表达式把[100,999]之间的整数放在一个向量里(如A);用mod求得一个向量(如B),使A中能被21整除的数在B中对应位置为1,B的其它位置为0;用find求得B中不为0的元素的序号,放入一个向量中(如K);显示A中对应K的元素;%即能被21整除的数用length显示K的元素个数。

%即能被21整除的数的个数4.2 建立一个字符串向量,删除其中的大写字母提示提示:利用find函数和空矩阵。

提示1:利用find函数和空矩阵。

注意使用关系运算、逻辑运算。

注意!本题中大写字母所在位置是随机的,要用关系运算和逻辑运算,以及find找到它们所在位置的序号。

提示2:四、教程:第2章 MATLAB数据及其运算2.1 MATLAB数据的特点 p17矩阵是MATLAB最基本、最重要的数据对象。

MATLAB的大部分运算或命令都是在矩阵(复数域上)运算的意义下执行的。

标量对应仅含一个元素的矩阵。

数值数据双精度数占64位,转换函数double单精度数占32位,转换函数single带符号整数转换函数int8,int16,int32无符号整数转换函数uint8,uint16,uint32字符数据转换函数char结构体类型(Structure)单元类型(Cell)逻辑型非0为true,0为false2.2 变量及其操作 2.2.1变量与赋值1.变量命名➢ 以字母开头,后接字母、数字或下划线的字符序列,最多63个字符。

➢ 区分字母的大小写。

MATLAB 提供的标准函数名以及命令名必须用小写字母。

2.赋值语句(1) 变量=表达式(2) 表达式(值赋给预定义变量ans )其中,表达式是用运算符将有关运算量连接起来的式子,其结果是一个矩阵。

例2.1 计算表达式的值 p180x ,然后显示出结果。

其中,pi 和i 都是MATLAB 预先定义的变量,分别代表圆周率π和虚数单位。

3. 预定义变量 p18表2.1 常用的预定义变量及其含义预定义变量有特定的含义,应尽量避免重新赋值。

2.2.2 变量的管理p191.内存变量的显示与删除显示工作空间中驻留的变量名清单及信息命令:删除工作空间中的变量命令:clear 变量名工作空间窗口专门用于内存变量的管理。

相关文档
最新文档