文档库 最新最全的文档下载
当前位置:文档库 › 实验二:非线性方程求根(二)

实验二:非线性方程求根(二)

实验二:非线性方程求根(二)
实验二:非线性方程求根(二)

姓名:

学号:

专业班级:

学院:

计算方法(C语言版)实验报告

实验二:非线性方程求根(二)

(第二章)

一.实验目的:

1.熟悉C/C++编程环境

2.掌握非线性方程求根的常用算法:区间二分法、双点弦截法、简单迭代法、

牛顿迭代法等。

3.记录运行结果,回答问题,完成实验报告。

二、实验条件:

Microsoft Visual C++

C-Free

三.实验内容及运行结果:

(一).用简单迭代法X^3-3X-1=0在2附近内的根。

1.源程序:

#include

#include

double f(double x);

int main(void)

{

double epsilon,x0,x1;

long i,maxi;

printf(" Please enter the precision of the x:");

scanf("%lf",&epsilon);

printf(" Please enter the iterative initial valuex0,x1:");

scanf("%lf,%lf",&x0,&x1);

printf(" Please enter the largest number of iterations:");

scanf("%ld",&maxi);

for(i=0;i

{

x0=x1;

if(fabs(x1-x0)<=epsilon)

break;

}

if(i

printf(" The root of equation f(x)=0x=%lf",x1);

else

printf(" The number of iterations is more than upper limit!"); }

double f(double x)

{

return(x*x*x-3*x-1);

}

2.运行结果:

(二).用牛顿迭代法求10的立方根。

1.源程序:

#include

#include

#include

double cbrt_simple(double x);

double cbrt_newton(double a, double x);

int main(void)

{

double x2 =10.0;

printf("%1f& cube root ( really interestin= 2.0)\n", x2);

printf("cbrt: %.20f\n", cbrt(x2));

printf("1/3: %.20f\n", cbrt_simple(x2));

printf("Newton: %.20f\n", cbrt_newton(x2, 10.0));

return EXIT_SUCCESS;

}

double cbrt_simple(double x)

{

return pow(x, 1.0 / 3.0);

}

double cbrt_newton(double a, double x)

{

double e;

do

{

e = (x * x * x - a);

x = x - e;

}

while ( fabs(e) > 1.0e-20 );

return x;

}

2.运行结果:

四、实验总结:

输入程序是必须注意字母大小写,在用C-Free编程时void要替换成int;在非线性方程求根实验中,不同的迭代公式收敛性不同,迭代时需要数据作为初值,不同的序列需要一个参数来区分收敛的快慢,牛顿迭代法收敛速度较快,但重根时收敛较慢。

五、实验教师评语

陕西科技大学matlab实验1 解非线性方程实验

实验1 解非线性方程实验 成绩 实验类型:●验证性实验 ○综合性实验 ○设计性实验 实验目的:进一步熟练掌握解非线性方程二分法算 法、弦截法算法,提高编程能力和解算非线性方程问题的 实践技能。 实验内容:用二分法算法、牛顿迭代法,弦截法算法解算非线性方程,,计算=0的根 实验原理二分法算法 牛顿迭代法 弦截法算法 实验步骤 1 要求上机实验前先编写出程序代码 2 编辑录入程序 3 调试程序并记录调试过程中出现的问题及修改 程序的过程 4 经反复调试后,运行程序并验证程序运行是否 正确。 5 记录运行时的输入和输出。 实验总结 实验报告:根据实验情况和结果撰写并递交实验报告。 参考程序 一.二分法算法 1.建立二分法的函数文件bisect.m function [c,err,yc]=bisect(f,a,b,delta) %Iput - f is the function input as a string 'f'

% -a and b are the left and right end points % -delta is the tolerance %Output -c is the zero point % -yc=f(c) % -err is the error estimate for c ya=feval(f,a); yb=feval(f,b); if ya*yb > 0,return,end max1=1+round((log(b-a)-log(delta))/log(2)); for k=1:max1 c=(a+b)/2; yc=feval(f,c); if yc==0 a=c; b=c; elseif yb*yc>0 b=c; yb=yc; else a=c; ya=yc; end if b-a < delta,break,end end c=(a+b)/2; err=abs(b-a); yc=feval(f,c); 2.建立f(x)=x^2-5的matlab函数文件fff.m function y=fff(x); y=x.^2-5; 3.在命令窗口中准备调用bisect函数的实参 >> a=2; >> b=3; >> delta=0.0001; 4.在命令窗口中调用bisect函数 >> [x,err,yx]=bisect('fff',a,b,delta) x =

matlab实验一:非线性方程求解-牛顿法

实验一:非线性方程求解 程序1:二分法: syms f x; f=input('请输入f(x)='); A=input('请输入根的估计范围[a,b]='); e=input('请输入根的误差限e='); while (A(2)-A(1))>e c=(A(1)+A(2))/2; x=A(1); f1=eval(f); x=c; f2=eval(f); if (f1*f2)>0 A(1)=c; else A(2)=c; end end c=(A(1)+A(2))/2; fprintf('c=%.6f\na=%.6f\nb=%.6f\n',c,A) 用二分法计算方程: 1.请输入f(x)=sin(x)-x^2/2 请输入根的估计范围[a,b]=[1,2] 请输入根的误差限e=0.5e-005 c=1.404413 a=1.404411 b=1.404415 2.请输入f(x)=x^3-x-1 请输入根的估计范围[a,b]=[1,1.5] 请输入根的误差限e=0.5e-005 c=1.324717 a=1.324715 b=1.324718 程序2:newton法: syms f x; f=input('请输入f(x)='); df=diff(f); x0=input('请输入迭代初值x0='); e1=input('请输入奇异判断e1='); e2=input('请输入根的误差限e2='); N=input('请输入迭代次数限N='); k=1; while (k=N fprintf('失败\n') end 用newton法计算方程: 1.请输入f(x)=x*exp(x)-1 请输入迭代初值x0=0.5 请输入奇异判断e1=0.1e-010 请输入根的误差限e2=0.5e-005 请输入迭代次数限N=10 x=0.567143 迭代次数为:4 2.请输入f(x)=x^3-x-1 请输入迭代初值x0=1 请输入奇异判断e1=0.1e-010 请输入根的误差限e2=0.5e-005

非线性方程求根word版

第7章 非线性方程求根 本章主要内容: 1.区间二分法. 2切线法. 3.弦位法. 4.一般迭代法. 重点、难点 一、区间二分法 区间二分法是求方程f(x)=0根的近似值的常用方法。 基本思想:利用有根区间的判别方法确定方程根的区间[a,b] ,将有根区间平分为二;再利用有根区间的判别方法判断那一个区间是有根区间;重复上述步骤,直到小区间端点差的绝对值小于等于精度要求的数值,则用将上一区间的分半值作为方程的根的近似值。 区间二分法的计算步骤如下: 1. 计算区间端点的函数值f(a) , f(b)(不妨设f(a)<0,f(b)>0); 确定初始有根区间[a,b]. 2.二分有根区间[a,b],并计算)2( b a f + 取2 1b a x += 3.判断: 若0)(1=x f ,则方程的根为1x x =* ; 若 0)(1>x f ,则有根区间为[]1,x a x ∈* ;令[]],[,111b a x a = 若 0)(1

12 ln ln )ln(---≥ ε a b n 确定应二分的次数。 例1 用区间二分法求方程0353 =+-x x 在某区间内实根的近似值(精确到0.001) 【思路】参见上述区间二分法的计算步骤 解 ∵f(1.8)=-0.168<0, f(1.9)=0.359>0 ∴f(x)在区间[1.8 ,1.9]内有一个根。 由公式 644.512 ln 001 .0ln 1.0ln 12ln ln )ln(=--=---≥ εa b n 取n=6, 计算结果列表如下: 则方程在区间[1.8,1.9]内所求近似值为x * ≈ x = 1.8328125 区间二分法的优点是计算程序简单,只要f (x )在区间[a,b]上连续,区间二分法就可使用,但区间二分法不能用来求偶次重根,由于区间二分法收敛比较慢,在实际计算中,区间二分法常用来求比较好的含根区间和初始近似值,以便进一步使用收敛更快的迭代法求出更精确的近似值。 迭代序列收敛阶的概念

实验报告二 一元非线性方程的解法..

浙江大学城市学院实验报告 课程名称 科学计算 实验项目名称 一元非线性方程的解法 实验成绩 指导老师(签名 ) 日期 2013/10/10 一. 实验目的和要求 1. 用Matlab 软件掌握求解非线性方程的二分法、迭代法和牛顿法,并对结果作初步分析; 2. 通过实例练习用非线性方程求解实际问题。 二. 实验内容和原理 分析应用题2-1,2-2,2-3,2-4,2-5要求将问题的分析过程、Matlab 源程序和运行结果和结果的解释、算法的分析写在实验报告上。 2-1 程序注释 对用二分法、迭代法和牛顿法求一元非线性方程数值解的Matlab 程序的每一句添上注释。 二分法: [x,n]=BisectionMethod(a,b,epsi,Nmax) 迭代法: [x,n]=IterationMethod(x0,epsi,Nmax) Newton 法: [x,n]=NewtonMethod(x0,epsi,Nmax) 2-2 分析应用题 用二分法求方程2 ()sin 04 x f x x =-=和()sin 0x g x e x =-=根的近似值,使误差不超过210-,输出每次二分之后解的近似结果以及二分的次数,其中()0g x =的根只需求最接近 原点的那个根。 2-3 分析应用题 已知方程230x x e -=有以下三种迭代格式,分析三种迭代格式的收敛性,求出迭代精度为610-的数值结果,并比较迭代序列的收敛速度。

1 )1n x += 2)12ln ln3n n x x +=+ 3)136n n x n n n x n x e x x x e +-=-- 2-4 分析应用题 用下列方法求方程1020x e x +-=的近似根,要求误差不超过31102-?,并比较计算量。 1)在区间[0, 1]上用二分法; 2)取初值0x =,并用迭代过程 12(0,1,2,.......) 10 k x k e x k +-==; 3)取初值00x =用牛顿法求解。 2-5 分析应用题 以定期存储为基础的储蓄帐户的累积值可由定期年金方程确定 [(1)1]n P A i i =+- 在这个方程中,A 是帐户中的数额,P 是定期存储的数额,i 是n 个存储期间的每期利率。一个工程师想在20年后退休时储蓄帐户上的数额达到750000美元,而为了达到这个目标,他每个月能存1500美元。为实现他的储值目标,最小利率应是多少?假定利息是月复利的。 三. 操作方法与实验步骤(包括实验数据记录和处理) 2-1 分析应用题 对用二分法、迭代法和牛顿法求一元非线性方程数值解的Matlab 程序的每一句添上注释。 二分法: [x,n]=BisectionMethod(a,b,epsi,Nmax) Function[c,err,yc]=erfen(f,a,b,delta) Ya=feval(f,a); Yb=feval(f,b); If ya*yb>0,break,end Maxl=1+round((log(b-a)-log(delta))/log(2)); For k=1:max1 C=(a+b)/2; Yc=feval(f,c); If yc = 0 a=c; b=c;

