【MATLAB算例】基于3节点三角形单元的矩形薄板分析

【MATLAB算例】基于3节点三角形单元的矩形薄板分析
【MATLAB算例】基于3节点三角形单元的矩形薄板分析

【MATLAB算例】基于3节点三角形单元的矩形薄板分析将此结构按三角形单元划分成432个三角形(X方向分成18段,Y方向分成12段),总共分成19X13=247个结点的有限元模型,具体步骤详细程序如下:

tic;

Initial_info=[0.09 0.06 18 12];

disp(该程序计算的是',num2str(Initial_info(3)+1),'X',num2str(Initial_info(4)+1),'=',...

num2str((Initial_info(3)+1)*(Initial_info(4)+1)),'个结点的有限元模型']);

LX=Initial_info(1);

LY=Initial_info(2);

nx=Initial_info(3);

ny=Initial_info(4);

ne=2*nx*ny;

np=(nx+1)*(ny+1);

for i=1:nx+1;

j=1:ny+1;

Np(i,j)=j+(i-1)*(ny+1);

end

生成节点编号矩阵Np

for i=1:nx+1;

j=1:ny+1;

XX(i,j)=(i-1)*LX/nx;

YY(i,j)=(j-1)*LY/ny;

end

XY=[reshape(XX',np,1),reshape(YY',np,1)];

nx2=nx/2;

Np1=Np(1:nx2+1,:);

Np2=Np(nx2+1:end,:);

for i=1:nx2*ny;

if rem(i,nx2)==0

xp=nx2;

yp=i/nx2;

else

xp=rem(i,nx2);

yp=fix(i/nx2)+1;

end

Dof1(i,:)=[Np1(xp,yp),Np1(xp+1,yp),Np1(xp,yp+1)];

Dof1(i+nx2*ny,:)=[Np1(xp+1,yp),Np1(xp+1,yp+1),Np1(xp,yp+1)];

Dof2(i,:)=[Np2(xp,yp),Np2(xp+1,yp),Np2(xp+1,yp+1)];

Dof2(i+nx2*ny,:)=[Np2(xp,yp),Np2(xp+1,yp+1),Np2(xp,yp+1)];

end

Dof=[Dof1;Dof2];

for i=1:ne

unit(i,:)=[XY(Dof(i,1),1),XY(Dof(i,2),1),XY(Dof(i,3),1),...

XY(Dof(i,1),2),XY(Dof(i,2),2),XY(Dof(i,3),2)];

end

disp('前处理完成');

前处理完成

单元刚度矩阵

E=2*10^11;u=0.3; 平面应力问题

D=E/(1-u^2)*[1 u 0;u 1 0;0 0 (1-u)/2];

for i=1:ne

xi=unit(i,1);

yi=unit(i,4);

xj=unit(i,2);

yj=unit(i,5);

xm=unit(i,3);

ym=unit(i,6);

ai=xj*ym-xm*yj;

aj=xm*yi-xi*ym;

am=xi*yj-xj*yi;

bi=yj-ym;

bj=ym-yi;

bm=yi-yj;

ci=-(xj-xm);

cj=-(xm-xi);

cm=-(xi-xj);

area=abs((ai+aj+am)/2);

B = [bi 0 bj 0 bm 0

0 ci 0 cj 0 cm

ci bi cj bj cm bm];

Be{i,1} = B/2/area ;

ke{i,1}=[Be{i,1}]'*D*Be{i,1}*area;

end

总刚度矩阵叠加

KK=sparse(2*np,2*np);

for ie=1:ne

a=Dof(ie,1);

b=Dof(ie,2);

c=Dof(ie,3);

DOF(1)=2*a-1;

DOF(2)=2*a;

DOF(3)=2*b-1;

DOF(4)=2*b;

DOF(5)=2*c-1;

DOF(6)=2*c;

for n1=1:6

for n2=1:6

KK(DOF(n1),DOF(n2))= KK(DOF(n1),DOF(n2))+ke{ie,1}(n1,n2);

end

end

end

单元等效节点荷载

y=(0:LY);

P=(10^7/0.03)*y-10^7; 左右受变化的三角形荷载,在如图的坐标系下

Re=sparse(ne,6);

for i=1:ne;

switch i

case num2cell(1:ne/2-nx2)

Pe=[0 0 0 0 0 0];

case num2cell(ne/2-nx2+1:ne/2)

Pe=-LX*P*[0,0,0,1,0,1]/nx/2;

case num2cell(ne/2+1:ne-nx2)

Pe=[0 0 0 0 0 0];

otherwise

Pe=-LX*P*[0,0,0,1,0,1]/nx/2;

end

Re(i,:)=Pe;

end

荷载叠加

Rr=sparse(1,2*np);

for i=1:ne

a=Dof(i,1);

b=Dof(i,2);

c=Dof(i,3);

DOF(1)=2*a-1;

DOF(2)=2*a;

DOF(3)=2*b-1;

DOF(4)=2*b;

DOF(5)=2*c-1;

DOF(6)=2*c;

for n1=1:6

Rr(DOF(n1))= Rr(DOF(n1))+Re(i,n1);

end

end

生成需处理的行列

cp=[1:nx+1];

ctype=ones(1,length(cp));

ctype(nx2+1)=2;

cp_all=(cp-1)*(ny+1)+1;

p_stake=zeros(1,2*length(cp));

for i=1:length(cp)

switch ctype(i)

case {2}

p_stake(2*i)=2*cp_all(i);

p_stake(2*i-1)=2*cp_all(i)-1;

case {1}

p_stake(2*i)=2*cp_all(i);

p_stake(2*i-1)=[];

otherwise

p_stake(2*i)=[];

p_stake(2*i-1)=2*cp_all(i)-1;

end

end

[m,j]=find(p_stake==0);

p_stake(:,j)=[];

处理对应的行列

KK_d=KK;

KK_f=KK;

KK_d(p_stake,:)=[];

KK_d(:,p_stake)=[];

KK_f(:,p_stake)=[];

KK_f=KK_f(p_stake,:);

Rr_unkown=Rr;

Rr_unkown(:,p_stake)=[];

RR=transpose(Rr_unkown);

[L,U]=lu(KK_d);

UU=U\(L\RR);

Rx=KK_f*UU;

数值计算部分

