数值计算课程设计..

合集下载

基于MATLAB的实用数值计算课程设计

基于MATLAB的实用数值计算课程设计

基于MATLAB的实用数值计算课程设计1. 简介MATLAB是一款广泛应用于各个领域的数学软件,在数值计算领域尤为突出。

本课程旨在通过MATLAB进行实用的数值计算课程设计,让学生深入掌握MATLAB在数值计算中的应用。

2. 课程目标通过本课程的学习和实践,学生能够掌握以下内容:1.熟悉MATLAB的基本语法和命令。

2.掌握MATLAB在函数拟合、插值、微积分、常微分方程、矩阵计算等数值计算领域的应用。

3.能够使用MATLAB进行数据处理、可视化和报告生成。

4.能够完成一个实用的数值计算课程设计,巩固和提高MATLAB的应用能力。

3. 课程安排第1周:MATLAB基础本周学习MATLAB的基本语法和命令,包括变量定义、数值计算、函数定义和调用等,了解MATLAB的基本应用。

第2周:MATLAB绘图本周学习MATLAB的绘图功能,包括二维图形、三维图形、图形标注和图形导出等,掌握MATLAB的图形处理能力。

第3~4周:函数拟合与插值本周学习MATLAB的函数拟合与插值工具箱,包括线性回归、非线性回归、插值函数的计算和绘制等,掌握使用MATLAB进行函数拟合和插值的方法。

第5~6周:微积分本周学习MATLAB在微积分中的应用,包括数值微积分、微分方程求解和符号计算等,掌握MATLAB处理微积分问题的能力。

第7~8周:常微分方程本周学习MATLAB在常微分方程中的应用,包括初始值问题和边值问题的求解、稳定性分析和最优控制等,掌握MATLAB处理常微分方程问题的方法。

第9~10周:简单矩阵计算本周学习MATLAB在简单矩阵计算中的应用,包括矩阵的定义和计算、特征值和特征向量的求解、矩阵分解和求逆等,掌握MATLAB处理简单矩阵计算问题的方法。

第11~12周:数值优化本周学习MATLAB在数值优化中的应用,包括线性规划、非线性规划和整数规划等,掌握MATLAB进行数值优化的方法。

第13~14周:数据分析与报告本周学习MATLAB在数据分析和报告生成中的应用,包括数据处理、可视化和报告生成等,掌握MATLAB进行数据处理和报告生成的方法。

数值分析(计算方法)课程设计实验报告(附程序)

数值分析(计算方法)课程设计实验报告(附程序)

n=4 时,max[L(X)-h(X)]=0.4020;
n=8 时,max[L(X)-h(X)]=0.1708;
n=10 时,max[L(X)-h(X)]=0.1092。
图象分析: 从图象可以看出随着插值节点数的增加出现异常的摆动,中间能较好的接近 原函数,但两边却出现很大的误差。
(3).对定义在(-5,5)上的函数
程序代码 2:
x=[-1:0.2:1]; y=1./(1+25.*x.^2); x0=[-1:0.01:1]; y0=lagrange(x,y,x0); y1=1./(1+25.*x0.^2);
plot(x0,y0,'--r'); hold on; plot(x0,y1,'-b'); x2=abs(y0-y1); max(x2) ; 程序代码3: n=3; for i=1:n x(i)=cos(((2.*i-1).*pi)./(2.*(n+1))); y(i)=1./(1+25.*x(i).*x(i)); end x0=-1:0.01:1; y0=lagrange(x,y,x0); y1=1./(1+25.*x0.^2); plot(x0,y0,'--r') hold on plot(x0,y1,'-b')
以 x1,x2,„,xn+1 为插值节点构造上述各函数的 Lagrange 插值多项式, 比较其 结果。
设计过程: 已知函数 f(x)在 n+1 个点 x0,x1,…,xn 处的函数值为 y0,y1,…,yn 。 求一 n 次多 项式函数 Pn(x),使其满足: Pn(xi)=yi,i=0,1,…,n. 解决此问题的拉格朗日插值多项式公式如下

《数据计算》教案

《数据计算》教案

《数据计算》教案数据计算是现代教育中非常重要的一部分,教师需要设计好教案来引导学生学习数据计算的相关知识。