求解非线性方程实验报告

一.实验目的: 通过本节实验课的学习,要求我们理解并掌握二分法、不动点迭代、牛顿切线法及弦截法解非线性方程求根的原理,掌握相应的算法原理,通过计算机解决实验问题 二.实验内容: 1、用对分区间法方程 1-x-sinx=0 在区间[0,1]上的误差小于10^(-4)的一个根,并记录对方区间的次数。 2、用不动点迭代法求解方程下 x-log(x)=2(x>1) 要求相对误差容限e=10^(-8)。 3、用Newton法求方程 x^3-x-1=0 在区间[-3,3]上的误差不大于10^(-5)的根,分别取初值x0=1.5, x0=0, x0=-1进行计算,比较他们的迭代次数。 三. 实验方案(程序设计说明)[包括算法设计思路,必要的流程图,界面设计 说明、使用模块及变量的说明等。] 1、二分法是对区间收索法的一种改进,具体做法为:先求一区间的中点,并计算其 函数值,若恰好有函数值为0,就是方程的根,若不为0,在判断此点的函数值与两端的函数值乘积的情况,取小于0的那个端点在进行上述对分,直到满足要求为止。 2、迭代法分为两种,一种是从任何可取的初值出发都能保证收敛,称之为大范围收 敛的方法。另一类称之为局部收敛法,即为了保证收敛必须选取初值充分接近于所要求的解。迭代法的基本思想是一种逐渐逼近的方法,首先给定一个粗造的初值,然后用一个迭代公式,反复矫正这个初值,直到满足预先给出的精确要求为止。 3、双点弦接法与Newton法不同,两者有本质的区别,它分为两步,不属于不动点 迭代法。 四. 实验步骤或程序(经调试后正确的源程序) (填写主要步骤与程序代码等,不够可附页) 1、f=inline('x+sin(x)-1'); a=0; b=1; dlt=1.0e-4; k=1; while abs(b-a)>dlt c=(a+b)/2; if f(c)==0 break; elseif f(c)*f(b)<0 a=c;