UU_all=UU';

for i=1:length(p_stake)

UU_all=[UU_all(:,1:p_stake(i)-1),0,UU_all(:,p_stake(i):end)];

end

for i=1:np

UU_info(i,:)=[UU_all(2*i-1),UU_all(2*i)];

end

出图部分(运行后显示)

梁尺寸及荷载图

figure;

set(gcf,'outerposition',get(0,'ScreenSize'));

set(gcf,'name','梁的尺寸及荷载');

line([-0.015,-0.01],[0.06,0.06]),hold on

line([-0.01,-0.01],[0.06,0]),hold on

line([-0.01,-0.005],[0,0]),hold on

line([-0.005,-0.015],[0,0.06]),hold on

line([0.105,0.1],[0.06,0.06]),hold on

line([0.1,0.1],[0.06,0]),hold on

line([0.1,0.095],[0,0]),hold on

line([0.095,0.105],[0,0.06]),hold on

rectangle('position',[0,0,0.09,0.06]),hold on

quiver(-0.01,0.06,-0.0055,0,'LineWidth',2.0,'MaxHeadSize',0.8,'color','k'),hold on quiver(-0.01,0.05,-0.0038,0,'LineWidth',2.0,'MaxHeadSize',0.8,'color','k'),hold on quiver(-0.01,0.04,-0.002,0,'LineWidth',2.0,'MaxHeadSize',0.8,'color','k'),hold on quiver(-0.01,0.02,0.002,0,'LineWidth',2.0,'MaxHeadSize',0.8,'color','k'),hold on quiver(-0.01,0.01,0.0038,0,'LineWidth',2.0,'MaxHeadSize',0.8,'color','k'),hold on quiver(-0.01,0,0.0055,0,'LineWidth',2.0,'MaxHeadSize',0.8,'color','k'),hold on quiver(0.1,0.06,0.0055,0,'LineWidth',2.0,'MaxHeadSize',0.8,'color','k'),hold on quiver(0.1,0.05,0.0038,0,'LineWidth',2.0,'MaxHeadSize',0.8,'color','k'),hold on quiver(0.1,0.04,0.002,0,'LineWidth',2.0,'MaxHeadSize',0.8,'color','k'),hold on

quiver(0.1,0.02,-0.002,0,'LineWidth',2.0,'MaxHeadSize',0.8,'color','k'),hold on quiver(0.1,0.01,-0.0038,0,'LineWidth',2.0,'MaxHeadSize',0.8,'color','k'),hold on quiver(0.1,0,-0.0055,0,'LineWidth',2.0,'MaxHeadSize',0.8,'color','k'),hold on

text(-0.0155,0.062,'1000N/cm^2')

text(-0.0105,-0.002,'1000N/cm^2')

text(0.1,0.062,'1000N/cm^2')

text(0.095,-0.002,'1000N/cm^2')

text(0,-0.002,'梁宽9cm,高6cm,厚1cm。E=2×10^11N/m^2,μ=0.3(此图单位:m)')

axis([-0.025 0.12 -0.015 0.07]),hold on;

网格图

figure;

set(gcf,'outerposition',get(0,'ScreenSize'));

set(gcf,'name','网格划分');

for i=1:ne

line([unit(i,1:3),unit(i,1)],[unit(i,4:6),unit(i,4)]);

end

axis([-0.025 0.12 -0.015 0.07]),hold on;