本文将从数据计算教案的设计要点、教学方法、案例引导、课堂实践和评估反馈等五个方面进行详细阐述。

一、数据计算教案的设计要点1.1 确定教学目标:教师需要明确教学目标,包括学生应该掌握的数据计算知识和技能。

1.2 设计教学内容:根据教学目标,设计合适的教学内容,包括数据类型、数据处理方法等。

1.3 确定教学方法:结合学生的实际情况和教学资源,确定合适的教学方法,如讲授、实践、讨论等。

二、数据计算教案的教学方法2.1 案例分析法:通过真实案例引导学生学习数据计算的方法和技巧,培养学生的数据分析能力。

2.2 实践操作法:让学生通过实际操作来掌握数据计算的技能,提高学生的动手能力和解决问题的能力。

2.3 合作学习法:组织学生进行小组合作学习,通过互相讨论和合作来解决数据计算问题,培养学生的团队合作意识和沟通能力。

三、数据计算教案的案例引导3.1 实际数据案例:引导学生分析真实的数据案例,如销售数据、调查数据等,让学生将理论知识应用到实际问题中。

3.2 模拟数据案例:设计一些模拟数据案例,让学生通过计算和分析来解决问题,培养学生的逻辑思维和解决问题的能力。

3.3 多样化案例:设计不同类型的案例,包括图表分析、统计计算等,让学生接触到不同形式的数据计算问题,提高学生的综合应用能力。

四、数据计算教案的课堂实践4.1 激发学生兴趣:设计生动有趣的教学内容和案例引导,激发学生学习数据计算的兴趣。

4.2 引导学生思考:通过提问和讨论引导学生思考数据计算问题,培养学生的批判性思维和分析能力。

4.3 实践操作:组织学生进行实践操作,让学生亲自动手进行数据计算,加深学生对知识的理解和掌握。

五、数据计算教案的评估反馈5.1 定期测验:定期组织测验来检验学生对数据计算知识的掌握情况,及时发现问题并进行调整。

5.2 作业评价:对学生的作业进行评价和反馈,指导学生改进学习方法和提高学习效果。

高等数值分析课程设计

高等数值分析课程设计

高等数值分析课程设计一、题目背景高等数值分析是计算数学领域的一门重要课程,它主要研究数值计算中的算法、误差分析、收敛性和稳定性等基本问题,涵盖了线性代数、数值微积分、常微分方程数值解等数学分支学科。

本文将介绍一项高等数值分析课程的设计,以增强学生对课程的理解和能力。

二、设计目标2.1 教学目标本课程设计旨在帮助学生:•掌握常见的数值分析算法;•熟悉各种算法的误差分析和收敛性;•能够独立设计和实现数值计算程序;•培养学生解决实际问题的能力。

2.2 实现目标为了实现教学目标,本课程设计将遵循以下原则:•采用案例分析和实例演示的方式,将数学理论与实际应用相结合;•强调算法的实现方法和效率分析;•通过小组合作的方式完成实践任务,培养学生的团队合作能力;•开设课程论文撰写指导和实践报告撰写指导课程,提高学生的学术写作能力。

三、课程内容本课程的教学安排如下:3.1 理论讲授•数值线性代数•数值微积分•常微分方程数值解•偏微分方程数值解3.2 实践任务•实现线性方程组求解算法•实现求解非线性方程的算法•实现常微分方程数值解算法•实现偏微分方程数值解算法3.3 课程论文和实践报告撰写要求每个学生提交一篇课程论文和一份实践报告,内容包括理论和实践部分。

论文部分主要包括:•算法的理论分析和数学推导;•算法的实现方法和效率分析;•算法的收敛性和稳定性分析。

实践报告部分主要包括:•实践任务的设计和实现方法;•算法实现的过程与结果分析;•算法的应用和实用性分析。

四、教学评估本课程的教学评估主要包括以下几个方面:4.1 学生成绩评估学生成绩评估包括平时分、实验成绩、论文得分和考试成绩。

其中,实验成绩和论文得分占总成绩的比重大于考试成绩。

