欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    数值计算课程设计说明书--典型数值算法的C++语言程序设计.docx

    • 资源ID:902965       资源大小:441.28KB        全文页数:54页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数值计算课程设计说明书--典型数值算法的C++语言程序设计.docx

    数值计算课程设计说明书题目:典型数值算法的C+语言程序设计1、课程设计的内容和要求(包括原始数据、技术要求、工作要求等):每人需作10个算法的程序、必做6题、自选4题。对每个算法要求用C+语言进行编程。必选题:1、高斯列主元法解线性方程组2、牛顿法解非线性方程组3、经典四阶龙格库塔法解一阶微分方程组4、三次样条插值算法(压紧样条)用C+语言进行编程计算依据计算结果,用MatIab画图并观察三次样条插值效果。5、龙贝格求积分算法6、M次多项式曲线拟合,据计算结果,用Matlab画图并观察拟合效果。自选题:自选4道其他数值算法题目.每道题目重选次数不得超过5次.2、对课程设计成果的要求(包括图表、实物等硬件要求):2.1 提交课程设计报告按照算法要求,应用C+语言设计和开发算法程序,提交由:每个算法说明;与算法相应的程序设计说明(程序中的主要变量语义说明,变量的数据类型,数据在内存中组织和存储结构说明,各函数模块的主要流程图,函数功能说明,函数的形参说明,函数的调用方法说明);程序调试与实例运行记录(包括程序调试和修改记录、测试结论、运行结果记录),每个算法的源程序代码编入附录构成的课程设计报告。2.2 课程设计报告版式要求目录的要求:居中打印目录二字,(四号黑体,段后1行),字间空一字符;章、节、小节及其开始页码(字体均为小四号宋体)。节向右缩进两个字符,小节及以后标题均向右缩进四个字符。目录中应包含正文部分每个算法章节标题、设计体总结、无序号的“参考文献资料”,目录的最后一项是“附录”正文的要求:算法说明论述清楚,公式符号撰写规范,流程图图符规范,计算正确,文字简练通顺,插图简洁规范,书写整洁。文中图、表按制图要求绘制,程序调试和运行情况记录详实。打印版面要求:A4纸,页边距:上2cm,下2cm,左2.5cm、右2cm;字体:正文宋体、小四号;行距:固定值20;页眉1.5cm,页脚1.75cm;页码位于页脚居中打印;奇数页页眉“数值计算课程设计”,偶数页页眉”具体算法名称”,页眉宋体小5号;段落及层次要求:每节标题以四号黑体左起打印(段前段后各0.5行),节下为小节,以小四号黑体左起打印(段前段后各0.5行)。换行后以小四号宋体打印正文。章、节、小节编号分别以1、1.1、1.1.1格式依次标出,空一字符后接各部分的标题。每一章的标题都应出现在本章首页的第一行上。当课程设计报告结构复杂,小节以下的标题,左起顶格书写,编号依次用(1)、(2)或1)、2)顺序表示。字体为小四号宋体。对条文内容采用分行并叙时,其编号用(a)(b)或a)、b)顺序表示,如果编号及其后内容新起一个段落,则编号前空两个中文字符。曲线图表要求:所有曲线、图表、线路图、流程图、程序框图、示意图等不准徒手画,必须按国家规定标准或工程要求绘制(应采用计算机绘图)。课程设计说明书(报告)中图表、公式要求如下:(a)图:图的名称采用中文,中文字体为五号宋体,图名在图片下面。引用图应在图题右上角标出文献来源。图号以章为单位顺序编号。格式为:图1,空一字符后接图名,比如第1章第5个图是关于高斯列主元法解方程组算法图,图的下方的图号图名应为:图15高斯列主元法解方程组算法图。(b)表格:表的名称及表内文字采用中文,中文字体为五号宋体,表名在表格上面。表号以章为单位顺序编号,表内必须按规定的符号标注单位。格式为:表Ll,空一字符后按表格名称。(c)公式:公式书写应在文中另起一行,居中排列。公式序号按章顺序编号。字体为五号宋体,序号靠页面右侧。格式为:(Ll)o设计体会及今后的改进意见:设计总结要写出算法理解,编程经验等技术性、学术性总结;体会要简洁、真实、深刻,切忌空话、大话,客套话和矫揉造作之词。改进意见要合理、中肯。参考文献的要求:另起一页,居中打印参考文献四字(四号黑体,段前段后1行),字间空一字符;另起一行,按论文中参考文献出现的先后顺序用阿拉伯数字连续编号(参考文献应在正文中注出);参考文献中每条项目应齐全(字体均为小四号宋体)。(格式:编号作者,论文或著作名称.期刊名或出版社.出版时间)。(期刊应注明第几期、起止页数(包括论著)。参考文献中条目要符合科技文献引用文献条目书写的国家标准规范。2.3设计报告装订顺序与规范封面数值计算课程设计任务书目录数值计算课程设计报告正文设计体会及今后的改进意见参考文献(无需加目录序号)附录(无需加目录序号)左边缘装订3、课程设计工作进度计划:时间设计任务及要求第19周编写和调试程序并按要求撰写设计报告1高斯列主元法解线性方程组11.1高斯列主元法解线性方程组算法思想11. 2高斯列主元法解线性方程组流程图11.3 高斯列主元法解线性方程组运行结果22牛顿法解非线性方程组31.4 牛顿法解非线性方程组算法思想31.5 牛顿法解非线性方程组流程图42. 3牛顿法解非线性方程组运行结果52.4牛顿法解非线性方程组手工计算63经典四阶龙格库塔法解一阶微分方程73.1 经典四阶龙格库塔法解一阶微分方程算法思想73.2 经典四阶龙格库塔法解一阶微分方程流程图103.3 经典四阶龙格库塔法解一阶微分方程运行结果114三次样条插值算法124.1 三次样条插值算法算法思想124.2 三次样条插值算法流程图134.3 2三次样条插值运行结果134.3三次样条插值MATLAB画图145龙贝格求积分算法155.1龙贝格求积分算法思想155.2龙贝格求积分算法流程图165.3龙贝格求积分算法运行结果176M次多项式拟合186.1 M次多项式拟合算法思想186.2 M次多项式拟合流程图186.3 3M次多项式拟合运行结果196.4 M次多项式拟合MATLAB画图196.5 M次多项式拟合运行手工计算207最小二乘法进行线性拟合217.1 最小二乘法进行线性拟合算法思想217.2 最小二乘法进行线性拟合流程图217.3 2最小二乘法进行线性拟合运行结果227. 3最小二乘法进行线性拟合手工计算228波尔查诺二分法解方程237.1 波尔查诺二分法解方程算法思想237.2 波尔查诺二分法解方程的流程图248. 3波尔查诺二分法解方程的运行结果249. 4波尔查诺二分法解方程的手工计算259LU分解法解线性方程269.1 LU分解法解线性方程的算法思想269.2 LU分解法解线性方程的流程图279.3 LU分解法解线性方程的运行结果279.4 LU分解法解线性方程的手工计算2810霍纳方法求多项式2910.1霍纳方法求多项式的算法思想2910.2霍纳方法求多项式的流程图3010.3霍纳方法求多项式的运行结果3010.4霍纳方法求多项式的手工计算30设计体会及今后的改进意见31参考文献32附录331高斯列主元法解线性方程组源代码332牛顿法解非线性方程组353经典四阶龙格库塔法解一阶微分方程组源代码385三次样条差值(MATLAB画图)代码416龙贝格求积分源代码427M次多项式拟合源代码448最小二乘法进行线性拟合源代码469波尔查诺二分法解方程源代码4710LU分解法解线性方程源代码4811霍纳方法求多项式源代码501高斯列主元法解线性方程组问题提出:求解线性方程组x1+2x2+x3+4x4=132xl+Ox2+4x3+3x4=284x1+2x2+2x3+x4=20-3x1+x2+3x3+2x4=61.1 高斯列主元法解线性方程组算法思想1)将线性方程组写成增广矩阵的形式;2)对增广矩阵进行行变换,对元素为,在第i列中及以下的元素选取绝对值最大的元素,将所有元素中最大的所在的行与第i行交换,然后采用高斯消元法使得新得到的为第i行以下的元素均为零。一直重复上述过程直到从而得到上三角矩阵。3)对上三角矩阵进行回代求解,即可以得到方程组的解。1.2 高斯列主元法解线性方程组流程图Start输入增广矩阵高斯列主元法变换为上三角矩阵图1-1高斯列主元法流程图1.3高斯列主元法解线性方程组运行结果图1-2高斯列主元法程序运行界面图2牛顿法解三曲届程组问题提出:求解非线性方程组0=f9y)=2-2x-y+0.50=f2(x9y)=x2+4y2-4设初值(Po,%)=(1.2,1.2),用牛顿法计算(1,夕),(2,%),(小,%)。2.1牛顿法解非线性方程组算法思想前提:设已知1)计算函数F(P)=f(Pk4)(2-1)2)计算雅可比矩阵、a、三工(P人,/)f(Pkk(一、xy(2-2)JW=A;客人(04)7人3,%)xoy3)求线性方程组J(K)Ap=F(E)(2-3)的解"。4)计算下一点(2.4)÷1=+P重复上述过程,直到达到要求的精度,停止计算。2.2牛顿法解非线性方程组流程图图2T牛顿法解非线性方程组流程图2.3牛顿法解非线性方程组运行结果''D:实验附件DebugniJI611D:实睑附件DebugciII向1第3次迭代开始向量函数的因受量向量是:3.09372e-0053.75674e-005雅可比矩阵是:1.80138-13.801382.4897开始计算雅可比矩阵的逆矩阵:1.80138-1103.801382.4897011.80138-110-1.21603e-0074.59996-2.11021.80138-2.23648e-0080.54124-1.21603e-0074.59996-2.11021-1.24153e-0080.3004610.1-1.21603e-0071-0.4587560.雅可比矩阵的逆矩阵:0.3004610.120681-0.4587560.217393近似解向量:1.900680.311219nr图2-2牛顿法解非线性方程组程序运行图2.4牛顿法解非线性方程组手工计算求解非线性方程组O=fi(x9yy)=X2-2x-y+0.5O=启x,y)=/+4y24设初值(PO,%)=(1.2,1.2),用牛顿法计算(PlM),E,%),(3,%)。函数向量和雅克比矩阵为尸(,y)=-2x-y+0.5X2+4y2-4,J(,y)=2x-2-I-2xSy(2-5)在点(2.00,0.25)处的函数值为尸(2.00,0.25)=0.250.25,(2.00,0.25)=-2.0-1.04.02.0(2-6)由牛顿法可得出下面的线性方程组"2.0-1.0"P0.25解得p=P-0.09375-(2-7)4.02.0Sl_0.25Sl.0.0625迭代得190625-1.90069-1.900677-(2-8)p1=po+p=0.3125,P2=0.311213n=0.311219手工计算与程序运行结果一致。3经典四阶龙格库塔法解一阶微分方程问题提出:求解线性微分方程,2xV=VVc=o,b=°J(O)=I3.1 经典四阶龙格库塔法解一阶微分方程算法思想龙格-库塔法的基本思想是:用/Q,y)在几个不同点的数值加权平均来代替/(七十/与(七+的)的值,而使截断误差的阶数尽可能高。我们用四个不同点上的函数值的线性组合,将精度提高到四阶就可以得到四阶龙格-库塔公式。常用的标准四阶龙格-库塔公式为:%M+*+劣+次*),h,/(XJ,乂+:姑)(3-1)%/(/+:九”+5址2)A*(*.+a*3)3.2经典四阶龙格库塔法解一阶微分方程流程图图3T四阶龙格库塔法程序流程图3. 3经典四阶龙格库塔法解一阶微分方程运行结果IC:Docu三entsandSettingsAd>inisraorDebugCpp1.exe*-|口1×用四阶龙格-库i0010.120.230.340.450.560.670.780.890.9101Pressanykey苔方法11.096571.19111.288941.394041.509691.638741.78371.9468?2.130412.33643tocontinue.图3-2四阶龙格库塔法程序运行界面4三次样条插值算法问题提出:求三次紧压样条函数曲线,经过(0,0),(1,0.5),(2,2.0),(3,1.5),且一阶导数的边界条件为S(O)=O.2和S'(3)=-14.1三次样条插值算法算法思想设(%,%),。有N+1个点,其中=/<x<<仆=8。如果存在N个三次多项式S式幻,系数为Sg,sk,1,Sy和Sk,3,满足如下性质:S(X)=Sk(X)=%。+%(x-xk)+%2(x-)2+%3(X一%)3(4_1)xx,xjt+1=O,1,.-1(4-2)S(X«)="A:=0,1,.JVSD=SZDZ=OJN_2(43).(4-4)SD=SAlD&=S"(x+1)=S+1)A:=0,l,.-2(4-5)则称函数S(X)为三次样条函数。引理:紧压样条f÷21INnl+hym2=W1-3(J0-S(x0)(4-6)%一1+2(矶+hk)mk+%/川=以,其中k=2,3,N-2(4-7)hf426N-2+2hn-2+20ntrnN-=uN-I3(S(XN)-"NT)(4-8)4. 2三次样条插值算法流程图图4T三次样条插值程序流程图4.三次样条插值运行结果图4-2三次样条差值运行界面图4.3三次样条插值MATLAB画图图4-3三次样条差值MATLAB画图5龙贝格求积分算法问题提出:用龙贝格积分计算5.1龙贝格求积分算法思想将a,b依次作20,21,22,.等分,记按复合梯形公式(xXv4"(XO)+)+运/U)(5-2)aLf=算得的值相应的记为"叫“二°J2;按式S4712m-Tm=4-1(5-3)算得的S2m依次记为TF)M二°2,而这每个S2m又理解为由T2m与Tm的线性组合得到的改进值,即_rr(k)年幻=_2o_3-,k=0,l,2,.(5-4)41按照类似的方法不断改进,可得到龙贝格积分表。表5T龙贝格积分表JR(J,0)梯形公式R(JU)辛普森公式R(J,2)布尔公式OR(0,0)1R(l,0)R(l,1)2R(2,0)R(2,1)R(2,2)5.2龙贝格求积分算法流程图End图57龙贝格积分程序流程图5.3龙贝格求积分算法运行结果图5-2龙贝格求积分算法运行界面图6M次多项式拟合问题提出:根据4个数据点(-3,3)(0,1)(2,1)(4,3),求解最小二乘抛物线。6.1 M次多项式拟合算法思想本算法基于最小二乘原理来通过数据点(x%'VJL来构造M解最小二乘多项式C/、2M-MPW=Ci+C2x÷C3X+÷CwX+Cf÷Xo(6.1)以M=2为例考虑求解最小二乘的抛物线拟合。设(Z"QZ有N个点,横坐标的确定的。最小二乘抛物线的系数表示为y=U)=Ar2+B+C(6-2)求解A,B,C的线性方程组为fN(N(NN,-+b+C=SyXA=I/Ar=I/三1/三1(N(N(NN(6-4)E4+jB+c=yIjI=I)k=V=)Ji=IA-÷EXkB+NC=£八65)Jt=I/k=Jt=I6.2 M次多项式拟合流程图图6T多项式拟合程序流程图6.3 M次多项式拟合运行结果图6-2M次多项式拟合运行界面图6.4 M次多项式拟合MATLAB画图»x=-4:0.0001:5;»y=(0.178642.*x.*x)-(0.192495.*x)+0.850519;»plot(x,y,r,)6.5 M次多项式拟合运行手工计算根据4个数据点(-3,3)(0,1)(2,1)(4,3),求解最小二乘抛物线。由曲线拟合得表67M次多项式拟合数据Xk九2Xk34XkS九2XkK-339-2781-9270100000214816244316642561248382945353379由表中数据可得线性方程组'353。+45"29c=79<45。÷29b+3c=529。+3Z?+4c=8解方程组得a=O784628=-0.192495,c=0.850519手工计算与程序运行结果一致。万最小二乘法进行线性拟合问题提出:给定数据(-IJO),(0,9),(1,7),(2,5),(3,4),(4,3),(5,0)(6,-1),求其最小二乘线性拟合曲线。7.1最小二乘法进行线性拟合算法思想设采集到一组N个(冷凹)样本数据,对这组数据进行)'=r+b线性拟合,求出拟合(。,)值。e"=Z-(阴+b)F(71)由每个样本数据做误差求和计算:,err值由(凡价值确定,因此,误差和分别做偏微分计算,当每个偏微分值为0时,误差和最小。故有:err _ yj-(axi +Z?)"dada=-2 (Z % - x: - 吃 M = 03ez _ 3y -(电 +b)fbb=-2(ZyLaEXNb)(7-2)(7-3)根据每个偏微分等于零,可以得到两个关于。力的一次方程,求解该方程即可以分别得到力的值。7. 2最小二乘法进行线性拟合流程图图7-1最小二乘进行线性拟合流程图最小二乘进行线性拟合7.2 最小二乘法进行线性拟合运行结果图7-2最小二乘进行线性拟合运行界面7.3 最小二乘法进行线性拟合手工计算可以得到表如下:表7T最小二乘法线性拟合数据五2XkXkyk-1101-10090017172541034912431612502506-136-620379225由表可得下列方程组92«+20/?=2520a+8Z>=37解线性方程组得到a=-1.60174,/?=8.64285手工计算与程序运行结果一致。8波尔查诺三分注解方程问题提出:用二分法求解函数/(x)=22+5x-3在区间(0,2)的根,要求精确到10-3。8.1波尔查诺二分法解方程算法思想对于函数f(X),如果存在实数C,当X=C时,若f(c)=0,那么把X=C叫做函数f(X)的零点。解方程即要求f(x)的所有零点。假定f(x)在区间(X,y)上连续,先找到属于区间(x,y)的a、b,使f(a),f(b)异号,则说明在区间(a,b)内一定有零点。现在假设f(明<O,f(b)>O,a<b,然后求f(a+b)2°如果f(a+b)2=0,该点就是零点;如果f(a+b)2<0,则可确定在区间(a+b)2,b)内有零点,若(a+b)2>a,则从(a+b)2,b)继续使用中点函数值判断;如果f(a+b)2>0,则在区间(a,(a+b)2)内有零点,若(a+b)2<b,从(a,(a+b)2)开始继续使用中点函数值判断。通过二分法可将区间内的端点逐步逼近零点,直到得到一个任意小的包含零点的间隔。波尔查诺二分法解方程8.2波尔查诺二分法解方程的流程图图8T波尔查诺二分法流程图8.3波尔查诺二分法解方程的运行结果图8-2波尔查诺二分法运行界面图8. 4波尔查诺二分法解方程的手工计算求方程f(x)=2x2+5%-3在区间(0,2)内的根,要求用三位小数位计算,精确至410-3。解:这里=O,b=2取区间(0,2)的中点Xo=g(0+2)=l由于f(0)二一3v0,/(l)=4>0,则令4=0,Z?=1得到新的有根区间(0,1),对此区间再取中点x1=1(0+1)=0.5计算/(0.5),因为/(0.5)=0所以函数的解为x=0.5°手工计算与程序运行结果一致,则程序正确且运行结果也正确。9LU分解法解线性方程问题提出:利用LU分解法求解方程:x÷2x2+4x3+x4=212x1+8x2+6x3+4x4=523x1+1Ox2÷氏+8匕=794X1+1Ix2+1Ox3+6x4=829.1 LU分解法解线性方程的算法思想LU分解法:uIj=ajj=12几(9-1)Iil=%/wI!i=2,3(9-2).%=4j-L4i=1,2左一1;j=AM+l,k;(9-3)k=2,3,nIik=(4-Z4产川)/ukky=l,2,-l;i=m,(9-4)y=''一4%J=l,2,-l;r(9-5)k=2,3Xn="/,Xk=(yk-MQihkj=k,k+l,n设线性方程AX=B的系数矩阵A存在三角分解,则线性方程组可表示为LUX=8。首先对方程LY=8求解Y,然后根据UX=Y求解X,X即为方程的解。9.2LU分解法解线性方程的流程图图9TLU分解法解线性方程流程图9.3LU分解法解线性方程的运行结果图9-2LU分解法解线性方程运行界面9.4LU分解法解线性方程的手工计算首先求解Ly=3:M=212%+-2=523%+%+K=794%+y2+2%+以=82得到值弘=21,%=I。,%=6,M=-24接下来表示方程组UX=Y为:x1+2x2+4x3+x4=214x2-2x3+2x4=10-2x3+3x4=6-6x4=-24利用回代求解可得到值=4,/=3,凡=Z3=1。经手工验证结果与程序运行结果一致。10霍纳方法求多项式用霍纳方法求P(3),其中多项式P(x)=-6x4+8x2+4x-40.10.1 霍纳方法求多项式的算法思想一般地,一元n次多项式的求值需要经过n(n÷l)/2次乘法和n次加法,而秦九韶算法只需要n次乘法和n次加法。在人工计算时,一次大大简化了运算过程。特别是在现代,在使用计算机解决数学问题时,对于计算机程序算法而言秦九韶算法可以以更快的速度得到结果,减少了CPU运算时间。把一个n次多项式/(x)=allxn+anxn iiimC ctU cl * <Aft-A9i >1 ft 0 -6 1+1x+a0(10-1)改写成如下形式(10-2)f(x)=anxn+anx,i+4=(anxnl+an_xn2+-a2x+ai)x+a0(Io-3)(10-5)=(,d"2+alxn-3+%x+4卜+%卜+%(io.4)=(/+_JX+%一2)x+%卜+即求多项式的值时,首先计算最内层括号内一次多项式的值,即%二QaVi=QMX+0*I(10-6)(10-7)然后由内向外逐层计算一次多项式的值,即力二ViX+%,内二为x+0*a(10-8)(10-9)(10-10)%=LiX+的这样,求n次多项式f(x)的值就转化为求n个一次多项式的值。霍纳方法求多项式10.2 霍纳方法求多项式的流程图图10-1霍纳方法求多项式的流程图10.3 霍纳方法求多项式的运行结果j、*C三Dno三mt«s<SoTTii>-r<rJSLIftfDnt>ngCppP-nco'设计体会及今后的改进意见这次课程设计使我对常用的数值算法有了更深入的了解。在上课期间,由于理论知识比较空泛、抽象,对于常用的算法没有理解透彻。所以,这次课程设计对我的帮助很大,通过编程更深一步加深对算法的理解与掌握,提高了我的上机实践能力。让我认识到老师常说的一句话“只会用手工计算是万万不够的,必须学会如何用程序实现J在实验的编程过程中遇到了很大的困惑,由于对算法理论的不熟悉以及C+学习的知识有限,编写的程序少且仅仅是一些小的算法。所以当数值算法与C+语言结合在一起的时候显得有些吃力,课程设计中也存在一定程度的参考成分,但最终还是完成了课设。在这次课程设计编写的10个程序中存在一个问题:有的程序在解决数学问题时,是在程序中录入方程或者数据,而不是在运行界面输入。这样就会导致在更改问题之后,就必须在程序代码中修改,以至于程序存在一定的局限性。这点是需要改进的。通过这次课程设计我深深地体会到数学方法和数学逻辑思维在计算机编程上的重要性,学好编程不仅仅是如何巧妙地实现问题,数学逻辑培养也是不容忽视的。参考文献lJohnH.Mathews,KurtisD.Fink.周璐,陈渝,钱方,数值方法M.译.北京:电子工业出版社,2010.4.2谭浩强.C+程序设计(第二版)M.北京:清华大学出版社,2011.8.3谭浩强.C+程序设计题解与上机指导(第二版)M.北京:清华大学出版社,2011.6.1高斯列主元法解线性方程组源代码ftinclude<iostream>ftinclude<iomanip>ftinclude<cmath>#definem10usingnamespacestd;doubleAmm,bm,Augmm+1;voidequ(doubleAmm,doublebm,doublexm,intn)定义equ函数(inti,il,j,k;doubleAugmm+l,maxele,temp,1,s;for(i=0;i<n;i+÷)for(j=O;j<n;j+)构建增广矩阵AUgAugij=Aij;Augin=bi;)COUt<<"检查Aug构造是否正常”<<endl;输出增广矩阵Augfor(i=0;i<n;i+)for(j=0;j<n+l;j+)cout<<Augij<<,z"求主元cout<<endl;for(il=0;il<n-l;il÷+)maxele=fabs(Augilil);k=il;for(i=il;i<n;i+)if(maxele<fabs(Augiil)(maxe1e=fabs(Augiil);k=i;)for(j=il;j<n+l;j+)换行temp=Augilj;Augilj=Augkj;Augkj=temp;)COUt。检查选主元以及换行操作是否正确Gencl1;输出增广矩阵Augfor(i=0;i<n;i+)for(j=0;j<n+l;j÷+)cout<<Augij<<,zcout<<endl;for(k=il÷l;k<n;k+)消元l=-AugkilAugilil;for(j=il;j<n+l;j+)Augkj=Augkj+l*Augilj;COUt<X”检查消元操作是否正确"<<endl;输出Augfor(i=0;i<n;i+)for(j=0;j<n+l;j+)cout<<Augij«*”;cout<<endl;xn-l=Augn-lnAugn-ln-l;回代求解for(i=n-2;i>=0;i=i-l)s=0;for(j=i+l;j<n;j+)s=s+Augij*xj;xi=(Augin-s)Augii;)intmain()定义主函数i11ti,j,n,z;doubleAmm,bm,xm;COUt请输入未知量的个数n,z<<endl;cin>>n;if(n>m)cout<<”问题规模太大,需要修改源程序中符号常量m的定义。endl;CoUt<<”请输入系数矩阵Azz<<endl;for(i=0;i<n;i+)for(j=0d<nj+)cin>>Aij;COUt请输入bz,<<endl;for(z=0;z<n;z+)cin>>bz;equ(,b,x,n);调用equ函数for(i=n-l;i>=0&&i<n;i)cout<<z,zz<<i<<,z=,z<<xi<<endl;returnO;2牛顿法解非线性方程组ftinclude<iostream>ftinclude<cmath>SdefineN2#defineEpsilonO.OOOl#defineMax100usingnamespacestd;constintN2=2*N;intmain()(voidff(floatxxN,floatyyN);voidffjacobian(f1oatxxN,floatyyNN);voidinv_jacobian(floatyyNN,floatinvNN);voidnewdundiedai(floatx0N,floatinvNN,floatyON,floatxlN);floatxON=2.0,0.25,yON,jacobianNN,invjacobianNN,xlN,errornorm;inti,iter=0;/for(i=0;i<N;i+)/cin>>xi;CoUt<<”初始近似解向量:"<<endl;for(i=0;i<N;i+)cout<<xOi<<,z"cout<<endl;do(iter=iter+l;COUt<X"第,<<iter<<z,次迭代开始"<<endl;ff(x,y);调用函数ffffjacobian(xO,jacobian);调用函数ffJacobianinv_jacobian(Jacobian,invjacobian);调用函数newdundiedai(x,invjacobian,y,xl);调用函数errornorm=0;for(i=0;i<N;i+)errornorm=errornorm+fabs(xli-i);if(errornorm<EpsiIon)break;达到精度要求for(i=0;i<N;i+)xi=xli;while(iter<Max);returnO;)voidff(floatxxN,floatyyN)floatx,y;inti;x=xx0;y=xxl;yy0>x*-2*-y+0.5;/fl(x,y)的表达式yyl>x*x+4*y*y-4;/f2(x,y)的表达式COUt<<"向量函数的因变量向量是:zz<<endl;for(i=0;i<N;i+)cout<<yyi<<,zcout<<endl;cout<<endl;voidffjacobian(floatxxN,floatyyNN)(floatx,y;inti,j;x=xx0;y=l;/jacobianhaven*nelementyyO0=2*x-2;/fl(x,y)对X的偏导yyO1=-1;fl(x,y)对y的偏导yyl0=2*x;/f2(x,y)对X的偏导yyll=8*y;/f2(x,y)对y的偏导

    注意事项

    本文(数值计算课程设计说明书--典型数值算法的C++语言程序设计.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开