xytext=num2str([1:np]');

text(XY(:,1)+LX/nx/8,XY(:,2)+LY/ny/4,xytext);

print(gcf,'-dbitmap','model.bmp');

位移矢量图

figure;

set(gcf,'outerposition',get(0,'ScreenSize'));

set(gcf,'name','结点的位移矢量场');

quiver(XY(:,1),XY(:,2),-UU_info(:,1),UU_info(:,2)),

axis([-0.025 0.12 -0.015 0.07]),hold on;

for i=1:ne

plot([unit(i,1:3),unit(i,1)],[unit(i,4:6),unit(i,4)],'r:');

end

print(gcf,'-dbitmap','位移矢量场.bmp');

disp('梁顶面结点');

JD=13:13:247

disp('梁顶面结点位移');

WY=[-UU_info(13);-UU_info(26);-UU_info(39);-UU_info(52);-UU_info(65);-UU_i nfo(78);...

-UU_info(91);-UU_info(104);-UU_info(117);-UU_info(130);UU_info(143);UU_info (156);...

UU_info(169);UU_info(182);UU_info(195);UU_info(208);UU_info(221);UU_info(2 34);UU_info(247);]

结点位移

梁顶面结点

JD =

13 26 39 52 65 78 91 104 117 130 143

156 169 182 195 208 221 234 247 梁顶面结点位移

WY =

1.0e-006 *

0.6750

0.6000

0.5250

0.4500

0.3750

0.3000

0.2250

0.1500

0.0750

0.0000

-0.0750

-0.1500

-0.2250

-0.3000

-0.3750

-0.4500

-0.5250

-0.6000

-0.6750

figure;

set(gcf,'outerposition',get(0,'ScreenSize'));

set(gcf,'name','结点位移');

plot(JD,WY,'r:','LineWidth',2.0),grid on

toc;

matlab电力系统潮流计算

华中科技大学 信息工程学院课程设计报告书题目: 电力系统潮流计算 专业:电气工程及其自动化 班级: 学号: 学生姓名: 指导教师: 2015年 11 月 10 日

2015年11月12日

信息工程学院课程设计成绩评定表

摘要 电力系统稳态分析包括潮流计算和静态安全分析。本文主要运用的事潮流计算,潮流计算是电力网络设计与运行中最基本的运算,对电力网络的各种设计方案及各种运行方式进行潮流计算,可以得到各种电网各节点的电压,并求得网络的潮流及网络中的各元件的电力损耗,进而求得电能损耗。本位就是运用潮流计算具体分析,并有MATLAB仿真。 关键词:电力系统潮流计算 MATLAB仿真

Abstract Electric power system steady flow calculation and analysis of the static safety analysis. This paper, by means of the calculation, flow calculation is the trend of the power network design and operation of the most basic operations of electric power network, various design scheme and the operation ways to tide computation, can get all kinds of each node of the power grid voltage and seek the trend of the network and the network of the components of the power loss, and getting electric power. The standard is to use the power flow calculation and analysis, the specific have MATLAB simulation. Key words: Power system; Flow calculation; MATLAB simulation

潮流计算(matlab)实例计算

潮流例题:根据给定的参数或工程具体要求(如图),收集和查阅资料;学习相关软件(软件自选:本设计选择Matlab进行设计)。 2.在给定的电力网络上画出等值电路图。 3.运用计算机进行潮流计算。 4.编写设计说明书。 一、设计原理 1.牛顿-拉夫逊原理 牛顿迭代法是取x0 之后,在这个基础上,找到比x0 更接近的方程的跟,一步一步迭代,从而找到更接近方程根的近似跟。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0 的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。电力系统潮流计算,一般来说,各个母线所供负荷的功率是已知的,各个节点电压是未知的(平衡节点外)可以根据网络结构形成节点导纳矩阵,然后由节点导纳矩阵列写功率方程,由于功率方程里功率是已知的,电压的幅值和相角是未知的,这样潮流计算的问题就转化为求解非线性方程组的问题了。为了便于用迭代法解方程组,需要将上述功率方程改写成功率平衡方程,并对功率平衡方程求偏导,得出对应的雅可比矩阵,给未知节点赋电压初值,一般为额定电压,将初值带入功率平衡方程,得到功率不平衡量,这样由功率不平衡量、雅可比矩阵、节点电压不平衡量(未知的)构成了误差方程,解误差方程,得到节点电压不平衡量,节点电压加上节点电压不平衡量构成新的节点电压初值,将新的初值带入原来的功率平衡方程,并重新形成雅可比矩阵,然后计算新

的电压不平衡量,这样不断迭代,不断修正,一般迭代三到五次就能收敛。 牛顿—拉夫逊迭代法的一般步骤: (1)形成各节点导纳矩阵Y。 (2)设个节点电压的初始值U和相角初始值e 还有迭代次数初值为0。 (3)计算各个节点的功率不平衡量。 (4)根据收敛条件判断是否满足,若不满足则向下进行。 (5)计算雅可比矩阵中的各元素。 (6)修正方程式个节点电压 (7)利用新值自第(3)步开始进入下一次迭代,直至达到精度退出循环。 (8)计算平衡节点输出功率和各线路功率 2.网络节点的优化 1)静态地按最少出线支路数编号 这种方法由称为静态优化法。在编号以前。首先统计电力网络个节点的出线支路数,然后,按出线支路数有少到多的节点顺序编号。当由n 个节点的出线支路相同时,则可以按任意次序对这n 个节点进行编号。这种编号方法的根据是导纳矩阵中,出线支路数最少的节点所对应的行中非零元素也2)动态地按增加出线支路数最少编号在上述的方法中,各节点的出线支路数是按原始网络统计出来的,在编号过程中认为固定不变的,事实上,在节点消去过程中,每消去一个节点以后,与该节点相连的各节点的出线支路数将发生变化(增加,减少或保持不变)。因此,如果每消去一个节点后,立即修正尚未编号节点的出线支路数,然后选其中支路数最少的一个节点进行编号,就可以预期得到更好的效果,动态按最少出线支路数编号方法的特点就是按出线最少原则编号时考虑了消去过程中各节点出线支路数目的变动情况。 3.MATLAB编程应用 Matlab 是“Matrix Laboratory”的缩写,主要包括:一般数值分析,矩阵运算、数字信号处理、建模、系统控制、优化和图形显示等应用程序。由于使用Matlab 编程运算与人进行科学计算的思路和表达方式完全一致,所以不像学习高级语言那样难于掌握,而且编程效率和计算效率极高,还可在计算机上直接输出结果和精美的图形拷贝,所以它的确为一高效的科研助手。 二、设计内容 1.设计流程图

基于MATLAB的GMSK调制与解调课设报告

基于Matlab的GMSK调制与解调 1.课程设计目的 (1)加深对GMSK基本理论知识的理解。 (2)培养独立开展科研的能力和编程能力。 (3)通过SIMULINK对BT=0.3的GMSK调制系统进行仿真。 2.课程设计要求 (1)观察基带信号和解调信号波形。 (2)观察已调信号频谱图。 (3)分析调制性能和BT参数的关系。 3.相关知识 3.1GMSK调制 调制原理图如图2.2,图中滤波器是高斯低通滤波器,它的输出直接对VCO 进行调制,以保持已调包络恒定和相位连续。 非归零数字序 高斯低通滤 波器频率调制器 (VCO) GMSK已 调信号 图3.1GMSK调制原理图 为了使输出频谱密集,前段滤波器必须具有以下待性: 1.窄带和尖锐的截止特性,以抑制FM调制器输入信号中的高频分量; 2.脉冲响应过冲量小,以防止FM调制器瞬时频偏过大; 3.保持滤波器输出脉冲响应曲线下的面积对应丁pi/2的相移。以使调制指数为1/2。前置滤波器以高斯型最能满足上述条件,这也是高斯滤波器最小移频键控(GMSK)的由来。

GMSK 信号数据 3.2GMSK 解调 GMSK 本是MSK 的一种,而MSK 又是是FSK 的一种,因此,GMSK 检波也可以采用FSK 检波器,即包络检波及同步检波。而GMSK 还可以采用时延检波,但每种检波器的误码率不同。 GMSK 非相干解调原理图如图2.3,图中是采用FM 鉴频器(斜率鉴频器或相位鉴频器)再加判别电路,实现GMSK 数据的解调输出。 图3.2GMSK 解调原理图 4.课程设计分析 4.1信号发生模块 因为GMSK 信号只需满足非归零数字信号即可,本设计中选用(Bernoulli Binary Generator)来产生一个二进制序列作为输入信号。 图4.1GMSK 信号产生器 该模块的参数设计这只主要包括以下几个。其中probability of a zero 设置为0.5表示产生的二进制序列中0出现的概率为0.5;Initial seed 为61表示随机数种子为61;sample time 为1/1000表示抽样时间即每个符号的持续时为0.001s。当仿真时间固定时,可以通过改变sample time 参数来改变码元个数。例如仿真时间为10s,若sample time 为1/1000,则码元个数为10000。 带通滤 波器限幅器判决器鉴频器GMSK 信号 输出