4.2 教学效果评估教学效果评估将从以下几个方面进行:•学生数学知识的掌握程度;•学生对数值计算的算法和方法的理解程度;•学生的编程能力和算法实现的水平;•学生实践能力和团队协作能力的培养。

化工数值计算与MATLAB课程设计

化工数值计算与MATLAB课程设计

化工数值计算与MATLAB课程设计一、课程背景作为化学工程专业的一门课程,化工数值计算与MATLAB课程设计是一门综合性较强的课程,旨在让学生掌握化工工程中常见的数值计算方法以及MATLAB编程技能,为学生日后从事化工工程工作提供有力的帮助。

二、教学内容本门课程的主要内容包括以下三个方面:1. 常见的数值计算方法这一部分主要介绍化工工程中常用的数值计算方法,包括插值、数值积分、微分方程求解、最小二乘法等。

学生需要掌握这些方法的理论知识和具体应用,能够熟练地运用这些方法解决化工过程中遇到的实际问题。

2. MATLAB编程技能的掌握作为一种强大的计算工具,MATLAB在化工工程中有着广泛的应用。

这一部分主要介绍MATLAB编程语言的基础知识以及一些常见的编程技巧,包括变量、循环、函数、图形输出等。

学生需要通过实践掌握MATLAB编程技能,能够利用MATLAB对化工问题进行编程求解。

3. 化工数值计算与MATLAB综合设计这一部分是本门课程的重点,主要通过一个小型的化工流程仿真设计项目来综合运用前两部分的知识,设计的具体内容需要由教师根据学生实际情况进行调整。

通过这一部分的课程设计,学生能够加深对化工数值计算理论和MATLAB编程技能的理解,提高化工工程问题的解决能力。

三、教学方法本门课程采用理论授课与实践相结合的教学方式。

在理论授课环节,教师主要介绍化工数值计算的理论知识,说明相应的代码实现过程,并举一些实际例子来讲解。

在实践环节,学生需要利用所学知识实现对化工过程的仿真设计。

在实践过程中,教师会提供必要的指导,学生需要通过实践来掌握相应的技能和知识。

四、教学评价为了保证本门课程的教学效果,将采用以下几个方面的考核策略:1. 课堂测试教师会根据课程的重点内容设置相应的测试题目,在测试中检测学生掌握知识的程度。

2. 大作业大作业是本门课程的重要考核方式之一。

学生需要利用所学知识设计并实现一个小型的化工工艺仿真项目,并撰写实验报告。

数值计算课设

数值计算课设

数值计算课设(最新版)目录1.课程简介2.课程目标3.课程内容4.课程安排5.课程评价正文一、课程简介数值计算课设是一门针对计算机科学与技术专业的课程,主要涉及计算机数值计算方法及其应用。

通过本课程的学习,学生可以掌握数值计算的基本原理和方法,提高解决实际问题的能力。

二、课程目标本课程旨在培养学生掌握数值计算的基本理论、方法和技巧,提高学生在计算机科学与技术领域的实际应用能力。

具体目标包括:1.熟练掌握数值计算的基本概念、原理和方法。

2.掌握常用数值计算算法,如代数方程组解法、插值与逼近、数值积分等。

3.能够运用所学知识解决实际问题,提高编程和算法设计能力。

三、课程内容本课程主要涉及以下内容:1.数值计算的基本概念与原理,如误差、截断、舍入等。

2.常用数值计算算法,如高斯消元法、LU 分解、插值与逼近、数值积分等。

3.数值计算在实际问题中的应用,如线性规划、非线性方程组求解等。

4.数值计算的软件实现,如 MATLAB、Python 等工具的使用。

四、课程安排本课程共计 16 周,每周安排一次课,每次课 2 课时。

课程安排如下:1.第 1 周:课程简介与数值计算基本概念2.第 2 周:代数方程组解法3.第 3 周:插值与逼近4.第 4 周:数值积分5.第 5 周:线性规划6.第 6 周:非线性方程组求解7.第 7 周:课程总结与实践案例分析8.第 8 周至第 15 周:课程实践与作业9.第 16 周:课程总结与考试五、课程评价课程评价采用平时成绩与期末成绩相结合的方式,具体比例为:平时成绩占 60%,期末成绩占 40%。

