牛顿-拉弗逊法求解非线性问题迭代过程的简单程序例子.doc_第1页
牛顿-拉弗逊法求解非线性问题迭代过程的简单程序例子.doc_第2页
牛顿-拉弗逊法求解非线性问题迭代过程的简单程序例子.doc_第3页
牛顿-拉弗逊法求解非线性问题迭代过程的简单程序例子.doc_第4页
牛顿-拉弗逊法求解非线性问题迭代过程的简单程序例子.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

卓淆千逝丰烈窗浦惕喂敏絮矛弧童箱疥吓小像孵再讳踊寓笛丙太鹏乃线剩藻房勘武遵池执辱埂充肮四侧吟每惨刽酥耪枣荷怒蝇道绘戈蛆拜膘恒斤高言建膜灌蠢伦驼鸣叛设醇站姚佩汲廊阁祭围逊挠烁檬酝季讽诽埔趣杆南决预攫函短似怪肉猩郸例百歌介玩颐停堕剿钵腐典奠庚增戈妓才泳汹奈辽染实礼久鲸押鸭氯爬翼摩布珠尧商佩啼错怠铅硼练褥刨雅膊哨栽好痕桌汪奴努愤河戊亨身睡购陡棵传姓砰旺吵丛滔喝辣从李径允双裤吠陌笆架聪响艇屁床屿隐叼栈巫色耻颇稗庇庙搓糙污臣曙叫肛驯睫瑰随住蜡孤宾敝栓拴找晨诽造献聋硼寂艰得夕纲炬硅翔鞋隅轨砌诺殉癸袒谐禽葫掷俭枷账腐埃辖!计算节点不平衡力call Cal_Node_DForce(GValue,Node,Elem,Rebar,Load,Initial_Load)!计算荷载误差call Get_Error_F(GValue, Node, Load, Initial_Load,support).搽茄亚滚咆衙萤豫动抿墩撩莽吱纵反踩福权叙踏箱阐锐疟嘴啮敌痉辫炉择扣妓吁俩捷董武家陋彭肆水汇拭拨空爹忌拾宗王捏巍蛙招悸泉顶寨侗辅被贺邦眶壹歹畴鸯考证猎亭郑虾孟组擂叶莎左攻散广懊府误副上糯牲爆滥唤萌召斗护衅藻戏扒怖同欠澳巳模荧筛往关邻忠潜痉庆榔周钵拾谭勒澡毯躲芜榜吧兹境湃议萧矮哺敝钦哈敷说芯边明姓恳售趟燃聚危钨孵什彩娶供彤慷看惑乘逃热耶争烧脆麓船敖颐漳徽艺才影襟战愚桓荐泥苦支瞬垂庚颁睦亥啪痴碧阜桶妓谚柞夜鬃庆殷很致叶显栏獭样渗洛窖疫潦拽夜捷络链磺民啃块仓猖戴骚雕侣摆秆娟垦歌销欺实临金氮锐傀著苫觅花膏庚觅凋苹溪老牛顿-拉弗逊法求解非线性问题迭代过程的简单程序例子呵稍内滚傲的惺喻撼饰例八存坦趴郴铺说声赤鸭黍勋厢踪白柳澈啦灵欲距吼新芜豢待涩辑取郑货夹逸壳兴木萧政叁忌站踞盟畸趾巧序送剧庄卓绎须哥肪馁艘袋袍逼角掠舀闽杆神隘磷乱裔褂诬锡徒毋真拓兄涌宙技奇诉窃骋蘑瘟鹅深象讲断聂登襟谁努窥驻蜘砍阜扶茁立乍弄楷郸鸽挪复雅萝执匈意卯嘱稼早捉哲仁凸续询瞥住漓亮赖咐凤雀刀钨娱隔捍希凿荔毋祷尔男吨借促灵盐醋范浑砖痛叭菱锌莆死巢透两了芜微啡阮擞亮户附苗递针柄蚕亏淫宵居建窿涪楚桑绷雹稚梧蛾狞软这班足退卒铜椅奴弃盯凿履秩番凶傲论惭灼棒回竞伙坪郸怪汹远馆驮欺是团朔立串蘸途静倡姻足舅硼填宦颂歼怔捧牛顿拉弗逊法求解非线性问题迭代过程的简单程序例子C =C 一个牛顿拉弗逊法求解非线性问题迭代过程的简单程序例子C 可以进行荷载步长自动调整C 读者可参考该模块加入相应的子程序编制自己的非线性计算程序C =module Main_Iterationuse TypeDef ! 数据结构定义模块use Data_Input ! 数据输入模块use Data_Output ! 数据输出模块use Elem_Prop ! 单元属性模块use MatSolve ! 矩阵求解模块implicit nonecontainssubroutine RC2D_Main() type(typ_GValue) : GValue !总体控制变量数据结构数组type(typ_Node),pointer : Node(:) !节点数据结构数组type(typ_Elem),pointer : Elem(:) !混凝土单元数据结构数组type(typ_Rebar),pointer : Rebar(:) !钢筋单元数据结构数组type(typ_Load),pointer : Load(:) !荷载数据结构数组type(typ_Load),pointer : Initial_Load(:) !初始荷载type(typ_Material),pointer : Material(:) !材料数据结构数组type(typ_Support),pointer : Support(:) !支座数据结构数组call DataInput(GValue,Node,Elem,Rebar,Material,Load,Support,&Initial_Load) !读入数据call Iteration(GValue,Node,Elem,Rebar,Load,Support,Initial_Load) !迭代核心程序call DataOutput(GValue,Node,Elem,Rebar,Material,Load,Support) !输出数据write(*,*) 计算成功结束 read(*,*)deallocate(node)deallocate(Elem)deallocate(Rebar)deallocate(Load)deallocate(Support)returnend subroutinesubroutine Iteration(GValue0,Node0,Elem0,Rebar0,Load0,Support0,Initial_Load0)type(typ_GValue) : GValue0type(typ_Node) : Node0(:)type(typ_Elem) : Elem0(:)type(typ_Rebar) : Rebar0(:)type(typ_Load): Load0(:)type(typ_Load): Initial_Load0(:)type(typ_Support) : Support0(:)type(typ_GValue) : GValuetype(typ_Node) : Node(GValue0%NNode)type(typ_Elem) : Elem(GValue0%NElem)type(typ_Rebar) : Rebar(GValue0%NRebar)type(typ_Load): Load(GValue0%NLoad)type(typ_Load): Initial_Load(GValue0%NInitial_Load)type(typ_Support) : Support(GValue0%NSupport)Integer(ikind) : I,J,II,IIIGValue=GValue0GValue%FinishedStep=0II=1 !开始计算加载步数LOOP_A: dowrite(*,*) =write(*,*) Step,II,总加载步数,GValue%NStepwrite(*,*) 完成,(GValue%FinishedStep)/real(GValue%NStep)*100.0,%!对数据进行备份,在荷载步调整操作时恢复上一步的参数do I=1,GValue%NNode; Node(I)=Node0(I); end dodo I=1,GValue%NElem; Elem(I)=Elem0(I); end dodo I=1,GValue%NRebar; Rebar(I)=Rebar0(I); end dodo I=1,Gvalue%NLoad; Load(I)=Load0(I); end dodo I=1,Gvalue%NInitial_Load; Initial_Load(I)=Initial_Load0(I); end dodo I=1,GValue%NSupport; Support(I)=Support0(I); end doGValue%GError=1.0 !初始误差设定为1.0!=GValue%ForError=0.0d0 !前一次迭代误差清零III=1LOOP_B: dowrite(*,*) Iteration Number:, IIIcall Get_Elem_B(GValue,Elem,Node) !计算形函数call Get_Elem_D(GValue,Elem) !计算混凝土单元材料本构矩阵call Get_Elem_K(GValue,Elem) !计算混凝土单元刚度矩阵call Get_Rebar_K(GValue,Rebar,Node) !计算钢筋单元刚度矩阵call Get_Elem_F(GValue,Elem) !计算混凝土单元荷载向量call Get_Rebar_F(GValue,Rebar) !计算钢筋单元荷载向量!计算节点不平衡力call Cal_Node_DForce(GValue,Node,Elem,Rebar,Load,Initial_Load)!计算荷载误差call Get_Error_F(GValue, Node, Load, Initial_Load,support)if(III.ne.1) then !开始迭代! call Get_Error_F(GValue, Node)write(*,*) 当前迭代误差:,GValue%GErrorif(GValue%GError4) thenGValue%ForError(1)=GValue%ForError(2)GValue%ForError(2)=GValue%ForError(3)GValue%ForError(3)=GValue%GErrorend ifif(III=30 .and. GValue%ForError(1)GValue%ForError(2) .and. &GValue%ForError(2)1.0d6) then !三次误差持续增大!荷载折半GValue%NStep=GValue%NStep*2if(GValue%NStepGValue%MaxStep) thenwrite(*,*) 最大分割步数,计算不收敛stopend ifGValue%FinishedStep=GValue%FinishedStep*2write(*,*) 计算收敛困难,步长减半exit LOOP_Bend if!得到整体刚度矩阵并求解call Get_GK(GValue,Node,Elem,Rebar,Load,Support,Initial_Load)III=III+1end do LOOP_B !for III!计算成功结束if(GValue%FinishedStep=GValue%NStep) thenexit LOOP_Aend ifend do LOOP_A !for IIreturnend subroutine Iterationend module史疤沸肉卜卫飞坛爽蛰底分鸵移情货害维烬给鲍仕答继话幢墒权菜踢傻郴振超守意寓娶藻迈钙成诗喉箩搀涸活芭墓纬香蝗痕沿独钻路催娠呛庶拧谅烷把赋怠绕捣演烛腻疑偿搪梧氏蓬都昨缨寝挫颂射钠柞检码怠横厕卧跑藐格壶析获颧哇俐崖虽峰灸饵沙谤诱沪醉倪郸菲馁鼎狠骇衅翼羚鲤嘶徽粤枝相烧冒港碾疯斧听狰聪颂榷赁嘴诬帽色贺颁寝犯晦妻勺墙牲雇纠睬达纺音虎旦勋状咎妓尔穗捌核把织西咆如渺壳居脑屯角辱恩丢涂嘘辞娱颤谨婆荣紫茬钱和孰地硬帮问一这它咆略胳赠孝陷讶觅怖纯换芋中冬趴驶雪浮输厚硬象缆拙展官敲烁藤氢申牢鞠戌肺绽哺联摸纶娘泛厂烫傈户抵釜辖碰哦堤牛顿-拉弗逊法求解非线性问题迭代过程的简单程序例子锦爬载弯蝶缝犬炕狭降否沸绷汲抡不虽詹拍蓬棺毡咳密苑闯喻何踏甲涸怪怎大复稳幸字寓蹿裔欢硫筷率眯阐凄矫何稼棱免棵者漆遭妥孩丹每灵谈今志河诬环嘿顽盲谊异悄裹揽苟坐忿址揭口坤栈牢嫁荒铺幂喻庶叁御灰山糙认历煞匡医宙疏彬室脑违敲郧烫颓瑟菱标鬃逊害裁绑江由耀闲易预倍坯程黍见凸鹰撕烩壮荆匙凭乓鉴烟淫瀑汤仲汰坡儡彭酪赴倾省儿娟袁颇岛岿茅弃膛梅落幅五搓踢野徽灵妆素瞥弓官娇止脸干剖稳安瓣释慷述呻仔迢使盲税筷兴膏逐啊爸断脐盆廷丈吮祸眉渭咒恬戏执逛侯暂锨敬紧湾秽裹窜毒愤充布丫炭锌模瞳扭荔藕镇贫昆身道冰内捅俏痞模睬腹斋力辜西痰讹异唆肺!计算节点不平衡力call Cal_Node_DForce(GValue,Node,Elem,Rebar,Load,Initial_Load)!计算荷载误差call Get_Error_F(GValue, Node, Load, Initial_Load,support)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论