遗传算法解非线性方程组的Matlab程序

遗传算法解非线性方程组的Matlab程序 程序用MATLAB语言编写。之所以选择MATLB,是因为它简单,但又功能强大。写1行MATLAB程序,相当于写10行C++程序。在编写算法阶段,最好用MATLAB语言,算法验证以后,要进入工程阶段,再把它翻译成C++语言。 本程序的算法很简单,只具有示意性,不能用于实战。 非线性方程组的实例在函数(2)nonLinearSumError1(x)中,你可以用这个实例做样子构造你自己待解的非线性方程组。 %注意:标准遗传算法的一个重要概念是,染色体是可能解的2进制顺序号,由这个序号在可能解的集合(解空间)中找到可能解 %程序的流程如下: %程序初始化,随机生成一组可能解(第一批染色体) %1: 由可能解的序号寻找解本身(关键步骤) %2:把解代入非线性方程计算误差,如果误差符合要求,停止计算 %3:选择最好解对应的最优染色体 %4:保留每次迭代产生的最好的染色体,以防最好染色体丢失 %5: 把保留的最好的染色体holdBestChromosome加入到染色体群中 %6: 为每一条染色体(即可能解的序号)定义一个概率(关键步骤) %7:按照概率筛选染色体(关键步骤) %8:染色体杂交(关键步骤) %9:变异 %10:到1 %这是遗传算法的主程序,它需要调用的函数如下。 %由染色体(可能解的2进制)顺序号找到可能解: %(1)x=chromosome_x(fatherChromosomeGroup,oneDimensionSet,solutionSum); %把解代入非线性方程组计算误差函数:(2)functionError=nonLinearSumError1(x); %判定程是否得解函数:(3)[solution,isTrue]=isSolution(x,funtionError,solutionSumError); %选择最优染色体函数: %(4)[bestChromosome,leastFunctionError]=best_worstChromosome(fatherChromosomeGroup,functionError); %误差比较函数:从两个染色体中,选出误差较小的染色体 %(5)[holdBestChromosome,holdLeastFunctionError]... % =compareBestChromosome(holdBestChromosome,holdLeastFunctionError,... % bestChromosome,leastFuntionError) %为染色体定义概率函数,好的染色体概率高,坏染色体概率低 %(6)p=chromosomeProbability(functionError); %按概率选择染色体函数: %(7)slecteChromosomeGroup=selecteChromome(fatherChromosomeGroup,p); %父代染色体杂交产生子代染色体函数 %(8)sonChrmosomeGroup=crossChromosome(slecteChromosomeGroup,2); %防止染色体超出解空间的函数 %(9)chromosomeGroup=checkSequence(chromosomeGroup,solutionSum) %变异函数 %(10)fatherChromosomeGroup=varianceCh(sonChromosomeGroup,0.8,solutionN); %通过实验有如下结果: %1。染色体应当多一些