平时成绩包括课堂表现、作业完成情况等;期末成绩主要依据课程实践成果和考试成绩。

《数值分析课程设计》课程教学大纲(本科)

《数值分析课程设计》课程教学大纲(本科)

《数值分析课程设计》教学大纲课程编号:sx080课程名称:数值分析英文名称:Numerical Analysis课程类型:实践教学课程要求:必修学时/学分:1周/I开课学期:4适用专业:数学与应用数学授课语言:中文课程网站:超星泛雅平台一、课程设计性质与任务数值分析课程设计是一门借助计算机实现数值计算方法设计的课程。

通过数值算法基本理论和实现能力的训练,具有利用计算机实现算法的能力,具有分析和优化算法能力;通过查找文献熟悉科学与工程计算问题中的领先的数值算法理论,形成自主学习以及独立设计和运用数值算法解决实际问题的能力。

二、课程设计与其他课程或教学环节的联系先修课程:《数值分析》,《C语言程序设计》后续课程:《数学模型》、《微分方程数值解法》联系:《数值分析》是数值分析课程设计的理论基础,《C语言程序设计》是数值分析课程设计实现工具之一。

数值分析课程设计为《微分方程数值解》的算法实现提供算法基础,为《数学模型》中数学问题的求解提供了一种重要的实现手段。

三、课程设计教学目标1 .通过应用C语言、Matlab等计算机语言,使学生具有编程实现数值算法并解决实际问题的能力;(支撑毕业要求指标点5.1)2.通过基本算法原理的学习与实现,具有优化算法和根据具体问题改进算法的能力;(支撑毕业要求指标点3.3)3.通过查阅资料和应用数值算法解决实际科学问题,形成学生的自主学习意识和有效的学习方法。

(支撑毕业要求指标点12.1)四、教学内容、基本要求与学时分配课程思政元素案例解析:1 .崇尚科学,敢于创新通过从牛顿法到其变形方法这样一个循序渐进的算法改进过程,来向学生阐释什么叫科学研究无止境,从而培养学生的永不满足的科学精神,激发学生努力学习,掌握好知识,敢于创新的精神。

2.热爱祖国,奋发图强在讲授数值积分的梯形公式和辛普森公式时,将会给同学们介绍华罗庚先生写的一本书——《数值积分及其应用》,突出介绍华罗庚先生与王元教授合作在数值积分方法与应用等的研究成果,并同时介绍了华罗庚先生的生平事迹,特别是他放弃美国优越生活条件和良好的科研环境,克服重重困难回到祖国怀抱,投身我国数学科研事业,为中国数学事业发展做出了杰出的贡献,被誉为“人民的数学家”,激发学生的爱国热情。

数值计算课程设计报告(插值法)

数值计算课程设计报告(插值法)

数值计算方法课程设计报告课程设计名称:数值计算方法课程设计题目:插值算法年级专业:信计1302班组员姓名学号:高育坤**********王冬妮1309064044韩建1309064046李婧1309064047 ***师:***完成时间:2015年6月17日插值算法一、问题提出插值法是实用的数值方法,是函数逼近的重要方法。

在生产和科学实验中,自变量x与因变量y的函数y = f(x)的关系式有时不能直接写出表达式,而只能得到函数在若干个点的函数值或导数值。

当要求知道观测点之外的函数值时,需要估计函数值在该点的值。

如何根据观测点的值,构造一个比较简单的函数y=φ(x),使函数在观测点的值等于已知的数值或导数值,进而用简单函数y=φ(x)在点x处的值来估计未知函数y=f(x)在x点的值。

寻找这样的函数φ(x),办法是很多的。

φ(x)可以是一个代数多项式,或是三角多项式,也可以是有理分式;φ(x)可以是任意光滑(任意阶导数连续)的函数或是分段函数;函数类的不同,自然地有不同的逼近效果。

二、背景分析在许多实际问题及科学研究中,因素之间往往存在着函数关系,然而,这种关系经常很难有明显的解析表达,通常只是由观察与测试得到一些离散数值。

有时,即使给出了解析表达式,却由于表达式过于复杂,不仅使用不便,而且不易于进行计算与理论分析。