Matlab通信系统仿真实验报告

Matlab通信原理仿真 学号: 2142402 姓名:圣斌

实验一Matlab 基本语法与信号系统分析 一、实验目的: 1、掌握MATLAB的基本绘图方法; 2、实现绘制复指数信号的时域波形。 二、实验设备与软件环境: 1、实验设备:计算机 2、软件环境:MATLAB R2009a 三、实验内容: 1、MATLAB为用户提供了结果可视化功能,只要在命令行窗口输入相应的命令,结果就会用图形直接表示出来。 MATLAB程序如下: x = -pi::pi; y1 = sin(x); y2 = cos(x); %准备绘图数据 figure(1); %打开图形窗口 subplot(2,1,1); %确定第一幅图绘图窗口 plot(x,y1); %以x,y1绘图 title('plot(x,y1)'); %为第一幅图取名为’plot(x,y1)’ grid on; %为第一幅图绘制网格线 subplot(2,1,2) %确定第二幅图绘图窗口 plot(x,y2); %以x,y2绘图 xlabel('time'),ylabel('y') %第二幅图横坐标为’time’,纵坐标为’y’运行结果如下图: 2、上例中的图形使用的是默认的颜色和线型,MATLAB中提供了多种颜色和线型,并且可以绘制出脉冲图、误差条形图等多种形式图: MATLAB程序如下: x=-pi:.1:pi; y1=sin (x); y2=cos (x); figure (1); %subplot (2,1,1); plot (x,y1); title ('plot (x,y1)'); grid on %subplot (2,1,2); plot (x,y2);

平面三角形单元有限元程序设计

. 一、题目 如图1所示,一个厚度均匀的三角形薄板,在顶点作用沿板厚方向均匀分布的竖向载荷。已知:P=150N/m ,E=200GPa ,=0.25,t=0.1m ,忽略自重。试计算薄板的位移及应力分布。 要求: 1. 编写有限元计算机程序,计算节点位移及单元应力。(划分三角形 单元,单元数不得少于30个); 2. 采用有限元软件分析该问题(有限元软件网格与程序设计网格必 须一致),详细给出有限元软件每一步的操作过程,并将结果与程序计算结果进行对比(任选取三个点,对比位移值); 3. 提交程序编写过程的详细报告及计算机程序; 4. 所有同学参加答辩,并演示有限元计算程序。 有限元法中三节点三角形分析结构的步骤如下: 1)整理原始数据,如材料性质、荷载条件、约束条件等,离散结构并进行单元编码、结点编码、结点位移编码、选取坐标系。 2)单元分析,建立单元刚度矩阵。 3)整体分析,建立总刚矩阵。 4)建立整体结构的等效节点荷载和总荷载矩阵 5)边界条件处理。 6)解方程,求出节点位移。 7)求出各单元的单元应力。 8)计算结果整理。 一、程序设计 网格划分 如图,将薄板如图划分为6行,并建立坐标系,则

