数值分析-课程设计new_第1页
数值分析-课程设计new_第2页
数值分析-课程设计new_第3页
数值分析-课程设计new_第4页
数值分析-课程设计new_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

PAGE郑州轻工业学院《数值分析》课程设计报告题目:非线性方程求解姓名:赵尉尉院(系):数学与信息科学系专业班级:信科10-01学号:541010010155指导教师:汪远征时间:2013年1月07日至2013年1月14日II摘要本文运用C语言分别编制了用一般迭代法、牛顿法、弦截法求解方程的计算机程序,该程序可以控制运算精度,并可以计算任意一元3次函数。成功运行并计算出了符合要求的计算结果,并就计算结果分析它们的特点。目录摘要 I目录 II1理论基础 1简单迭代法 1牛顿法 1弦截法 22 算法分析 32.1功能分析 32.2算法分析 3简单迭代法 3牛顿法 4弦截法 43程序设计 53.1选单和主窗口设计 5输入精度及函数的界面 5主选择界面 5主选择界面代码 53.2模块设计 6程序源代码 64总结 105参考文献 11PAGE111理论基础简单迭代法:首先将方程化为一个与他同解的方程 (1)其中为x的连续函数。即如果数使,则也有;反之,若,则也有.任取一个初始值,代入(1)的右端,得到,将代入(1)右端得,以此类推,得到一个数列其一般表示形式为 (2)(2)式即为求解非线性方程的简单迭代法,称为迭代函数,称为第k步的迭代值或简称迭代值。如果由迭代格式产生的数列收敛于,则就是方程(1)的根,既有牛顿法:用迭代法解非线性方程时,不管非线性方程的形式如何,总可以构造作为方程求解的迭代函数。因为而且在根附近越小,其局部收敛速度越快,故可令若(即不是的重根),则故可取,带入,可得.设方程的根为,且,则迭代法至少是平方收敛,并称为Newton迭代法。弦截法:由于Newton法带有的导数,使用起来不太方便。为了不求导数,可用导数的近似式代替。因为将它代入中,得上式即为弦截法。算法分析2.1功能分析本文运用C语言分别编制了用一般迭代法、牛顿法、弦截法求解方程的计算机程序,该程序可以控制运算精度,并可以计算任意一元3次函数。最后能够成功运行并计算出了符合要求的计算结果。2.2算法分析简单迭代法:初始值初始值输出结果NY牛顿法:初始值初始值输出结果NY弦截法:初始值初始值输出结果NY3程序设计3.1选单和主窗口设计输入精度及函数的界面:主选择界面:主选择界面代码:/*主界面*/ printf("============================\n"); printf("===请选择运算方法===\n"); printf("===1.简单迭代法===\n"); printf("===2.牛顿法===\n"); printf("===3.弦截法===\n"); printf("============================\n");3.2模块设计程序源代码:#include"stdio.h"#include"math.h"#include"windows.h"doublee; //精度doublex0,x1,x2;doublea,b,c,d; //函数ax^3+bx^2+cx+d=0intcount=1;doublef(doublex) //函数f(x){ return(a*x*x*x+b*x*x+c*x+d); }doublefd(doublex) //函数f(x)的微分{ return(3*a*x*x+2*b*x+c); }doublejddd(doublex) //简单迭代法{ x=(-b*x*x-c*x-d)/a; returnpow(x,1.0/3);}intfsimple(){ /* *简单迭代法算法 *调用函数jddd() */ printf("简单迭代法\n请输入一个初值x0:\n"); scanf("%lf",&x0); x1=jddd(x0); //简单迭代的等价迭代式 while((x1-x0)>e||(x0-x1)>e) { count+=1; x0=x1; x1=jddd(x0); } printf("方程的根为:%f",x1); printf("迭代的次数为:%d\n",count); return0;}intfnewt(){ /* *牛顿法算法 *调用函数f()及fd() */ count=1; printf("牛顿法\n请输入一个初值x0:\n"); scanf("%lf",&x0); x1=x0-f(x0)/fd(x0); //牛顿迭代式 while((x1-x0)>e||(x0-x1)>e) { count+=1; x0=x1; x1=x0-f(x0)/fd(x0); } printf("方程的根为:%f",x1); printf("迭代的次数为:%d\n",count); return0;}intfcut(){ /* *弦截法算法 *调用函数f() */ count=1; printf("弦截法\n请输入两个初值x0,x1:(用逗号隔开)\n"); scanf("%lf,%lf",&x0,&x1); x2=x1-(x1-x0)*f(x1)/(f(x1)-f(x0)); //弦截法迭代式 while((x1-x0)>e||(x0-x1)>e) { count+=1; x0=x1; x1=x2; x2=x1-(x1-x0)*f(x1)/(f(x1)-f(x0)); } printf("方程的根为:%f",x2); printf("迭代的次数为:%d\n",count); return0;}intmain(){ intoperat=0; /*输入函数及精度要求*/ printf("===请输入函数及精度要求===\n"); printf("输入精度:(如0.00001)\n"); scanf("%lf",&e); printf("输入函数ax^3+bx^2+cx+d=0的系数a,b,c,d:(如2,0,-1,-1)\n"); scanf("%lf,%lf,%lf,%lf",&a,&b,&c,&d); system("cls"); while(1) { /*主界面*/ printf("============================\n"); printf("===请选择运算方法===\n"); printf("===1.简单迭代法===\n"); printf("===2.牛顿法===\n"); printf("===3.弦截法===\n"); printf("============================\n"); reinput: scanf("%d",&operat); /*判断操作*/ switch(operat) { case1: fsimple(); break; //简单迭代法 case2: fnewt(); break; //牛顿法 case3: fcut(); break; //弦截法 default: //参数有误 printf("输入的参数有误!请从新输入:"); gotoreinput; } printf("按任意键继续……"); getchar(); getchar(); system("cls"); } retu

温馨提示

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

评论

0/150

提交评论