解决这类问题的方法有两种:一种是插值法插值法,另一种是一拟合法。

插值法是一种古老的数学方法,它来自生产实践,早在一千多年前,我国科学家在研究历法上就应用了线性插值与二次插值,但它的基本理论却是在微积分产生之后才逐渐完善的,其应用也日益增多,特别是在计算机软件中,许多库函数,如 ,cos,sin ex 等的计算实际上归结于它的逼近函数的计算。

逼近函数一般为只含有算术运算的简单函数,如多项式、有理分式(即多项式的商)。

在工程实际问题当中,我们也经常会碰到诸如此类的函数值计算问题。

被计算的函数有时不容易直接计算,如表达式过于复杂或者只能通过某种手段获取该函数在某些点处的函数值信息或者导数值信息等。

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

数值计算课程设计说明书题目:典型数值算法的C++语言程序设计院(系):理学院专业班级:数学1xx学号: xxxx********学生姓名: x指导教师: xxxx2014年7月 6日陕西科技大学数值计算课程设计任务书理学院信息与计算科学/应用数学专业信息12*/数学12* 班级学生:xxx题目:典型数值算法的C++语言程序设计课程设计从2014 年 5 月26 日起到2014 年7 月 6 日1、课程设计的内容和要求(包括原始数据、技术要求、工作要求等):每人需作10个算法的程序、必做6题、自选4题。

对每个算法要求用C++语言进行编程。

必选题:1、高斯列主元法解线性方程组2、牛顿法解非线性方程组3、经典四阶龙格库塔法解一阶微分方程组4、三次样条插值算法(压紧样条)用C++语言进行编程计算依据计算结果,用Matlab画图并观察三次样条插值效果。

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,空一字符后接图名,比如第1章第5个图是关于高斯列主元法解方程组算法图,图的下方的图号图名应为:图1-5 高斯列主元法解方程组算法图。

(b)表格:表的名称及表内文字采用中文,中文字体为五号宋体,表名在表格上面。

表号以章为单位顺序编号,表内必须按规定的符号标注单位。

格式为:表1-1,空一字符后接表格名称。

(c)公式:公式书写应在文中另起一行,居中排列。

公式序号按章顺序编号。

字体为五号宋体,序号靠页面右侧。

格式为:(1-1)……。

设计体会及今后的改进意见:设计总结要写出算法理解,编程经验等技术性、学术性总结;体会要简洁、真实、深刻,切忌空话、大话,客套话和矫揉造作之词。

改进意见要合理、中肯。

参考文献的要求:另起一页,居中打印参考文献四字(四号黑体,段前段后1行),字间空一字符;另起一行,按论文中参考文献出现的先后顺序用阿拉伯数字连续编号(参考文献应在正文中注出);参考文献中每条项目应齐全(字体均为小四号宋体)。

(格式:[编号]作者.论文或著作名称.期刊名或出版社.出版时间)。

(期刊应注明第几期、起止页数(包括论著))。

参考文献中条目要符合科技文献引用文献条目书写的国家标准规范。

2.3 设计报告装订顺序与规范封面数值计算课程设计任务书目录数值计算课程设计报告正文设计体会及今后的改进意见参考文献(无需加目录序号)附录(无需加目录序号)左边缘装订3、课程设计工作进度计划:目录1高斯列主元法解线性方程组 (1)1.1算法说明 (1)1.2算例 (1)1.3程序代码 (1)2牛顿法解非线性方程组 (2)2.1算法说明 (2)2.1算例: (3)2.2程序代码 (5)3经典四阶龙格库塔法解一阶微分方程组 (9)3.1算法说明 (9)3.2算例 (10)3.3程序代码 (10)4三次样条插值算法(压紧样条) (12)4.1算法说明 (12)4.2算例 (12)4.3 C++程序代码 (13)4.4 matlab程序代码 (16)5龙贝格求积分算法 (17)5.1算法说明 (17)5.2算例 (17)5.3 程序代码 (17)6 M次多项式曲线拟合 (18)6.1算法说明 (18)6.2算例 (19)6.3程序代码 (19)7拉格朗日插值解多项式 (22)7.1算法说明 (22)7.2算例 (22)7.3程序代码 (23)8二分法求解非线性方程 (24)8.1算法说明 (24)8.1算例 (24)8.2程序代码 (24)9 不动点迭代 (26)9.1算法说明 (26)9.2算例 (26)9.3程序代码 (26)10复化梯形求积分公式 (27)10.1算法说明 (27)10.2算例 (28)10.3程序代码 (28)11设计体会 (29)参考文献 (30)1高斯列主元法解线性方程组1.1算法说明将线性方程组做成增广矩阵,对增广矩阵进行行变换。

