matlab连续梁程序的编制与使用Word文档
MATLAB与Word的连接

11.1MATLAB与Microsoft Word的连接前面提到MathCAD文字处理是非常强的,那么MATLAB的文字处理又将如何呢?MathWorks公司开发的MATLAB Notebook成功地将Microsoft Word和MATLAB结合在一起,为文字处理、科学计算和工程设计营造了一个完美的工作环境。
这样MATLAB不仅兼具原有的计算能力,而且又增加了Word软件的编辑能力,已经远远的把MathCAD抛在后面。
MATLAB Notebook可以在word中随时修改计算命令,随时计算并生成图像返回,使用户能在Word环境中“随心所欲地享用”MATLAB的浩瀚科技资源。
MATLAB Notebook 的工作方式是:用户在word文档中创建命令,然后送到MATLAB的后台中执行,最后将结果返回到word中。
建议撰写科技报告、论文、专著的科学工作者使用MATLAB Notebook,建议讲授、编写理工科教材的教师使用MATLAB Notebook,建议对于演算理工科习题的广大学生使用MATLAB Notebook。
MATLAB Notebook的强大功能将会使你事半功倍。
11.1.1安装MATLAB Notebook从上面的介绍中可以看出,使用MATLAB Notebook时,你的计算机中必须有Word和MATLAB。
本书以MATLAB6.5和word2000为例。
MATLAB Notebook文件又称为M-book 文件。
MATLAB6.5的Notebook是在MATLAB环境下安装的。
具体步骤如下:(1)在系统中分别安装MATLAB6.5和word2000,并启动MATLAB6.5命令窗口;(2)在命令窗口中输入:>>notebook-setup就会得到如下提示:Welcome to the utility for setting up the MATLAB Notebookfor interfacing MATLAB to Microsoft WordChoose your version of Microsoft Word:[1]Microsoft Word97[2]Microsoft Word2000[3]Microsoft Word2002(XP)[4]Exit,making no changes(3)根据安装的Word的版本选择相应的代号,本文选择如下:Microsoft Word Version:2Notebook setup is complete.这样你就可以使用MATLAB Notebook了。
利用MATLAB生成Word文档