非线性方程求根问题

计算机学院上机实践报告 一、目的 1.通过本实验,帮助加深对非线性方程求根方法的构造过程的理解; 2.能将各种方法编写为程序并上机实现; 3.比较各种方法在求解同一非线性方程根时,在收敛情况上的差异。 二、容与设计思想 1.用二分法求方程f(x)=x3-2x-5=0在区间[2 , 3]的根。 2.方程f(x)=2x3-5x2-19x+42=0在x=3.0附近有根,试写出其三种不同的等价形式以构成三种不同的迭代格式,再用简单迭代法求根,观察这三种迭代是否收敛。 三、使用环境 1. 硬件环境 微型计算机(Intel x86系列CPU)一台 2. 软件环境 Windows2000/XP操作系统 VC++6.0或其它的开发工具。 四、核心代码及调试过程 1.用二分法求方程f(x)=x3-2x-5=0在区间[2 , 3]的根主要代码: void bisect(double a,double b,int max_B) { double root, ya,yb,yroot; int i,actual_B; ya=f(a);yb=f(b); if(ya*yb>0) { printf("method failed!\n"); exit(0); } for(i=1;i<=max_B;i++) { root=(a+b)/2;yroot=f(root); //取当前含根区间的中点 if(yroot==0) { a=root;b=root;} else if(yb*yroot>0) //取含根区间为[a,(a+b)/2]

{ b=root;yb=yroot;} Else //取含根区间为[(a+b)/2,b] { a=root;ya=yroot;} if(fabs(b-a)b)) { printf("re_select a proper initial value x0!\n"); exit(0); } if(fabs(x1-x0)

实验四非线性方程求根

《数值分析》课程设计实验报告 实验四 非线性方程求根 一、问题提出 设方程3()310f x x x =--=有三个实根**121.8793,0.34727,x x ==- *3 1.53209x =-现采用下面六种不同计算格式,求 f(x)=0的根*1 x 或*2x 1、 2 31x x x += 2、 313 x x -= 3、 x = 4、 213 x x =- 5、 x = 6、 32131()31 x x x x x --=-- 二、实验步骤 #include "stdio.h" #include main() { float x0=1.8793; printf("初值是%f\n",x0);/*输出x0*/ float x1,x2,x3; x1=x0; int i; for(i=1;i<21;i++) { x2=(3*x1+1)/(x1*x1);//第一种迭代方式 //x2=(x1*x1*x1-1)/3;//第二种迭代方式

//x2=pow(3*x1+1,1.0/3);//第三种迭代方式 //x2=1/(x1*x1-3);//第四种迭代方式 //x2=sqrt(3+1/x1);//第五种迭代方式 //x2=x1-(1/3.0)*((x1*x1*x1-3*x1-1)/(x1*x1-1));//第六种迭代方式 x3=x2-x1; printf("第%d 次迭代值为%f,相邻两次迭代值差值为%f\n",i,x2,x3);/*输出x2*/ x1=x2; if(x3<0) x3=-x3; if(x3<0.000001)//误差精度 break; } } 当迭代格式为231x x x +=时,实验结果为 由相邻两次迭代值差值结果可知,迭代过程处于发散状态。 当迭代格式为313 x x -=,实验结果为

实验二 非线性方程求根实验报告

实验报告 学院:电子信息工程 实验课程:计算方法 学生姓名: 学号: 专业班级:通信工程 实验二非线性方程求根 1 目的与要求 (1)进一步熟练掌握求解非线性方程的二分法与Newton迭代法。 (2)掌握二分法与Newton迭代法的算法,能运用程序设计语言和此方法编制软件求出任意指定一元三次方程在给定点附近的根。 2 实验内容 用二分法和Newton迭代法求方程 310 x x --=在 1.5 附近的根,精确到 3 10-,输出每次的迭代结果

并统计所用的迭代次数。 3 实验原理 (1)二分法实验原理 取[a,b]区间二等分的中点x1 =(a+b)/2 (1)若f(x1)=0,则x1是f(x)=0的实根。 (2)若f(a)f(x1)<0 成立,则x* 必在区间(a, x1)内,取a1=a,b1= x1;否则x*必在区间(x1,b)内,则取a1= x1,b1=b,这样,得到新区间[a1,b1],其长度为[a,b]的一半。 (3)如此继续下去,进行n次等分 (2)Newton迭代法实验原理 4 程序设计 (1)流程图 二分法程序流程图

Newton迭代法程序流程图

(2)程序代码 ①二分法求非线性方程根#include #include double fun1(double x) {

return x*x*x-x-1; } double fun2(double x1,double x2) { return (x1+x2)/2; } main() { int n=1; float a,b,c; printf("二分法求非线性方程的根\n"); scanf("a=%f,b=%f",&a,&b); if (fun1(a)*fun1(b)<0) { while(fabs(b-a)>1e-3) { c=fun2(a,b); if (fun1(a)*fun1(c)<0) { b=c;

21实验2 解非线性方程实验

vh 实验 2 解非线性方程实验 专业班级 数学122 学号 姓名 报告日期 2014.4.7 . 实验类型:●验证性实验 ○综合性实验 ○设计性实验 实验目的:进一步熟练掌握解非线性方程的二分法算法、Steffensen 算法、牛顿迭代法,提高编程能力和解算非线性方程问题的实践技能。 实验内容:用二分法算法(取[a,b]=[1,2])、Steffensen 算法(取5.10=x )、牛顿迭代法(取5.10=x )解算非线性方程01)(3=--=x x x f 的根 实验原理 二分法算法实验步骤 Steffensen 算法 牛顿迭代法 1 要求上机实验前先编写出程序代码 2 编辑录入程序 3 调试程序并记录调试过程中出现的问题及修改程序的过程 4 经反复调试后,运行程序并验证程序运行是否正确。 5 记录运行时的输入和输出。 实验思考 试验改变 Steffensen 算法的迭代初值进行计算,试验改变 牛顿迭代算法的迭代初值进行计算,分别对比计算结果并作出分析总结 数学建模与应用:请建立数学模型并应用你的程序解决一个物理计算问题--木质球体浸入水中深度问题。假若球体是由密度为ρ=0.638且半径为r=10cm 的长叶松木质球体构成的,问球体浸入水中深度是多少?又假若球体是由密度为ρ=0.638且三个长半轴分别为a=10cm,b=15cm,c=20cm 的长叶松木质椭圆球体构成的,问球体浸入水中深度是多少?(建模可参考课本32页) 实验报告书写要求:根据实验情况和结果撰写并递交实验报告。实验报告应当有算法原理简介,算法流程图,程序代码,运行调试记录,计算结果阐释;对于数学建模的应用问题要有分析建模的过程、求解计算的过程、实际问题解答或阐释的内容。 实验总结(学会了......; 掌握了......; 训练了......; 发现了......; 今后学习中......有待提高。) 参考程序 1.用二分法算法(取[a,b]=[1,2]) 解算非线性方程01)(3=--=x x x f 的根 function [c,err,yc]=bisect(f,a,b,delta)

非线性方程组解法实验报告

《数值分析》实验报告 实验序号:实验三题目名称: 非线性方程解法 学号: 姓名: 任课教师: 专业班级: 1、实验目的: 编写用迭代法、牛顿法、对分区间法、弦线法解非线性方程的程序; 2、实验分析: 计算方法分析: 1-迭代法分析 (1)选取初值x0,并确定方程f(x)=0的等价形式x=φ(x); (2)计算x1=φ(x0); (3)如果|x1-x0|<ε则停止计算;否则用x1代替x0,重复步骤(2)和(3)的过程;2-牛顿法分析: (1)解非线性方程f(x)=0的Newton法是把非线性化的一种近似方法,把f(x)在点x0附近展开成Taylor级数; (2)取其线性部分作为非线性方程f(x)=0的近似方程; (3)再把在附近张开成Taylor级数,也取其线性部分作为f(x)=0的近似方程; (4)对于n=0,1,2,……Nmax,求xn+1,并计算f(xn+1),若或|xn+1-xn|<ε(容许误差), 则停止计算; 3-对分区间法分析 (1)找出f(0)=x的根在存在区间(a,b),并计算出端点的函数值飞f(a),f(b)。 (2)计算f(x)在区间中点值f((a+b)/2). (3)判断:若f((a+b)/2)~0,则计算停止。否则,若f((a+b)/2)与f(a)异号,则根位于(a,a+b/2)中,以(a+b)/2代替b;若f((a+b)/2)与f(b)异号, 则根位于(a+b/2,b)中,以a+b/2代替a。 (4)重复步骤(2)和(3)的过程,知道区间缩小到容许误差范围之内,此时,区间中点即可作为所要求的根。 4-弦线法分析 (1)选定初始值x0,x1,并计算f(x0),f(x1)。

非线性方程求根

第二章非线性方程求根 线性方程是方程式中仅包含未知量的一次方项和常数项的方程,除此之外的方程都是非线性方程(nonlinear equation). 例如,大家熟知的“一元二次方程”就是一个非线性方程. 多元线性方程组的求解是数值计算领域的一个重要问题,在后续几章将专门讨论. 本章介绍求解非线性方程的数值方法,主要针对实数域,重点是单个非线性方程的求根问题. 2.1引言 2.1.1非线性方程的解 记要求解的单变量非线性方程为 f(x)=0(2.1) 其中函数f: ?→?. 一般而言,非线性方程的解的存在性和个数是很难确定的,它可能无解,也可能有一个或多个解. 例2.1 (非线性方程的解):分析下列非线性方程的解是否存在和解的个数. (1) e x+1=0. 此方程无解. (2) e?x?x=0. 此方程有一个解. (3) x2?4sinx=0. 此方程有两个解. (4) x3?6x2+5x=0. 此方程有三个解. (5) cosx=0. 此方程有无穷多个解. 在实际问题中,往往要求的是自变量在一定范围内的解,比如限定x∈[a,b]. 函数f一般为连续函数,则可记为f(x)∈C[a,b],C[a,b]表示区间[a,b]上所有连续实函数的集合. 假设在区间[a, b]上方程(2.1)的根为x?,也称x?为函数f(x)的零点. 方程的根可能不唯一,而且同一个根x?也可能是方程(2.1)的多重根. 定义2.1:对光滑函数f,若f(x?)=f′(x?)=?=f(m?1)(x?)=0,但f(m)(x?)≠0,则称x?为方程(2.1)的m重根. 当m=1时,即f(x?)=0,f′(x?)≠0时,称x?为单根. 对于多项式函数f(x),若x?为m重根,则f(x)可因式分解为 f(x)=(x?x?)m g(x) 其中g(x)也是多项式函数,且g(x?)≠0. 很容易验证,f(x?)=f′(x?)=?=f(m?1)(x?)=0,但f(m)(x?)≠0,即多项式方程重根的概念与定义2.1是一致的. 对一般的函数f,x?是方程(2.1)的重根的几何含义是,函数曲线在x?处的斜率为0,且在该点处与x轴相交. 非线性方程的一个特例是n次多项式方程(n≥2),根据代数基本定理可知,n次方程在复数域上有n个根(m重根计为m个根). 当n=1, 2时,方程的求解方法是大家熟知的. 当 n=3, 4时,虽然也有求根公式,但已经很复杂,在实际计算时并不一定适用. 当n≥5时,不存在一般的求根公式,只能借助数值求解方法来求根. 2.1.2问题的敏感性 根据问题敏感性的定义,这里需要考虑输入数据的扰动对方程的根有多大影响. 要分析敏感性首先应假设问题中的数据如何扰动,一种易于分析的情况是将非线性方程写成: f(x)=y 的形式,然后讨论y在0值附近的扰动造成的问题敏感性. 此时,求根问题变成了函数求值

解非线性方程的数值计算方法用Matlab实现

湖北民族学院《数值分析》实验报告 实验名称 解非线性方程的数值计算方法 实验时间 2011年 11月 9日 姓名 王亚敏 班级 0209408 学号 020940807 成绩 实验报告内容要求: 一、实验目的与要求;二、实验内容;三、算法描述(数学原理或设计思路、计算公式、计算步骤); 四、程序代码;五、数值结果;六、计算结果分析(如初值对结果的影响;不同方法的比较;该方法的特点和改进等);七、实验中出现的问题,解决方法及体会(整个实验过程中(包括程序编写,上机调试等)出现的问题及其处理等广泛的问题). 一、实验目的: ① 掌握二分法、不动点迭代法、牛顿迭代法、Steffensen 迭代法等常用的非线性方程迭代算法; ② 培养编程与上机调试能力. 二、实验内容: 1.请分别用二分法、不动点迭代法、牛顿迭代法、Steffensen 迭代法求方程 32 ()330f x x x x =+--=在1.5 附近的根. 参考答案:原方程在1.5 附近的根为1.732051x = 2.请自选两个非线性方程,分别用二分法、不动点迭代法、牛顿迭代法、Steffensen 迭代法求解. 三、算法 (一) 1.二分法 计算()0f x =的二分法如下: ① 输入求根取间[,]a b 和误差控制量ε,定义函数()f x . 如果 ()()0f a f b <,转②;否则退出选用其它求根方法 ② 当a b ε->时,计算中点()/2x a b =+以及()f x 的值; 分情况处理 ()f x ε<:停止计算,,转④ ()()0f a f x <:修正区间[,][,]ax ab → ()()0f x f b <:修正区间[,][,]xb ab → ③ *2a b x += ④ 输出近似根* x 2.不动点(简单)迭代法算法思想 先将f(x)=0化成x=φ(x),然后取x 0,计算 x n+1=φ(x n ) n=0,1,2,… 若要求x * 满足f(x * )=0,则x * =)(*x ?,称x * 为函数)(x ?的一个不动点。

牛顿法解非线性方程组实验报告

实验名称: 牛顿法解非线性方程组 1 引言 我们已经知道,线性方程组我们可以采取Jacobi 迭代法,G-S 迭代法以及SOR 迭代方法求解。而在科学技术领域里常常提出求解非线性方程组的问题,例如,用非线性函数拟合实验数据问题、非线性网络问题,用差分法求解非线性微分方程问题等。 我们在解非线性方程组时,也考虑用迭代法求解,其思路和解非线性方程式一样,首先要将F(x)=0转化为等价的方程组 12(,,,),(1,2, )i i n x g x x x i n == 或者简记为x =g (x ),其中:,:n n n i g R R g R R →→ 112 2()()(),()n n n g x g x g R g x ???? ????????==∈???? ???????????? x x x x x 迭代法:首先从某个初始向量(0)x 开始,按下述逐次代入方法构造一向量序列(){}k x : (1)()() 1(,,),(1,2,,)k k k i i n x g x x i n +== 其中,()()() ()12 (,,,)k k k k T n x x x =x 。 或写成向量形式:(1)()(),(0,1,2,)k k g k +==x x 如果()*lim k k →∞ ≡x x (存在),称(){}k x 为收敛。且当()i g x 为连续函数时,可得 *()*(lim )()k k g g →∞ ==x x x 说明*x 为方程组的解。又称为x =g (x )的不动点。 本实验中采用牛顿迭代法来求解非线性方程组。 2 实验目的和要求 运用matlab 编写一个.m 文件,要求用牛顿法非线性方程组: 12(0)(1)()3211 cos 02,(取(0,0),要求10)1sin 0 2 T k k x x x x x x x +-∞ ?-=??=-

实验一 非线性方程求根

石家庄经济学院2014/2015学年第一学期 数值分析实验报告 班级: 5141090301 学号: 514109030105 姓名:张倩 指导教师: 张敬敏

实验一非线性方程求根 一、实验题目 1. 求方程f(x)=3x2-e x=0一个正根,并使误差不大于10-5。(p22第3题) 2. 计算√5,结果具有5位有效数字。 3. 求方程f(x)=x3-x-1=0在区间[1.0,1.5]内的一个实根,误差不大于10-5。(选做) 二、程序功能 1. 使用迭代法求方程f(x)=3x2-e x=0一个正根,并使误差不大于10-5。 2. 用牛顿法计算√5,结果具有5位有效数字。 3. 利用二分法求方程f(x)=x3-x-1=0在区间[1.0,1.5]内的一个实根,精度为10-5。 三、算法 算法1. 使用迭代法求方程f(x)=3x2-e x=0一个正根,并使误差不大于10-5。 算法2. 用牛顿法计算√5,结果具有5位有效数字。 for k=2,3,4….N do 1)compute x:x g(x) 四、重要标识符说明 程序1. 重要标识符说明 程序2. 重要标识符说明 Error确定有效位数,abs取绝对值,for 迭代次数 五、程序运行实例 在matlab 6.5环境中,运行程序1,结果如图1所示。

图1 程序1运行结果在matlab 6.5环境中,运行程序2,结果如图2所示。 图2 程序2运行结果六、源程序 程序1源程序: 程序2源程序: Error=1e-5; x=2; for k=2:10 xk=x; x=x/2+5/(2*x); if (abs(xk - x)<=Error) break; end end

实验3非线性方程求根问题

西华数学与计算机学院上机实践报告 课程名称:计算方法A年级:上机实践成绩: 指导教师:严常龙姓名: 上机实践名称:非线性方程求根问题学号:上机实践日期: 上机实践编号:1上机实践时间: 一、目的 1.通过本实验的编程练习,加深对非线性方程求根方法之二分法、简单迭代法、、牛顿迭代法等的构造过程的理解; 2.能将各种方法的算法描述正确地改编为程序并上机实现; 3.比较各种方法在求解同一非线性方程根时,在收敛情况上的差异。 二、内容与设计思想 自选求根问题,分别用二分法、简单迭代法、埃特金加速收敛法和牛顿迭代法求解其根,然后完成编程作业(注意把同一求根问题的几种不同方法放在一个程序之内)。以下求根问题供参考和选择,也可自行选择其他求根问题: 1.用二分法求方程f(x)=x3-2x-5=0在区间[2 , 3]内的根。 2.方程f(x)=2x3-5x2-19x+42=0在x=3.0附近有根,试写出其三种不同的等价形式以构成三种不同的迭代格式,再用简单迭代法求根,观察这三种迭代是否收敛及收敛的快慢。 3.用牛顿迭代法求方程f(x)=x3+2x2+10x-20=0在区间[1 , 1.5]上的根。 4.Cosx=x在区间[0 , /2]上的根。 三、使用环境 操作系统:Windows XP 软件环境:Microsoft Visual C++ 四、核心代码及调试过程 第一题:用二分法求方程f(x)=x3-2x-5=0在区间[2 , 3]内的根。 方程的近似解是:x=2.094552。 #include #include #define N 25 void main() { int k; float a[N],b[N],c[N],fa[N],fb[N],fc[N]; float x,y; printf("请输入a[0]的数值:"); scanf("%f",&x); printf("\n请输入b[0]的数值:"); scanf("%f",&y);

非线性方程求根

实验七 非线性方程求根 实验7.1(迭代法、初始值与收敛性) 实验目的:初步认识非线性问题的迭代法与线性问题迭代法的差别,探讨迭代法及初始值与迭代收敛性的关系。 问题提出:迭代法是求解非线性方程的基本思想方法,与线性方程的情况一样,其构造方法可以有多种多样,但关键是怎样才能使迭代收敛且有较快的收敛速度。 实验内容:考虑一个简单的代数方程 012=--x x 针对上述方程,可以构造多种迭代法,如 )1.7(1 2 1-=+n n x x )2.7(111n n x x + =+ )3.7(1 1+=+n n x x 在实轴上取初始值x 0,请分别用迭代(7.1)-(7.3)作实验,记录各算法的迭代过程。 实验要求: (1)取定某个初始值,分别计算(7.1)-(7.3)迭代结果,它们的收敛性如何?重复选取不同的初始值,反复实验。请自选设计一种比较形象的记录方式(如利用MATLAB 的图形功能),分析三种迭代法的收敛性与初值选取的关系。 (2)对三个迭代法中的某个,取不同的初始值进行迭代,结果如何?试分析迭代法对不同的初值是否有差异? (3)线性方程组迭代法的收敛性是不依赖初始值选取的。比较线性与非线性问题迭代的差异,有何结论和问题。 实验过程: 第一问: 针对迭代函数 11n n x x +=- 程序 disp(' 请输入初始迭代值为') x=[]; a=[];

b=[]; x(1)=input(''); for i=2:30 x(i)=x(i-1)^2-1; end for i=2:30 a(i-1)=x(i-1); b(i)=x(i); end a b i=1:30; plot(i,x) title('x(n+1)=x(n)^2-1') 数值实验结果及分析: 选择初始值为1时,每次迭代的波动情况如下:

计算方法非线性方程求根

计算方法第7章 非线性方程求根 本章主要内容: 1.区间二分法. 2切线法. 3.弦位法. 4.一般迭代法. 重点、难点 一、区间二分法 区间二分法是求方程f(x)=0根的近似值的常用方法。 基本思想:利用有根区间的判别方法确定方程根的区间[a,b] ,将有根区间平分为二;再利用有根区间的判别方法判断那一个区间是有根区间;重复上述步骤,直到小区间端点差的绝对值小于等于精度要求的数值,则用将上一区间的分半值作为方程的根的近似值。 区间二分法的计算步骤如下: 1. 计算区间端点的函数值f(a) , f(b)(不妨设f(a)<0,f(b)>0); 确定初始有根区间[a,b]. 2.二分有根区间[a,b],并计算)2( b a f + 取2 1b a x += 3.判断: 若0)(1=x f ,则方程的根为1x x =*; 若 0)(1>x f ,则有根区间为[]1,x a x ∈* ;令[]],[,111b a x a = 若 0)(1

12 ln ln )ln(---≥ ε a b n 确定应二分的次数。 例1 用区间二分法求方程0353 =+-x x 在某区间内实根的近似值(精确到0.001) 【思路】参见上述区间二分法的计算步骤 解 ∵f(1.8)=-0.168<0, f(1.9)=0.359>0 ∴f(x)在区间[1.8 ,1.9]内有一个根。 由公式 644.512 ln 001 .0ln 1.0ln 12ln ln )ln(=--=---≥ εa b n 取n=6, 计算结果列表如下: 则方程在区间[1.8,1.9]内所求近似值为x * ≈ x = 1.8328125 区间二分法的优点是计算程序简单,只要f (x )在区间[a,b]上连续,区间二分法就可使用,但区间二分法不能用来求偶次重根,由于区间二分法收敛比较慢,在实际计算中,区间二分法常用来求比较好的含根区间和初始近似值,以便进一步使用收敛更快的迭代法求出更精确的近似值。 迭代序列收敛阶的概念 设迭代序列{}n x 收敛于* x ,如果存在实数1≥p 与正常数c ,使得

实验7非线性方程求解

实验7 非线性方程求解 实验目的: 1. 1. 掌握用MA TLAB 软件求解非线性方程和方程组的基本用法,并对结果作出初步的 分析 2. 2. 练习用非线性方程组建立实际问题的模型并进行求解 实验内容: 6-3.(1)小张夫妇以按揭方式贷款买了一套价值20万的房子,首付了5万元,没有还款1000元,15年还清。问贷款利率是多少? (2)某人与贷款50万元购房,他咨询了两家银行,第一家银行开出的条件是每月还4500元,15年还清;第二家银行开出的条件是每年还45000元,20年还清。从利率方面看,那家银行较优惠(简单的假设年利率=月利率*12)? 解:(1)问题的建模:假设需付的款为0a ,每月付款b 元,经n 年后还清,付款利率为r ,于是对与按揭付款的方式不难列出以下的方程组: '00a a = '10211*(1)*(1)*(1)n n a a r b a a r b a a r b -=+-=+-=+-M 于是有 : 223123'*122*1210*122*121*120*121 *12 0(1)*(1)(1)*(1)*(1)(1)(1(1)(1)(1)) (1)(1(1)(1)(1)(1)) (1)1(1) * n n n n n n n n n n a a r b b r a r b b r b r a r b r r r a r b r r r r r a r b r ----+=+--+=+--+-+=+-+++++++=+-++++++++++-=+-M L L 如果对于年利率则不用考虑第一次要付的钱,所以易得: 0(1)1(1)* n n n r a a r b r +-=+- 按照上述的关系得到了本题的m 文件: function y=rate(x,a0,n,b,opt) if opt>=0%如果是〉0则按照月利率算 y=a0*(1+x)^(n*12)-b*((1+x)^(n*12)-1)/x;%计算月利率, else y=a0*(1+x)^n-b*((1+x)^n-1)/x;%计算年利率 end 主文件: clear all ;

相关文档