对第1列元素,在第i 行及以下的元素中选取绝对值最大的元素,将该元素最大的行与第i 行交换,然后采用高斯消元法将新得到的消去第i 行以下的元素。

一次进行直到。

从而得到上三角矩阵。

再对得到的上三角矩阵进行回代操作,即可以得到方程组的解。

1.2算例课本99页例3.16,求解方程组的解运行结果如图1-1所示。

图1-11.3程序代码#include<iostream>#include<cmath>using namespace std;const N=20;float a[N][N];int m;62332022428340213424321432143214321=+++-=+++=+++=+++x x x x x x x x x x x x x x x xint main(){ int i,j;int c,k,n,p,r;float x[N],l[N][N],s,d;cout<<"下面请输入未知数的个数m=";cin>>m;cout<<endl;cout<<"请按顺序输入增广矩阵a:"<<endl;for(i=0;i<m;i++){for(j=0;j<m+1;j++)cin>>a[i][j];}for(i=0;i<m;i++){ for(j=i;j<m;j++)c=(fabs(a[j][i])>fabs(a[i][i]))?j:i; /*找列最大元素*/for(n=0;n<m+1;n++){s=a[i][n]; a[i][n]=a[c][n]; a[c][n]=s;} /*将列最大数防在对角线上*/ for(p=0;p<m+1;p++)cout<<a[i][p]<<"\t";cout<<endl;for(k=i+1;k<m;k++){ l[k][i]=a[k][i]/a[i][i];for(r=i;r<m+1;r++) /*化成三角阵*/a[k][r]=a[k][r]-l[k][i]*a[i][r]; }}x[m-1]=a[m-1][m]/a[m-1][m-1];for(i=m-2;i>=0;i--){ d=0;for(j=i+1;j<m;j++)d=d+a[i][j]*x[j];x[i]=(a[i][m]-d)/a[i][i]; /*求解*/}cout<<"该方程组的解为:"<<endl;for(i=0;i<m;i++)cout<<"x["<<i<<"]="<<x[i]<<"\t"; //system("pause");return 0;}2牛顿法解非线性方程组2.1算法说明P已知,第一步计算函数设k⎥⎦⎤⎢⎣⎡=),(),()(21k k k k k q p f q p f P F 第二步计算雅可比矩阵⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡∂∂∂∂∂∂∂∂=),(),,(),(),,()(2211k k k k k k k k k q p f x q p f x q p f y q p f x P J 第三步求线性方程组)()(k k P F P P J -=∆的解P ∆。

第四步计算下一点P P P k k ∆+=+1重复以上过程。