fun ctio n ceshi_Word%利用MATLAB生成Word文档% ceshi_Word%% Copyright 2009 - 2010 xiezhh.% $Revisio n: 1.0.0.0 $ $Date: 2009/12/14 12:37:00 $%设定测试Word文件名和路径测试.doc'];%判断Word是否已经打开,若已打开,就在打开的Word中进行操作,否则就打开try%若Word服务器已经打开,返回其句柄WordWord = actxGetR unnin gServer('Word.Applicati on');catch%创建一个Microsoft Word服务器,返回句柄WordWord = actxserver('Word.Applicatio n');en d;%设置Word属性为可见Word.Visible = 1; % 或set(Word, 'Visible', 1);%若测试文件存在,打开该测试文件,否则,新建一个文件,并保存,文件名为测试if exist(filespec_user,'file');Docume nt = Word.Docume nts.Ope n(filespec_user);% Docume nt = in voke(Word.Docume nts,'Ope n',filespec_user);elseDocume nt = Word.Docume nts.Add;% Docume nt = in voke(Word.Docume nts, 'Add');Docume nt.SaveAs(filespec_user);endContent = Document.Content; % 返回Content 接口句柄Selection = Word.Selection; % 返回Selection 接口句柄Paragraphformat = Selection.ParagraphFormat; % 返回ParagraphFormat 接口句柄%页面设置Docume nt.PageSetup.TopMarg in = 60;Docume nt.PageSetup.BottomMarg in = 45;Docume nt.PageSetup.LeftMarg in = 45;Docume nt.PageSetup.RightMarg in = 45;%设定文档内容的起始位置和标题Con te nt.Start = 0; %设置文档内容的起始位置Word .doc%上边距60磅%下边距45磅%左边距45磅%右边距45磅title ='试卷分析';Conten t.Text = title;%输入文字内容 Conten t.F on t.Size =16 ; %设置字号为16 Co nten t.Fo nt.Bold =4 ; %字体加粗 Con te nt.P aragraphs.Alig nment = 'wdAlig nParagraphCe nter :Select ion. TypeParagraph; xueqi = ' ( 2009— 2010 学年第一学期)’;Selection.Text = xueqi; % 在当前位置输入文字内容 Selectio n.Fo nt.Size = 12; % 设置字号为 12 Selectio n.Fo nt.Bold = 0; % 字体不加粗Tables = Docume nt.Tables.Add(Selectio n.Ra nge,12,9); %返回第1个表格的句柄DTI = Document.Tables.ltem(1); % 或 DTI = Tables; %设置表格边框DTI.Borders.OutsideLi neStyle = 'wdLi neStyleSi ngle'; DTI.Borders.OutsideLi neWidth = 'wdL in eWidth150pt'; DTI.Borders.I nsideLi neStyle = 'wdLi neStyleSi ngle'; DTI.Borders.I nsideLi neWidth = 'wdL in eWidth150pt'; DTI.Rows.Alig nment = 'wdAlig nRowCe nter';DTI.Rows.ltem(8).Borders.ltem(1).Li neStyle = 'wdL in eStyleNo ne'; DTI.Rows.ltem(8).Borders.lte m( 3).Li neStyle = 'wdL in eStyleNo ne';DTI.Rows.Item(11).Borders.Item(1).Li neStyle = 'wdLi neStyleNo ne'; DTI.Rows.ltem(11).Borders.ltem(3).Li neStyle = 'wdLi neStyleNo ne'; %设置表格列宽和行高column_width = [53.7736,85.1434,53.7736,35.0094,...35.0094,76.6981,55.1887,52.9245,54.9057];% 定义列宽向量row_height = [28.5849,28.5849,28.5849,28.5849,25.4717,25.4717,...32.8302,312.1698,17.8302,49.2453,14.1509,18.6792]; % 定义行高向量%通过循环设置表格每列的列宽 for i = 1:9DTI.Colu mn s.Item(i).Width = colu mn _width(i);%居中对齐Selectio n.Start = Conten t.e nd; %设定下面内容的起始位置%回车,另起一段 Selectio n.MoveDow n;%光标下移(取消选中)paragraphformat.Alig nment = 'wdAlig nParagraphCe nter : Select ion. TypeParagraph; %回车,另起一段 Select ion. TypeParagraph;%回车,另起一段Selection.Font.Size = 10.5; % 设置字号为 10.5%居中对齐%在光标所在位置插入一个12行9列的表格end%通过循环设置表格每行的行高for i = 1:12DTI.Rows.ltem(i).Height = row_height(i);end%通过循环设置每个单元格的垂直对齐方式for i = 1:12for j = 1:9DTI.Cell(i,j).VerticalAlig nment = 'wdCellAlig nV erticalCe nter'; endend%合并单元格DTI.Cell(1,4).Merge(DTI.Cell(1,5));DTI.Cell(2, 4).Merge(DTI.Cell(2, 5));DTI.Cell(3, 4).Merge(DTI.Cell(3, 5));DTI.Cell(4, 4).Merge(DTI.Cell(4, 5));DTI.Cell(5, 2).Merge(DTI.Cell(5, 5));DTI.Cell(5, 3).Merge(DTI.Cell(5, 6));DTI.Cell(6, 2).Merge(DTI.Cell(6, 5));DTI.Cell(6, 3).Merge(DTI.Cell(6, 6));DTI.Cell(5, 1).Merge(DTI.Cell(6, 1));DTI.Cell(7, 1).Merge(DTI.Cell(7, 9));DTI.Cell(8, 1).Merge(DTI.Cell(8, 9));DTI.Cell(9, 1).Merge(DTI.Cell(9, 3));DTI.Cell(9, 2).Merge(DTI.Cell(9, 3));DTI.Cell(9, 3).Merge(DTI.Cell(9, 4));DTI.Cell(9, 4).Merge(DTI.Cell(9, 5));DTI.Cell(10, 1).Merge(DTI.Cell(10, 9));DTI.Cell(11,5).Merge(DTI.Cell(11,9));DTI.Cell(12, 5).Merge(DTI.Cell(12, 9));DTI.Cell(11, 1).Merge(DTI.Cell(12, 4));Selection.Start = Content.end; % 设置光标位置在文档内容的结尾Select ion. TypeParagraph; %回车,另起一段Selection.Text ='主管院长签字:年月日';%输入文字内容Paragraphformat.Alig nment = 'wdAlig nParagraphRight'; % 右对齐Selection.MoveDown; % 光标下移%写入表格内容DTI.Cell(1,1).Range.Text ='课程名称';DTI.Cell(1,3).Range.Text ='课程号';DTI.Cell(1,5).Range.Text ='任课教师学院’;DTI.Cell(1,7).Range.Text ='任课教师 DTI.Cell(2,1).Range.Text ='授课班级 DTI.Cell(2,3).Range.Text ='考试日期 DTI.Cell(2,5).Range.Text ='应考人数 DTI.Cell(2,7).Range.Text ='实考人数 DTI.Cell(3,1).Range.Text ='出卷方式 DTI.Cell(3,3).Range.Text ='阅卷方式'; DTI.Cell(3,5).Range.Text ='选用试卷 A/B : DTI.Cell(3,7).Range.Text ='考试时间'; DTI.Cell(4,1).Range.Text ='考试方式'; DTI.Cell(4,3).Range.Text ='平均分'; DTI.Cell(4,5).Range.Text ='不及格人数 DTI.Cell(4,7).Range.Text ='及格率'; DTI.Cell(5,1).Range.Text ='成绩分布'; DTI.Cell(5,2).Range.Text = '90 分以上 DTI.Cell(5,3).Ra nge.Text = '80---89 分 DTI.Cell(6,2).Ra nge.Text = '70--79 分 DTI.Cell(6,3).Ra nge.Text = '60---69 分DTI.Cell(7,1).Ra nge.Text =['试卷分析(含是否符合教学大纲、难度、知识覆'盖面、班级分数分布分析、学生答题存在的共性问题与知识掌握情况、教学中 '存在的问题及改进措施等内容) '];DTI.Cell(7,1).Ra nge.ParagraphFormat.Alig nment = 'wdAlig nParagraphLeft :DTI.Cell(9,2).Range.Text ='签字:: DTI.Cell(9,4).Range.Text ='年 月 日'; DTI.Cell(10,1).Range.Text ='教研室审阅意见:’;DTI.Cell(10,1).Ra nge.ParagraphFormat.Alig nment = 'wdAlig nParagraphLeft'; DTI.Cell(10,1).VerticalAlig nment = 'wdCellAlig nVerticalTop'; DTI.Cell(11,2).Range.Text ='教研室主任(签字):年 月 日';DTI.Cell(11,2).Ra nge.ParagraphFormat.Alig nment = 'wdAlig nParagraphLeft'; DTI.Cell(8,1).Ra nge.P aragraphFormat.Alig nment = 'wdAlig nParagraphLeft'; DTI.Cell(8,1).VerticalAlig nment = 'wdCellAlig nV erticalTop'; DTI.Cell(9,2).Borders.ltem(2).L in eStyle = 'wdLi neStyleN on e'; DTI.Cell(9,2).Borders.ltem(4).L in eStyle = 'wdLi neStyleN on e'; DTI.Cell(9,3).Borders.Item(4).L in eStyle = 'wdLi neStyleN on e'; DTI.Cell(11,1).Borders.Item(4).Li neStyle = 'wdL in eStyleNo ne'; %如果当前工作文档中有图形存在,通过循环将图形全部删除Shape = Document.Shapes; % 返回 Shapes 接口的句柄 ShapeCount = Shape.Count; % 返回文档中 Shape 对象的个数 if ShapeCou nt ~= 0;for i = 1:ShapeCo unt;Shape.Item(1).Delete; % 删除第 1 个 Shape 对象 en d;en d;%产生标准正态分布随机数,画直方图,并设置图形属性人占%'; 人占 %'; 人占%'; 人占%';zft = figure(' un its',' no rmalized','positi on',...[0.280469 0.553385 0.428906 0.251302],'visible','off); % 新建图形窗口,设为不可见set(gca,'position',[0.1 0.2 0.85 0.75]); % 设置坐标系的位置和大小data = normrnd(0,1,1000,1); % 产生标准正态分布随机数hist(data); %绘制标准正态分布随机数的频数直方图grid on; % 添加参考网格xlabel('考试成绩'); %为X轴加标签ylabel('人数'); %为Y轴加标签%将图形复制到粘贴板hgexport(zft, '-clipboard');%将图形粘贴到当前文档里(表格的第8行第1列的单元格里),并设置图形版式为浮于文字上方% Select ion .Ra nge.PasteSpecial;DTI.Cell(8,1).Ra nge. Paragraphs.ltem(1).Ra nge. PasteSpecial;Shape.ltem(1).WrapFormat.Type = 3;Shape.ltem(1).ZOrder('msoBringlnFrontOfText'); % 设置图片叠放次序为浮于文字上方delete(zft); %删除图形句柄Document.ActiveWindow.ActivePane.View.Type = 'wdPrintView'; % 设置视图方式为页面Document.Save; % 保存文档口Love is n ot a maybe thing. You know whe n you love some one.。
连续梁程序说明文档2011010128

连续梁程序说明文档——结12 张佳佳2011010128一、程序思路二、流程说明1、运行matlab,在命令窗口输入“LXL”,或直接通过File-Open打开“LXL.m”运行该m文件;2、根据提示输入结构的几何特性和荷载工况;在输入时需要注意以下几点:1)所有的向量以matlab可识别的数组形式输入;2)单元抗弯刚度仅支持数值输入,需要提出EI后输入剩余系数;3)输入的直接结点力矩数组元素个数应等于最大位移编码数。
3、当所有数据输入完毕之后,程序自动输出如下量:1)整体刚度矩阵KE;2)各节点转角ZJ;3)各杆端弯矩FJ。
三、计算算例算例选取题4,荷载工况2:程序运行过程:请输入单元总数:NE=6请输入单元杆长数组:BL=[4 6 6 8 4 6]请输入去掉EI后的抗弯刚度数组:EI=[1 1.5 1 2 1 1.5]请输入单元定位向量数组:JD=[1,2;2,3;3,4;4,5;5,6;6,7]请输入杆端弯矩数组注意数组维数与最大位移编码相同:P =[0 0 -8 0 10 0 0]请输入跨中集中荷载数组:FL =[0 12 8 0 6 0]请输入均布荷载数组:q =[0 0 0 0 0 0]各节点转角整体刚度矩阵各单元杆端弯矩弯矩图四、编程总结此次编程时是首次接触matlalb这个软件,深感这个软件的强大和各种函数给编程已经矩阵运算带来的方便。
可能自己的算法比较繁琐,但是满足了各种荷载工况以及输出弯矩图的基本要求。
程序不知道带符号的运算,所有输入都必须以纯数字组成的数组进行输入,相信在这方面还会有很大的改进空间。
):连续系统 梁的基础理论及 MATLAB 编程 Matlab (

(3)
将(3)式代入(2)式,可得应变能为:
U=
1 2 ∫0
L
⎛ ∂ 2u ⎞ EI ⎜ 2 ⎟ dx ⎜ ∂x ⎟ ⎝ ⎠
2
(4)
3.1.3 外力所做的功
外力所做的功可表示为: L
0
W = ∫ P( x) u dx
(5)
3.1.4 总势能
梁的总势能为应变能减去外力所做的功,可表示为:
V =U −W
ui、θ i、u j、θ j
将(8)式代入(7)式,有:
V =∫
L 0
T ⎤ ⎡1 ⎛ ∂2N ⎞ ⎛ ∂2 N ⎞ T ⎢ EI {φ} ⎜ 2 ⎟ ⎜ 2 ⎟{φ} − P[ N ]{φ}⎥ dx ⎜ ∂x ⎟ ⎜ ∂x ⎟ ⎥ ⎢2 ⎝ ⎠ ⎝ ⎠ ⎦ ⎣
(9)
(9)式的推导中,用到如下公式:
6EI ⎤ L2 ⎥ 2EI ⎥ ⎥ L ⎥ 6EI ⎥ − 2 L ⎥ 4EI ⎥ ⎥ L ⎦
⎡ Fiy ⎤ ⎢M ⎥ ⎢ i⎥ ⎢ Fjy ⎥ ⎢ ⎥ ⎢M j ⎥ ⎣ ⎦
(16)
3.2 Matlab 程序说明
clear x=sym( ‘x’ ); L=sym( ‘L’ ); N=[ 1 – 3 * (x^2) / (L^2) + 2 * (x^3) / (L^3), x – 2 * (x^2) / L + (x^3) / (L^2),…. 3 * (x^2) / (L^2) – 2 * (x^3) / (L^3), -(x^2) / L + (x^3) / (L^2) ]; Ni=diff ( N, 2 ); Nt=transpose ( Ni); kk=Nt * Ni; K=E * I * int (kk, 0, ‘L’);
matlab语言在开发连续梁桥顶推施工-5页精选文档

MATLAB语言在开发连续梁桥顶推施工作者:梁爱斌王…文章来源:西安公路研究所点击数:530 更新时间:2019-1-7 [摘要]通过介绍MATLAB语言在顶推施工预应力混凝土连续桥施工过程内力动态分析程序设计中的应用,说明基于MATLAB语言开发结构分析软件的可行性和优越性。
关键词MATLAB语言顶推施工连续梁桥结构分析程序设计一、引言目前,常见的结构分析软件(程序)一般采用FORTRAN、C及可视化类语言中的一种或多种进行开发。
其开发周期一般较长、程序编制量大、程序的调试和测试较难实现,从而开发费用较高,而且在针对大型的数据处理和动态图形处理方面编程较复杂,尤其是采用多种语言进行混合或复合编程时,程序本身的调试和接口问题较为突出。
当然,这些语言有它们各自的优点,尤其表现在多语言的复合编程上,可将各语言的长处集于一身,并在一定程度上避免了使用它们有局限的方面。
在开发一个能对顶推法施工的连续梁桥进行施工全过程内力动态分析的软件时,尽管可采用FDRTRAN语言设计结构分析计算的基本模块,同时采用可视化类语言设计整个系统的基本控制模块这种优化方案,但它在结构的动态分析程序设计方面仍有两个大的难题:(1)大批量数据进行复杂的数值运算时程序较难设计和测试;(2)最终的计算结果进行可视化处理后形成实时动画较困难。
但用MATLAB进行整个程序的设计,上述两个问题即可迎刃而解。
二、MATLAB简介MATLAB是MathWorks公司于1982年推出的一套高性能的数值计算和可视化软件,它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个方便且界面友好的用户环境。
在此环境下,对所要解决的许多问题,用户只需简单地列出数学表达式,其结果便会以数值和图形方式显示出来;对于大型问题,只需建立相应的数学模型,同样可以得到快速准确的解答。
其主要特点概括起来有以下几点:(l)MATLAB语言自带数值运算、矩阵运算方面的常规算法函数6000余条,并且具有自身的矩阵运算语法,使得一般的小型数据处理显得极为简单。
利用MATLAB生成Word文档【范本模板】

function ceshi_Word%利用MATLAB生成Word文档% ceshi_Word%% Copyright 2009 — 2010 xiezhh。
%$Revision:1。
0。
0。
0 $$Date: 2009/12/14 12:37:00 $% 设定测试Word文件名和路径filespec_user = [pwd '\测试。
doc’];% 判断Word是否已经打开,若已打开,就在打开的Word中进行操作,否则就打开Wordtry% 若Word服务器已经打开,返回其句柄WordWord = actxGetRunningServer(’Word。
Application’);catch% 创建一个Microsoft Word服务器,返回句柄WordWord = actxserver(’Word.Application’);end;%设置Word属性为可见Word.Visible = 1; % 或set(Word,'Visible',1);%若测试文件存在,打开该测试文件,否则,新建一个文件,并保存,文件名为测试。
doc if exist(filespec_user,'file’);Document = Word.Documents.Open(filespec_user);% Document = invoke(Word。
Documents,’Open’,filespec_user);elseDocument = Word。
Documents。
Add;%Document = invoke(Word.Documents, 'Add’);Document。
SaveAs(filespec_user);endContent = Document.Content; %返回Content接口句柄Selection = Word。
Selection; %返回Selection接口句柄Paragraphformat = Selection.ParagraphFormat;%返回ParagraphFormat接口句柄% 页面设置Document.PageSetup。
MATLAB与word交互教程——notebook

NotebookNotebook 的功能在于:使用户能在Word环境中“随心所欲地享用”MATLAB的浩瀚科技资源,为用户营造融文字处理、科学计算、工程设计于一体的完美工作环境。
MATLAB Notebook 制作的M-book文档不仅拥有MS-Word 的全部文字处理功能,而且具备MATLAB无与伦比的数学解算能力和灵活自如的计算结果可视化能力。
它既可以看作解决各种计算问题的字处理软件,也可以看作具备完善文字编辑功能的科技应用软件。
M-book文档最显著的特点是它的“活”性:●它为论文、科技报告、讲义教材、学生作业的撰写营造了文字语言思维和科学计算思维的和谐环境。
●用M-book写成的电子著作、电子文稿、讲义教材不仅图文并茂,而且动静结合。
那些由MATLAB指令构成的例题、演示,都可供读者亲自操作,举一反三,从而在“手脑并用”的环境中由此及彼、由浅入深。
8.1Notebook的配置和启动8.1.1Notebook的配置(1)与MATLAB适配的Word随MATLAB版本的升级,与其适配的版本也会发生变化。
以MATLAB R2007a为例,能用来配置Notebook环境的Word版本是2000,2002,2003。
(2)Notebook的配置在Windows已经装有前述Word版本的前提下,在MATLAB中配置Notebook环境十分简便。
只要在MATLAB指令窗中运行以下指令,配置过程将自动进行。
notebook –setup假如指令窗中出现如下信息,就表示配置成功。
Setup complete8.1.2Notebook的启动一创建新的M-book文件(1)在Word 默认窗口(即Normal.dot)下创建新的M-book文档●选择Word 窗口的下拉菜单项{文件:新建} ;●在弹出的对话框中,选择“M-book”模板,按[确定] 键;●于是,Word 的窗口由原先的默认式样变成“M-book”式样(如图8.1-1所示),自动开启一个新的MATLAB作为其服务器,而不管此前Windows平台上是否已经开启了MATLAB。
matlab语言在开发连续梁桥顶推施工-5页精选文档

MATLAB语言在开发连续梁桥顶推施工作者:梁爱斌王…文章来源:西安公路研究所点击数:530 更新时间:2019-1-7 [摘要]通过介绍MATLAB语言在顶推施工预应力混凝土连续桥施工过程内力动态分析程序设计中的应用,说明基于MATLAB语言开发结构分析软件的可行性和优越性。
关键词MATLAB语言顶推施工连续梁桥结构分析程序设计一、引言目前,常见的结构分析软件(程序)一般采用FORTRAN、C及可视化类语言中的一种或多种进行开发。
其开发周期一般较长、程序编制量大、程序的调试和测试较难实现,从而开发费用较高,而且在针对大型的数据处理和动态图形处理方面编程较复杂,尤其是采用多种语言进行混合或复合编程时,程序本身的调试和接口问题较为突出。
当然,这些语言有它们各自的优点,尤其表现在多语言的复合编程上,可将各语言的长处集于一身,并在一定程度上避免了使用它们有局限的方面。
在开发一个能对顶推法施工的连续梁桥进行施工全过程内力动态分析的软件时,尽管可采用FDRTRAN语言设计结构分析计算的基本模块,同时采用可视化类语言设计整个系统的基本控制模块这种优化方案,但它在结构的动态分析程序设计方面仍有两个大的难题:(1)大批量数据进行复杂的数值运算时程序较难设计和测试;(2)最终的计算结果进行可视化处理后形成实时动画较困难。
但用MATLAB进行整个程序的设计,上述两个问题即可迎刃而解。
二、MATLAB简介MATLAB是MathWorks公司于1982年推出的一套高性能的数值计算和可视化软件,它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个方便且界面友好的用户环境。
在此环境下,对所要解决的许多问题,用户只需简单地列出数学表达式,其结果便会以数值和图形方式显示出来;对于大型问题,只需建立相应的数学模型,同样可以得到快速准确的解答。
其主要特点概括起来有以下几点:(l)MATLAB语言自带数值运算、矩阵运算方面的常规算法函数6000余条,并且具有自身的矩阵运算语法,使得一般的小型数据处理显得极为简单。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章连续梁程序的编制与使用入结构力学领域中而产生的一种方法,而Matlab语言正是进行矩阵运算的强大工具,因此,用Matlab语言编写结构力学程序有更大的优越性。
本章将详细介绍如何利用Matlab语言编制连续梁结构的计算程序。
矩阵位移法的解题思路是将结构离散为单元(杆件),建立单元杆端力与杆端位移之间的关系-单元刚度方程;再将各单元集成为原结构,在满足变形连续条件和平衡条件时,建立整体刚度方程;在边界条件处理完毕后,由整体刚度方程解出节点位移,进而求出结构内力。
用矩阵位移法计算连续梁的步骤如下:1)整理原始数据,如材料性质、荷载条件、约束条件等,并进行编码:单元编码、结点编码、结点位移编码、选取坐标系。
2)建立局部坐标系下的单元刚度矩阵。
3)建立整体坐标系下的单元刚度矩阵。
4)集成总刚。
5)建立整体结构的等效节点荷载和总荷载矩阵6)边界条件处理。
7)解方程,求出节点位移。
8)求出各单元的杆端内力。
实际上,上述步骤也是编制Matlab程序的基本步骤,在求出计算结果后,还可以利用Matlab的绘图功能绘制结构图、内力图、变形图等等。
图3-1程序流程图3.1 程序说明%******************************************************************* % 矩阵位移法解连续梁主程序%******************************************************************* ●功能:运用矩阵位移法解连续梁的基本原理编制的计算主程序。
●基本思想:结点(结点位移)编码默认为从左至右,从1开始顺序进行;杆端弯矩的方向默认为逆时针。
●荷载类型:可计算结点荷载,每单元作用的跨中集中力和均布荷载。
●说明:主程序的作用是通过赋值语句、读取和写入文件、函数调用等完成算法的全过程,即实现程序流程图的程序表达。
%-----------------------------------------------------------------------------------------------------1 程序准备format short e %设定输出类型clear all %清除所有已定义变量clc %清屏●说明:format short e -设定计算过程中显示在屏幕上的数字类型为短格式、科学计数法;clear all -清除所有已定义变量,目的是在本程序的运行过程中,不会发生变量名相同等可能使计算出错的情况;clc -清屏,使屏幕在本程序运行开始时%-----------------------------------------------------------------------------------------------------2 打开文件FP1=fopen('input.txt','rt'); %打开输入数据文件存放初始数据FP2=fopen('output.txt','wt'); %打开输出数据文件存放计算结果●说明:FP1=fopen('input.txt','rt'); -打开已存在的输入数据文件input.txt,且设置其为只读格式,使程序在执行过程中不能改变输入文件中的数值,并用文件句柄FP1来FP2=fopen('output.txt','wt'); -打开输出数据文件,该文件不存在时,通过此命令创建新文件,该文件存在时则将原有内容全部删除。
该文件设置为可写格式,可在程序执行过程中向输出文件写入数据。
%-----------------------------------------------------------------------------------------------------3 读入程序控制信息NELEM =fscanf(FP1,'%d',1); %单元个数(单元编码总数)NPOIN =fscanf(FP1,'%d',1); %结点个数(结点编码总数)NVFIX =fscanf(FP1,'%d',1); %约束个数(零位移总数)NFPOIN=fscanf(FP1,'%d',1); %结点荷载个数(作用在结点上集中力偶总数)NFPRES=fscanf(FP1,'%d',1); %非结点荷载数(作用在单元上分布荷载总数)YOUNG=fscanf(FP1,'%f',1); %弹性模量●说明:从输入文件FP1中读入单元个数,结点个数,约束个数,结点荷载个数,非结点荷载个数,弹性模量;程序中弹性模量仅输入了一个值,表明本程序仅能求解一种材料构成的结构,如:钢筋混凝土结构、钢结构,不能求解钢筋混凝土-钢组合结构。
采用了命令fscanf,其中:’%d’表示读入整数格式;1表示读取1个数。
%------------------------------------------------------------------------------------------fprintf(FP2,'\n 结构初始数据\n\n');fprintf(FP2,' 单元总数=%d 结点总数=%d 约束总数=%d \n',NELEM,NPOIN,NVFIX);fprintf(FP2,' 结点荷载个数=%d 非结点荷载个数=%d 弹性模量=%12.5g \n',NFPOIN,NFPRES,YOUNG);●说明:在输出文件FP2中显示输入的控制信息,便于程序执行完毕后,从输出文件中查找输入错误。
采用了命令fprintf,其中:\n为换行标志,表示换一行;%12.5g表示输出12位且有5位小数的实数。
括在引号中的信息' 单元总数=%d 结点总数=%d 约束总数=%d \n'为输出到FP2文件中时的格式,其后的变量表NELEM,NPOIN,NVFIX依次将其代表的数值输出到%d所对应的位置。
%-----------------------------------------------------------------------------------------------------4 调用读取初始数据函数,生成结构信息[LNODS,COORD,FPOIN,FPRES,FIXED]=…ele_INITIALDATA (FP1,FP2,NELEM,NPOIN,NFPOIN,NFPRES,NVFIX);%-----------------------------------------------------------------------------------------------------5 调用总刚计算函数,生成单刚并集成总刚[HK] = ele_HK(NPOIN,NELEM,LNODS,COORD,YOUNG);%-----------------------------------------------------------------------------------------------------6调用荷载计算函数,由结点荷载与非结点荷载生成总荷载向量列阵[FORCE] = …ele_FORCE(NPOIN,NFPOIN,FPOIN,NFPRES,FPRES,LNODS,COORD);%-----------------------------------------------------------------------------------------------------7调用边界条件处理函数,总刚、总荷载进行边界条件处理[HK,FORCE] = ele_BOUNDARY(NVFIX,FIXED,HK,FORCE);%-----------------------------------------------------------------------------------------------------8 方程求解DISP=zeros(NPOIN,1); %建立并初始化结构的结点位移列矩阵DISP=HK\FORCE; %计算出结构所有的结点位移%-----------------------------------------------------------------------------------------------------9调用单元杆端力计算函数,求单元杆端力[FE] = ele_MOMENTS(FP2,NPOIN,DISP,NELEM,LNODS,…COORD,YOUNG,NFPRES,FPRES);%*******************************************************************10 关闭输出数据文件fclose(FP2);%******************************************************************* % 读取初始数据函数ele_INITIALDATA%******************************************************************* % 入口参数:FP1,FP2,NELEM,NPOIN,NFPOIN,NFPRES,NVFIX% 出口参数:LNODS,COORD,FPOIN,FPRES,FIXED%------------------------------------------------------------------------------------------function [LNODS,COORD,FPOIN,FPRES,FIXED]=…ele_INITIALDATA(FP1,FP2,NELEM,NPOIN,NFPOIN,NFPRES,NVF IX)●说明:FP1-文件句柄,指示输入数据文件;FP2-文件句柄,指示输出数据文件;%------------------------------------------------------------------------------------------% 读取结构信息LNODS=fscanf(FP1,'%f',[3,NELEM])';●说明:建立LNODS矩阵,该矩阵指出了每一单元的连接信息和惯性矩。