刚度矩阵的集成 建立与总刚度矩阵等维数的空矩阵,已变单元刚度矩阵的集成。 由单元分析已知节点、单元的排布规律,继而通过循环计算求得每个单元对应的节点序号。 通过循环逐个计算:(1)每个单元对应2种单元刚度矩阵中的哪一种; (2)该单元对应总刚度矩阵的那几行哪几列 (3)将该单元的单元刚度矩阵加入总刚度矩阵的对应行列 循环又分为3层循环:(1)最外层:逐行计算 (2)中间层:该行逐个计算 (3)最里层:区分为第 奇/偶 数个计算 单元刚度的集成:[ ][][][][][]' '''''215656665656266256561661e Z e e e Z e Z e e e e k k k K k k k k k k +?++=? =?==?==?=?????? 边界约束的处理:划0置1法 X Y P X Y P

matlab潮流计算

附录1 使用牛顿拉夫逊法进行潮流计算的Matlab程序代码 % 牛拉法计算潮流程序 %----------------------------------------------------------------------- % B1矩阵:1、支路首端号;2、末端号;3、支路阻抗;4、支路对地电纳 % 5、支路的变比;6、支路首端处于K侧为1,1侧为0 % B2矩阵:1、该节点发电机功率;2、该节点负荷功率;3、节点电压初始值 % 4、PV节点电压V的给定值;5、节点所接的无功补偿设备的容量 % 6、节点分类标号:1为平衡节点(应为1号节点);2为PQ节点;3为PV 节点; %------------------------------------------------------------------------ clear all; format long; n=input('请输入节点数:nodes='); nl=input('请输入支路数:lines='); isb=input('请输入平衡母线节点号:balance='); pr=input('请输入误差精度:precision='); B1=input('请输入由各支路参数形成的矩阵:B1='); B2=input('请输入各节点参数形成的矩阵:B2='); Y=zeros(n);e=zeros(1,n);f=zeros(1,n);V=zeros(1,n);sida=zeros(1,n);S1=zeros(nl); %------------------------------------------------------------------ for i=1:nl %支路数 if B1(i,6)==0 %左节点处于1侧 p=B1(i,1);q=B1(i,2); else %左节点处于K侧 p=B1(i,2);q=B1(i,1); end Y(p,q)=Y(p,q)-1、/(B1(i,3)*B1(i,5)); %非对角元 Y(q,p)=Y(p,q); %非对角元 Y(q,q)=Y(q,q)+1、/(B1(i,3)*B1(i,5)^2)+B1(i,4); %对角元K侧 Y(p,p)=Y(p,p)+1、/B1(i,3)+B1(i,4); %对角元1侧 end %求导纳矩阵 disp('导纳矩阵Y='); disp(Y) %------------------------------------------------------------------- G=real(Y);B=imag(Y); %分解出导纳阵的实部与虚部 for i=1:n %给定各节点初始电压的实部与虚部 e(i)=real(B2(i,3)); f(i)=imag(B2(i,3));

基于matlab的通信信道及眼图的仿真 通信原理课程设计

通信原理课程设计 基于matlab的通信信道及眼图的仿真 作者: 摘要 由于多径效应和移动台运动等影响因素,使得移动信道对传输信号在时间、频率和角度上造成了色散,即时间色散、频率色散、角度色散等等,因此多径信道的特性对通信质量有着重要的影响,而多径信道的包络统计特性则是我们研究的焦点。根据不同无线环境,接收信号包络一般服从几种典型分布,如瑞利分布、莱斯分布等。因此我们对瑞利信道、莱斯信道进行了仿真并针对服从瑞利分布的多径信道进行模拟仿真。由于眼图是实验室中常用的一种评价基带传输系统的一种定性而方便的方法,“眼睛”的张开程度可以作为基带传输系统性能的一种度量,它不但反映串扰的大小,而且也可以反映信道噪声的影响。为此,我们在matlab上进行了仿真,加深对眼图的理解。 关键词:瑞利信道莱斯信道多径效应眼图 一、瑞利信道 在移动通信系统中,发射端和接收端都可能处于不停的运动状态之中,这种相对运动将产生多普勒频移。在多径信道中,发射端发出的信号通过多条路径到达接收端,这些路径具有不同的延迟和接收强度,它们之间的相互作用就形成了衰落。MATLAB中的多径瑞利衰落信道模块可以用于上述条件下的信道仿真。 多径瑞利衰落信道模块用于多径瑞利衰落信道的基带仿真,该模块的输入信号为复信号,可以为离散信号或基于帧结构的列向量信号。无线系统中接收机与发射机之间的相对运动将引起信号频率的多普勒频移,多普勒频移值由下式决定: 其中v是发射端与接收端的相对速度,θ是相对速度与二者连线的夹角,λ是信号的波长。

Fd的值可以在该模块的多普勒平移项中设置。由于多径信道反映了信号在多条路径中的传输,传输的信号经过不同的路径到达接收端,因此产生了不同的时间延迟。当信号沿着不同路径传输并相互干扰时,就会产生多径衰落现象。在模块的参数设置表中,Delay vector(延迟向量)项中,可以为每条传输路径设置不同的延迟。如果激活模块中的Normalize gain vector to 0 dB overall gain,则表示将所有路径接收信号之和定为0分贝。信号通过的路径的数量和Delay vector(延迟向量)或Gain vector(增益向量)的长度对应。Sample time(采样时间)项为采样周期。离散的Initial seed(初始化种子)参数用于设置随机数的产生。 1.1、Multipath Rayleigh Fading Channel(多径瑞利衰落信道)模块的主要参数 参数名称参数值 Doppler frequency(Hz) 40/60/80 Sample time 1e-6 Delay vector(s) [0 1e-6] Gain vector(dB) [0 -6] Initial seed 12345 使能 Normalize gain vector to 0 dB overall gain Bernoulli Random Binary Generator(伯努利二进制随机数产生器)的主要参数 参数名称参数值 Probability of a zero0.5 Initial seed54321

基于MATLAB的电力系统潮流计算

基于MATLAB的电力系统潮流计算 %简单潮流计算的小程序,相关的原始数据数据数据输入格式如下: %B1是支路参数矩阵,第一列和第二列是节点编号。节点编号由小到大编写%对于含有变压器的支路,第一列为低压侧节点编号,第二列为高压侧节点%编号,将变压器的串联阻抗置于低压侧处理。 %第三列为支路的串列阻抗参数。 %第四列为支路的对地导纳参数。 %第五烈为含变压器支路的变压器的变比 %第六列为变压器是否是否含有变压器的参数,其中“1”为含有变压器,%“0”为不含有变压器。 %B2为节点参数矩阵,其中第一列为节点注入发电功率参数;第二列为节点%负荷功率参数;第三列为节点电压参数;第六列为节点类型参数,其中 %“1”为平衡节点,“2”为PQ节点,“3”为PV节点参数。 %X为节点号和对地参数矩阵。其中第一列为节点编号,第二列为节点对地%参数。 n=input('请输入节点数:n='); n1=input('请输入支路数:n1='); isb=input('请输入平衡节点号:isb='); pr=input('请输入误差精度:pr='); B1=input('请输入支路参数:B1='); B2=input('请输入节点参数:B2='); X=input('节点号和对地参数:X='); Y=zeros(n); Times=1; %置迭代次数为初始值 %创建节点导纳矩阵 for i=1:n1 if B1(i,6)==0 %不含变压器的支路 p=B1(i,1); q=B1(i,2); Y(p,q)=Y(p,q)-1/B1(i,3); Y(q,p)=Y(p,q); Y(p,p)=Y(p,p)+1/B1(i,3)+0.5*B1(i,4); Y(q,q)=Y(q,q)+1/B1(i,3)+0.5*B1(i,4); else %含有变压器的支路 p=B1(i,1); q=B1(i,2); Y(p,q)=Y(p,q)-1/(B1(i,3)*B1(i,5)); Y(q,p)=Y(p,q); Y(p,p)=Y(p,p)+1/B1(i,3);

MATLAB通信系统仿真实验报告1

MATLAB通信系统仿真实验报告

实验一、MATLAB的基本使用与数学运算 目的:学习MATLAB的基本操作,实现简单的数学运算程序。 内容: 1-1要求在闭区间[0,2π]上产生具有10个等间距采样点的一维数组。试用两种不同的指令实现。 运行代码:x=[0:2*pi/9:2*pi] 运行结果: 1-2用M文件建立大矩阵x x=[0.10.20.30.40.50.60.70.80.9 1.11.21.31.41.51.61.71.81.9 2.12.22.32.42.52.62.72.82.9 3.13.23.33.43.53.63.73.83.9] 代码:x=[0.10.20.30.40.50.60.70.80.9 1.11.21.31.41.51.61.71.81.9 2.12.22.32.42.52.62.72.82.9 3.13.23.33.43.53.63.73.83.9] m_mat 运行结果: 1-3已知A=[5,6;7,8],B=[9,10;11,12],试用MATLAB分别计算 A+B,A*B,A.*B,A^3,A.^3,A/B,A\B. 代码:A=[56;78]B=[910;1112]x1=A+B X2=A-B X3=A*B X4=A.*B X5=A^3 X6=A.^3X7=A/B X8=A\B

运行结果: 1-4任意建立矩阵A,然后找出在[10,20]区间的元素位置。 程序代码及运行结果: 代码:A=[1252221417;111024030;552315865]c=A>=10&A<=20运行结果: 1-5总结:实验过程中,因为对软件太过生疏遇到了些许困难,不过最后通过查书与同学交流都解决了。例如第二题中,将文件保存在了D盘,而导致频频出错,最后发现必须保存在MATLAB文件之下才可以。第四题中,逻辑语言运用到了ij,也出现问题,虽然自己纠正了问题,却也不明白错在哪了,在老师的讲解下知道位置定位上不能用ij而应该用具体的整数。总之第一节实验收获颇多。

基于MATLAB的潮流计算源程序代码(优.选)

%*************************电力系统直角坐标系下的牛顿拉夫逊法潮流计算********** clear clc load E:\data\IEEE014_Node.txt Node=IEEE014_Node; weishu=size(Node); nnum=weishu(1,1); %节点总数 load E:\data\IEEE014_Branch.txt branch=IEEE014_Branch; bwei=size(branch); bnum=bwei(1,1); %支路总数 Y=(zeros(nnum)); Sj=100; %********************************节点导纳矩阵******************************* for m=1:bnum; s=branch(m,1); %首节点 e=branch(m,2); %末节点 R=branch(m,3); %支路电阻 X=branch(m,4); %支路电抗 B=branch(m,5); %支路对地电纳 k=branch(m,6); if k==0 %无变压器支路情形 Y(s,e)=-1/(R+j*X); %互导纳 Y(e,s)=Y(s,e); end if k~=0 %有变压器支路情形 Y(s,e)=-(1/((R+j*X)*k)); Y(e,s)=Y(s,e); Y(s,s)=-(1-k)/((R+j*X)*k^2); Y(e,e)=-(k-1)/((R+j*X)*k); %对地导纳 end Y(s,s)=Y(s,s)-j*B/2; Y(e,e)=Y(e,e)-j*B/2; %自导纳的计算情形 end for t=1:nnum; Y(t,t)=-sum(Y(t,:))+Node(t,12)+j*Node(t,13); %求支路自导纳 end G=real(Y); %电导 B=imag(Y); %电纳 %******************节点分类************************************* * pq=0; pv=0; blancenode=0; pqnode=zeros(1,nnum); pvnode=zeros(1,nnum); for m=1:nnum; if Node(m,2)==3 blancenode=m; %平衡节点编号 else if Node(m,2)==0 pq=pq+1; pqnode(1,pq)=m; %PQ 节点编号 else if Node(m,2)==2 pv=pv+1; pvnode(1,pv)=m; %PV 节点编号 end end end end %*****************************设置电压初值********************************** Uoriginal=zeros(1,nnum); %对各节点电压矩阵初始化 for n=1:nnum Uoriginal(1,n)=Node(n,9); %对各点电压赋初值 if Node(n,9)==0;

一三节点三角形单元.docx

有限元课程总结 一三节点三角形单元 1位移函数 移函数写成矩阵形式为: 确定六个待定系数 a4 v玉> 矩阵形式如下: J“= TV, 0 Nj 0 N m bJ _ 0 TV, 0 Nj 0 2单元刚度矩阵的计算 1)单元应变和节点位移的关系 由几何方程可以得到单元的应变表达式, 5 6 > = ----------------- b . 「2A ' 7 厂 f Mg Y — A ”——, Y Cd As _ u i 匕? 宀=[N]{5丫 V7 u i 8x dv du dv ----- 1 ---- dy dx J_ 2A C C i bj 0 0 Cj C J b J u j V J

2)单元应力与单元节点位移的关系 [KJ = [B r ]T [D][B s ] b r b s + — c r c s t s 2 * s “也+与仏 (T = i,jjn;s = i,jjn) 3) 单元刚度矩阵 卩心][K“] [K]J [K }i ] [K 〃] [心][K mj ] 3载荷移置 1)集中力的移置 图3 由虚功相等可得, (㈤丁附=(Q YJW {P } 由于虚位移是任意的,则皿}"=["卩{鬥 2)体力的移置 [S M D I B .] = E 2A(1-Z /2) Mi Ci % 2 z 如图3所示, 令单元所受的均匀分布体力为{〃}= Et 4(1 —“2)A 地C$ + [DfB i % [K 加 [K 如 6

由虚功相等可得, ({J*r)r{7?r =^}>f[N]r{p}tdxdy {R}e =\\[N]r{p}tdxdy 3)分布面力的移置 设在单元的边上分布有面力{可二[片了r,同样可以得到结点载荷, {R}e=\[N]T{P}tds 4.引入约束条件,修改刚度方程并求解 1)乘大数法处理边界条件 图3?4所示的结构的约束和载荷情况,如图3?7所示。结点1、4上有水平 方向的位移约束,结点4、6上有垂直方向的约束,结点3上作用有集中力(', 匕)。 整体刚度矩阵[K]求出后,结构上的结点力可以表示为: {F} = [K]{5} 根据力的平衡,结点上的结点力与结点载荷或约束反力平衡。用{?}表示结 点载荷和支杆反力,则可以得到结点的平衡方程: [K]0}={P} (3.4) 这样构成的结点平衡方程组,在右边向量{P}中存在未知量,因此在求解平衡

基于matlab--psat软件的电力系统潮流计算课程设计

东北电力大学课程设计改革试用任务书: 电力系统潮流计算课程设计任务书 设计名称:电力系统潮流计算课程设计 设计性质:理论计算,计算机仿真与验证 计划学时:两周 一、设计目的 1.培养学生独立分析问题、解决问题的能力; 2.培养学生的工程意识,灵活运用所学知识分析工程问题的能力 3.编制程序或利用电力系统分析计算软件进行电力系统潮流分析。 二、原始资料 1、系统图:IEEE14节点。 2、原始资料:见IEEE14节点标准数据库 三、课程设计基本内容: 1.采用PSAT仿真工具中的潮流计算软件计算系统潮流; 1)熟悉PSAT仿真工具的功能; 2)掌握IEEE标准数据格式内容; 3)将IEEE标准数据转化为PSAT计算数据; 2.分别采用NR法和PQ分解法计算潮流,观察NR法计算潮流中雅可比矩阵的变化情况, 分析两种方法计算潮流的优缺点; 3.分析系统潮流情况,包括电压幅值、相角,线路过载情况以及全网有功损耗情况。

4.选择以下内容之一进行分析: 1)找出系统中有功损耗最大的一条线路,给出减小该线路损耗的措施,比较各种措施 的特点,并仿真验证; 2)找出系统中电压最低的节点,给出调压措施,比较各种措施的特点,并仿真验证; 3)找出系统中流过有功功率最大的一条线路,给出减小该线路有功功率的措施,比较 各种措施的特点,并仿真验证; 5.任选以下内容之一作为深入研究:(不做要求) 1)找出系统中有功功率损耗最大的一条线路,改变发电机有功出力,分析对该线路有 功功率损耗灵敏度最大的发电机有功功率,并进行有效调整,减小该线路的损耗; 2)找出系统中有功功率损耗最大的一条线路,进行无功功率补偿,分析对该线路有功 功率损耗灵敏度最大的负荷无功功率,并进行有效调整,减小该线路的损耗; 3)找出系统中电压最低的节点,分析对该节点电压幅值灵敏度最大的发电机端电压, 并有效调整发电机端电压,提高该节点电压水平; 四、课程设计成品基本要求: 1.绘制系统潮流图,潮流图应包括: 1)系统网络参数 2)节点电压幅值及相角 3)线路和变压器的首末端有功功率和无功功率 2.撰写设计报告,报告内容应包括以下几点: 1)本次设计的目的和设计的任务; 2)电力系统潮流计算的计算机方法原理,分析NR法和PQ分解法计算潮流的特点; 3)对潮流计算结果进行分析,评价该潮流断面的运行方式安全性和经济性; 4)找出系统中运行的薄弱环节,如电压较低点或负载较大线路,给出调整措施; 5)分析各种调整措施的特点并比较它们之间的差异; 6)结论部分以及设计心得; 五、考核形式 1.纪律考核:学生组织出勤情况和工作态度等; 2.书面考核:设计成品的完成质量、撰写水平等; 3.答辩考核:参照设计成品,对计算机方法进行电力系统潮流计算的相关问题等进行答辩; 4.采用五级评分制:优、良、中、及格、不及格五个等级。

平面三角形单元

第八章 平面问题的有限元分析及三角形单元的应用 第一节 概述 分析弹性力学平面问题时,最简单的单元式由三个结点组成的三角形单元。当用以分析平面应力问题时,可将其视为三角板;当用以分析平面应变问题时,则可式为三棱柱。各单元在结点处为铰结。图8-1所示位移悬臂梁离散为三角形单元的组合体 以矩阵形式列出弹性力学平面问题的基本量和基本方程。 谈形体所受体力分量可表示为 [ ] T y x y x p p p p p =??? ? ????= (8-1) 所受面力分量可表示为 [ ] T y x y x p p p p p =??? ? ????= (8-2) 体内任一点应力分量可表示为 []T xy y x τδδδ= (8-3) 任一点的应变分量可表示为 []T xy y x γεεε= (8-4) 任一点的位移分量可表示为 []T v u =δ (8-5) 弹性力学平面问题的几何方程的矩阵表达式为 ?? ???? ???????? ??? ???+??????=????????????=x u y v y v x u xy y x εεεε (8-6) 平面应力问题的物理方程的矩阵表达式为 ? ???? ? ?????????? ????????? ?--= ????? ? ??????xy y x xy y x E γεεμμμ μτσσ210 0010112 (8-7) 或简写成为 εσD = (8-8) 式中

???? ?? ? ?????? ?--=210 0010112μμμ μ E D (8-9) 称为弹性矩阵。 平面应变问题的物理方程也可写成式(8-8),但须将式(8-9)中的E 换成 2 1μ -E ,μ换成 2 1μμ -,因此得出 ???? ?? ????????? ?? ?-----+-= )1(2210 00110 11)21)(1()1(2 2 μμμμμμ μμμE D (8-10) 平衡微分方程及边界条件也可以用矩阵表示,但弹性力学有限元位移法中,通常用虚功 方程代替平衡微分方程和应力边界条件。虚功方程的矩阵表达式为 ?????***=+tdxdy tds p f ptdxdy f T T σε (8-11) 式中:[ ] T v u f ** * =,表示虚位移; []T xy x x * ***=γεεε,表示与虚位移相对应的虚应变。 为了便于计算,作用于弹性体上的体力和面力替换为作用在结点上的集中力,即等效结 点荷载。设作用于各个结点上的外力分量用如下列阵来表示 []T n n V U V U V U F ?=2211 与这些结点外力分量相对应得结点虚位移分量列阵为 []T n n v u v u v u * ******?=2211δ 则外力在虚位移上做的虚功为 F v V u U v V u U v V u U T n n n n ** *****=++?++++δ22221111 如平面弹性体的厚度为t ,该虚功除以t ,即可得出单位厚度薄板上的外力虚功。于是,式(8-11)所示虚功方程可写成 ??**=tdxdy F T T σεδ (8-11) 虚功方程不仅仅应用于弹性力学,也可用于塑性力学。其应用条件是:只要变形体的全部外力和应力满足平衡方程;位移是微小的,并满足边界条件,位移与应变满足几何方程。

MATLAB下的潮流计算实现-稀疏技术毕业设计

毕业设计(论文)MATLAB下的潮流计算实现-稀疏技术

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:日期:

摘要 电力系统潮流计算是研究电力系统稳态运行情况的一种计算,它根据给定的运行条件及系统接线情况确定整个电力系统各部分的运行状态:各母线的电压,各元件中流过的功率,系统的功率损耗等等。在电力系统规划的设计和现有电力系统运行方式的研究中,都需要利用潮流计算来定量地分析比较供电方案或运行方式的合理性、可靠性和经济性。因此潮流计算是研究电力系统的一种很重要和很基础的计算。由于电力系统结构及参数的一些特点,并且随着电力系统不断扩大,潮流问题的方程式阶数越来越高,对这样的方程式并不是任何数学方法都能保证给出正确答案的。这种情况成为促使电力系统计算人员不断寻求新的更可靠方法的重要因素。 本文旨在于研究潮流计算的牛顿—拉夫逊法的基本原理,在Matlab环境中实现牛顿—拉夫逊法潮流计算的数学模型,程序流程以及编制相应程序,并在程序中融合了节点优化编号和稀疏技术,以提高计算效率。最后用IEEE-3O节点标准测试系统验证所编程序。 关键词:潮流计算Newtom-Raphson法节点优化稀疏技术Matlab ABSTRACT Power flow calculation is fundanmental of analysis. Network reconfiguration,fault management,state estimator etc also need the data of electrial system power flow.There is important significance to develop power flow calculation in allusion to traits of distribution network. This paper introduces the principle of Newtom-Raphson algorithm, which is developed for calculation of power flow calculation ,where zero sequence network is open.With this algorithm,the three-phase load is resolved into positive/negative sequence power and coupling power,thus,decoupling three phase power flow into sequencet component power flow.The power flow can be obtained by just finding the positive sequence power flow and then finding the negative sequent component from the coupling https://www.360docs.net/doc/d217167606.html,pared with the existing methods,the jacobian matrix with the proposed algorithm is of much lower order,thus substantially reducing the computation burden.The proposed algorithm,together with a reference algorithm,has been simulated on an actual IEEE-30 system using statistic load date.And then it will

(完整word版)使用matlab绘制眼图.docx

使用 matlab 绘制数字基带信号的眼图实验 一、实验目的 1、掌握无码间干扰传输的基本条件和原理,掌握基带升余弦滚降系统的实现方法; 2、通过观察眼图来分析码间干扰对系统性能的影响,并观察在输入相同码率的NRZ 基带信号下,不同滤波器带宽对输出信号码间干扰大小的影响程度; 3、熟悉 MATLAB语言编程。 二、实验原理和电路说明 1、基带传输特性 基带系统的分析模型如图3-1 所示,要获得良好的基带传输系统,就应该 a n t nT s 基带传输a n h t nT s n n抽样判决 H ( ) 图 3-1基带系统的分析模型 抑制码间干扰。设输入的基带信号为a n t nT s, T s为基带信号的码元周期,则经过 n 基带传输系统后的输出码元为a n h t nT s。其中 n h(t )1H ()e j t d(3-1 ) 2 理论上要达到无码间干扰,依照奈奎斯特第一准则,基带传输系统在时域应满足: ,k 0 h( kT s)(3-2) 0,k为其他整数 频域应满足: T s, T s(3-3) H ( ) 0,其他

H ( ) T s T s T s 图 3-2 理想基带传输特性 此时频带利用率为 2Baud / Hz , 这是在抽样值无失真条件下,所能达到的最高频率利用率。 由于理想的低通滤波器不容易实现, 而且时域波形的拖尾衰减太慢, 因此在得不到严格 定时时,码间干扰就可能较大。在一般情况下,只要满足: 2 i H 2 2 , (3-4) H H ( ) H T s i T s T s T s T s 基带信号就可实现无码间干扰传输。这种滤波器克服了拖尾太慢的问题。 从实际的滤波器的实现来考虑,采用具有升余弦频谱特性 H ( ) 时是适宜的。 1 sin T s ( ) , (1 ) (1 ) 2 T s T s T s H ( ) 1, (1 ) 0 (3-5) T s 0, (1 ) T s 这里 称为滚降系数, 1。 所对应的其冲激响应为: sin t cos( t T s ) h(t ) T s (3-6) t 1 4 2t 2 T s 2 T s 此时频带利用率降为 2 / (1 ) Baud/ Hz ,这同样是在抽样值无失真条件下, 所能达到的最 高频率利用率。换言之,若输入码元速率 R s ' 1/ T s ,则该基带传输系统输出码元会产生码

《有限元基础教程》_【ANSYS算例】4.7.1(3) 基于3节点三角形单元的矩形薄板分析(GUI)及命令流

【ANSYS 算例】4.7.1(3) 基于3节点三角形单元的矩形薄板分析 如图4-20所示为一矩形薄平板,在右端部受集中力100 000N F =作用,材料常数为:弹性模量7110Pa E =?、泊松比1/3μ=,板的厚度为0.1m t =,在ANSYS 平台上,按平面应力问题完成相应的力学分析。 (a) 问题描述 (a) 有限元分析模型 图4–20 右端部受集中力作用的平面问题(高深梁) 解答 在ANSYS 平台上,完成的分析如下。 1. 基于图形界面的交互式操作(step by step) (1) 进入ANSYS(设定工作目录和工作文件) 程序 → ANSYS Interactive →Working directory (设置工作目录) →Initial jobname (设置工作文件名): 2D3Node →Run → OK (2) 设置计算类型 ANSYS Main Menu : Preferences… → Structural → OK (3) 选择单元类型 ANSYS Main Menu : Preprocessor →Element Type →Add/Edit/Delete… →Add… →Solid :Quad 4node 42 →OK (返回到Element Types 窗口) → Options… →K3: Plane Strs w/thk(带厚度的平面应力问题) →OK →Close (4) 定义材料参数 ANSYS Main Menu : Preprocessor →Material Props →Material Models →Structural →Linear →Elastic → Isotropic: EX:1.0e7 (弹性模量),PRXY: 0.33333333 (泊松比) → OK → 鼠标点击该窗口右上角的“ ”来关闭该窗口 (5) 定义实常数以确定平面问题的厚度 ANSYS Main Menu: Preprocessor →Real Constant s… →Add/Edit/Delete →Add →Type 1→ OK →Real Constant Set No: 1 (第1号实常数), THK: 0.1 (平面问题的厚度) →OK →Close (6) 生成单元模型 生成4个节点 ANSYS Main Menu: Preprocessor →Modeling → Create → Nodes → On Working Plane →输入节点1的x,y,z 坐标(2,1,0),回车→输入节点2的x,y,z 坐标(2,0,0),回车→输入节点3的x,y,z 坐标(0,1,0),回车→输入节点4的x,y,z 坐标(0,0,0),回车→OK 定义单元属性 ANSYS Main Menu: Preprocessor →Modeling → Create → Elements → Elem Attributes →Element type number:1 →Material number:1→Real constant set number:1 →OK 生成单元 ANSYS Main Menu: Preprocessor →Modeling → Create → Elements → User Numbered → Thru Nodes →Number to assign to element:1→Pick nodes:2,3,4→OK →Number to assign to element:2→Pick nodes:3,2,1→OK (7) 模型施加约束和外载 左边两个节点施加X,Y 方向的位移约束 ANSYS Main Menu: Solution → Define Loads → Apply →Structural → Displacement → On

相关文档
最新文档