2.1算例:设有非线性方程组(课本137页例3.32)设初始值)25.0,00.2(),(00=q p ,用牛顿法计算),(),,(),,(332211q p q p q p 。

解:迭代3次后的近似解向量为[1.9068,0.311219];具体运行结果如图2-1,2-2,2-3所示。

图2-1 4405.02022-+=+--=y x y x x图2-2 图2-12.2程序代码#include<iostream>#include<cmath>#define N 2 //非线性方程组中方程的个数、未知量的个数#define Epsilon 0.0001 //差向量的上限#define Max 100 //最大迭代次数using namespace std;const int N2=2*N;int main(){void ff(float xx[N],float yy[N]); //计算向量函数的因变量向量yy[N]void ffyakebi(float xx[N],float yy[N][N]);//计算雅可比矩阵yy[N][N]void inv_yakebi(float yy[N][N],float inv[N][N]);//计算雅可比矩阵的逆矩阵inv void newton(float x0[N],float inv[N][N],float y0[N],float x1[N]);//由近似解向量x0求近似解向量x1float x0[N]={2.0,0.25},y0[N],yakebi[N][N],invyakebi[N][N],x1[N],errornorm;int i,iter=0;cout<<"初始近似解向量:"<<endl;for(i=0;i<N;i++)cin>>x0[i];for(i=0;i<N;i++)cout<<x0[i]<<" ";cout<<endl;cout<<endl;do{iter=iter+1;cout<<"第"<<iter<<"次迭代开始"<<endl;ff(x0,y0);ffyakebi(x0,yakebi);inv_yakebi(yakebi,invyakebi);newton(x0,invyakebi,y0,x1);errornorm=0;for(i=0;i<N;i++)errornorm=errornorm+fabs(x1[i]);if(errornorm<Epsilon) break;for(i=0;i<N;i++)x0[i]=x1[i];}while(iter<Max);return 0;}void ff(float xx[N],float yy[N]){float x,y;int i;x=xx[0];y=yy[1];yy[0]=x*x-2*x-y+0.5;yy[1]=x*x+4*y*y-4;cout<<"向量函数的因变量向量是:"<<endl;for(i=0;i<N;i++)cout<<yy[i]<<" ";cout<<endl;cout<<endl;}void ffyakebi(float xx[N],float yy[N][N]) {float x,y;int i,j;x=xx[0];y=xx[1];yy[0][0]=2*x-2;yy[0][1]=-1;yy[1][0]=2*x;yy[1][1]=8*y;cout<<"雅可比矩阵是:"<<endl;for(i=0;i<N;i++)cout<<yy[i][j]<<" ";cout<<endl;}cout<<endl;}void inv_yakebi(float yy[N][N],float inv[N][N]) {float aug[N][N2],L;int i,j,k;cout<<"开始计算雅可比矩阵的逆矩阵:"<<endl;for(i=0;i<N;i++){for(j=0;j<N;j++)aug[i][j]=yy[i][j];for(j=N;j<N2;j++)if(j==i+N)aug[i][j]=1;elseaug[i][j]=0;}for(i=0;i<N;i++){for(j=0;j<N2;j++)cout<<aug[i][j]<<" ";cout<<endl;}cout<<endl;for(i=0;i<N;i++){for(k=i+1;k<N;k++){L=-aug[k][i]/aug[i][i];for(j=1;j<N2;j++)aug[k][j]=aug[k][j]+L*aug[i][j];} }{for(j=0;j<N2;j++)cout<<aug[i][j]<<" ";cout<<endl;}cout<<endl;for(i=N-1;i>0;i--){for(k=i-1;k>=0;k--){L=-aug[k][i]/aug[i][i];for(j=N2-1;j>=0;j--)aug[k][j]=aug[k][j]+L*aug[i][j];}}for(i=0;i<N;i++){for(j=0;j<N2;j++)cout<<aug[i][j]<<" ";cout<<endl;}cout<<endl;for(i=N-1;i>=0;i--)for(j=N2-1;j>=0;j--)aug[i][j]=aug[i][j]/aug[i][i];for(i=0;i<N;i++){for(j=0;j<N2;j++)cout<<aug[i][j]<<" ";cout<<endl;for(j=N;j<N2;j++)inv[i][j-N]=aug[i][j];}cout<<endl;cout<<"雅可比矩阵的逆矩阵是:"<<endl;for(i=0;i<N;i++){ for(j=0;j<N;j++)cout<<inv[i][j]<<" "; cout<<endl;}cout<<endl;}void newton(float x0[N],float inv[N][N],float y0[N],float x1[N]) { int i,j; float sum=0; for(i=0;i<N;i++) {sum=0;for(j=0;j<N;j++) sum=sum+inv[i][j]*y0[j]; x1[i]=x0[i]-sum;}cout<<"近似解向量:"<<endl; for(i=0;i<N;i++)cout<<x1[i]<<" "; cout<<endl; cout<<endl;}3经典四阶龙格库塔法解一阶微分方程组3.1算法说明4阶龙格-库塔方法(RK4)可模拟N=4的泰勒方法的精度。

相关文档
最新文档