非线性方程迭代解法实验报告

合集下载

数值分析实验报告之迭代法求非线性方程的根

数值分析实验报告之迭代法求非线性方程的根

《数值分析》实验报告学院:数学与计算机学院专业:班级:姓名学号实验组实验时间指导教师成绩实验项目名称利用迭代法求方程的根实验目的1、掌握迭代法求根的数学原理。

2、掌握迭代法求根的计算机算法。

实验内容及要求内容:1、用迭代法求方程cosx5.0=x的近似根,要求误差不超过710-。

2.详细描述算法步骤并画出算法流程图形。

3.用表格列出迭代法的中间和最终结果。

要求:1、利用C语言,或Asp环境,或Matlab数学软件实现上述算法。

2、程序运行结果用表格显示出来3、保存程序运行结果,并结合算法进行分析。

4、要求实验报告最多两页,正反两面都要求打印。

实验原理将方程改写成x=)(xϕ,当方程在指定的区间上具有唯一的不动点(即迭代收敛)时,求原方程的零点就等价于求)(xϕ的不动点,选择一个初值x代入等式右端可得新的x的值,通过如此反复迭代后,求得的x的值会越来越逼近方程的根,一直迭代到误差满足要求即可。

实验仪器1、计算机一台。

2、安装IIS。

实验步骤Step1:选定满足迭代收敛的自变量的区间;Step2:选择迭代初值;Step3: 开始迭代,产生迭代后的新根,计算此时的误差;Step4: 如果误差不满足要求,返回Step3,否则输出结果,过程结束。

实验流程图开始选择迭代初值x确定收敛区间[a,b]迭代)(1kkxxϕ=+,2,1,0=k计算误差kkxx-+1结束误差是否小于7-10输出结果是否实验结果实验总结通过本次实验,我对迭代法求方程的根有了更深的认识,对其所用到的数学原理通过编程理解的更加清晰。

我是用Asp完成本次实验的,因为这样可以将结果很方便的用表格显示出来,让结果看起来比较清楚、明白和友好。

同时,我也用C语言编程实现过,结果是一样的,这也说明实验结果的正确性。

因为所给迭代方程是收敛的,不需要收敛性的验证,只要迭代达到误差的要求即可。

实验中遇到的一个问题是如何将结果中的小数点前的0补上去,让显示的更完整,通过网上查询,了解到可以根据对结果的判断将0加上去已达到完整显示,最终解决了这个问题。

非线性方程的迭代解法

非线性方程的迭代解法

⾮线性⽅程的迭代解法深圳⼤学实验报告实验课程名称:计算⽅法实验项⽬名称:⾮线性⽅程的迭代解法学院:计算机软件专业:计算机与科学技术报告⼈:学号:班级:04指导教师:实验时间:2010.5实验报告提交时间:2010.5.10教务处制实验报告包含内容⼀、实验⽬的与要求熟悉典型的迭代⽅法:⽜顿法、弦截法、⼆分法,了解各⾃的优缺点和适⽤范围掌握⾮线性⽅程的数值解法的基本思想和原理,深刻认识⾮线性⽅程的数值解法的意义⼆、模型建⽴x 5-3x 3+x-1= 0求该⽅程在区间[-8,8〕上的全部实根在区间[-8,8〕上的全部实根⼆分法:确定区间(a,b )后,取(a,b )的中点x(0)=(a+b)/2,若f(x(0))=0,则x(0)是根,否则,如f(a)*f(x(0))<0,令a1=a,b1=x(0);如f(x(0))*f(b)<0,令a1=x(0),b1=b 在(a1,b1)内⾄少有⼀个根,再取的中点如此进⾏下去Newtown 法:将⾮线性问题逐步线性化⽽形成如下迭代程序:弦截法:将Newton 迭代中的导数,⽤差商代替,有格式 Newtown 下⼭法:将⽜顿的迭代公式修改为),2,1,0()(')(1 =-=+k x f x f x x k k k k λ其中λ是⼀个参数,λ的选取应使)()(1k k x f x f <+ 成⽴当11)(ε<+k x f 或21ε<-+k k x x 时就停⽌迭代,且取x *≈ x k +1,否则再减⼩λ,继续迭代。

三、模型求解:3.1开发环境: Visual C++ 6.0)()()(111--+---=k k k k k k k x f x f x x x f x x3.2程序设计说明:程序设计根据⽜顿法、弦截法、⼆分法和newtown下⼭法思想和原理设计3.3:源代码:⼆分法:#include#include#define P 0.000001float getx(float x){return (x*x*x*x*x-(3*x*x*x)+x-1);};void main (){float y;float str1[20],str2[20];int i=0;str1[0]=-8;str2[0]=-1.3;while (str2[i]-str1[i]>P){y=(str1[i]+str2[i])/2;if(getx(str1[i])*getx(y)>P){str1[i+1]=y;str2[i+1]=str2[i];}else{str1[i+1]=str1[i];str2[i+1]=y;}i++;printf("%f %f\n",str1[i],str2[i]);}y=(str1[i]+str2[i])/2;printf("%f\n",y);}Newtown法:#include#include#define X 0.00000]1float nt(float x){return (x*x*x*x*x-(3*x*x*x)+x-1); }; float nt2(float y){return (5*y*y*y*y-9*y*y+1);};void main(){float c1,c2,x1=-1.3,x,dt;int i=1;while(i<20){c1=nt(x1);c2=nt2(x1);if(c1*c2==0){printf("%f\n",x1);exit(0);}x=x1-c1/c2;if(fabs(x)<=1)dt=fabs(x-x1);elsedt=fabs(x-x1)/fabs(x);if(dt{printf("%f \n",x1);printf("迭代次数=%d\n",i);exit(0);}}printf("%f\n",i);printf("迭代次数=%f\n",i);}弦截法:#include#include#include#define X 0.000001float xj(float x){return (x*x*x*x*x-(3*x*x*x)+x-1); };void main(){float x[20];float c1,c2,dt;int i=1;x[0]=1.5;x[1]=8;while(i<200){c1=xj(x[i]);c2=xj(x[i])-xj(x[i-1]);if(c1*c2==0){printf("%f\n",x[i]);exit(0);}x[i+1]=x[i]-(x[i]-x[i-1])*c1/c2;if(fabs(x[i+1])<=1)dt=fabs(x[i+1]-x[i]);elsedt=fabs(x[i+1]-x[i])/fabs(x[i+1]);printf("%f\n",x[i]);printf("迭代次数=%d\n",i);exit(0);}i++;}printf("%f %d\n",x[i],i);}Newtown下⼭法:#include#include#include#define X 0.000001double ntd(double x){return (x*x*x*x*x-(3*x*x*x)+x-1); }; double ntd2(double y){return (5*y*y*y*y-9*y*y+1);};void main(){double h,c1,c2,xo=8,x,dt;int i=1,j=0;while(i<20){j=0;c1=ntd(xo);c2=ntd2(xo);if(c1*c2==0){printf("%f\n",xo);exit(0);while(1){h=1*pow(0.5,j);x=xo-h*c1/c2;if(fabs(ntd(x))break;j++;}if(fabs(x)<=1)dt=fabs(x-xo);elsedt=fabs(x-xo)/fabs(x);if(dt{printf("%f\n",xo);printf("迭代次数=%d\n",i);exit(0);}xo=x;i++;}}3.4使⽤说明:直接运⾏程序3.5模型的解:⼼得体会:通过对⽐四种不同的迭代法解⾮线性⽅程,认识到各种的⽅法的优点和缺点。

数值分析--非线性方程的迭代解法

数值分析--非线性方程的迭代解法

非线性方程的迭代解法1.迭代函数对收敛性的影响实验目的:初步认识非线性问题的迭代法及其收敛性,认识迭代函数对收敛性的影响,知道当迭代函数满足什麽条件时,迭代法收敛。

实验内容:用迭代法求方程 012)(3=--=x x x f 的根。

方案一: 化012)(3=--=x x x f 为等价方程 )(213x x x φ=+= 方案二: 化012)(3=--=x x x f 为等价方程 )(123x x x φ=-= 实验要求:分别对方案一、方案二取初值00=x ,迭代10次,观察其计算值,并加以分析。

实验程序:实验结果:2. 初值的选取对迭代法的影响实验目的:通过具体的数值实验,体会选取不同的初值对同一迭代法的影响。

实验内容:用牛顿迭代法求方程 013=--x x 在x =1.5附近的根。

实验要求:对牛顿迭代公式 131231----=+k k k k k x x x x x ,分别取00=x ,5.10=x 迭代10次,观察比较其计算值,并分析原因。

实验程序:实验结果:3.收敛性与收敛速度的比较实验目的:通过用不同迭代法解同一非线性方程,比较各种方法的收敛性与收敛速度。

实验内容:求解非线性方程 0232=-+-x e x x 的根,准确到106-。

实验要求:(1) 用你自己设计的一种线性收敛的迭代法求方程的根,然后用斯蒂芬森加速迭代计算。

输出迭代初值、各次迭代值及迭代次数。

(2) 用牛顿迭代法求方程的根,输出迭代初值、各次迭代值及迭代次数,并与(1)的结果比较。

实验程序:1.普通迭代,选用初值0.52. 斯蒂芬森加速迭代3.牛顿迭代法实验结果:。

非线性方程的简单迭代法和Steffensen迭代法

非线性方程的简单迭代法和Steffensen迭代法

《数值计算方法》实验报告实验名称:实验1 非线性方程的简单迭代法和Steffensen 迭代法 实验题目:分别用简单迭代法和Steffensen 迭代法求方程 010423=-+x x在 [1, 2] 的一个实根.实验目的:理解并掌握简单迭代法和Steffensen 迭代法 基础理论:简单迭代法和Steffensen 迭代法1).简单迭代法的原理:将一元非线性方程:0)(=x f 改写成等价方程:)(x x ρ= ,对此,从某个初始值x0开始,对应式)(x x ρ= 构成迭代公式 ,...1,0),(1==+k x x k k ρ ,这样就可以确定序列 {}k x (k=0,1,2…)。

如果 {}k x 有极限*lim x x k k =∞→ ,由式 ,...1,0),(1==+k x x k k ρ 两边取极限可得 )(**x x ρ= ,可知 *x 为方程0)(=x f 的近似解。

2)Steffensen 迭代法的原理:通过把改进的Aitken 方法应用于根据不动点迭代所得到的线性收敛序列,将收敛速度加速到二阶。

()⎪⎪⎪⎩⎪⎪⎪⎨⎧+---===+k k k k k k k k k k k x y z x y x x y z x y 2)()(21ρρ[]x x x x x x x +---=)(2)(()()(2ρρρρψ实验环境:操作系统:Windows 7;实验平台:Turbo C++实验过程:写出算法→编写程序→调试运行程序→计算结果1)简单迭代法的算法:Input:初始近似值x0,精度要求del,最大迭代次数NOutput:近似解x 或失败信息1. n ←12. While n≤N do;3. x ←f(x0);4. if | x-x0|<del then5. | return x;6. end7. n←n+1;8. X0←x;9. End10. return False;// 超出最大迭代次数2)Steffensen迭代法的算法:Input : 区间端点a,b;精度要求del;最大迭代次数N Output:近似解或失败信息1. n←12. while n ≤N do;3. y←f(x0);4.z←f(y);5.x←x0-()202xyzxy+--;6.If |x-x0|<del then;7.| return x;8.end9.n←n+1;10.x0←x;11.end12.return False;实验结果a,用简单迭代法计算的结果结果约为1.365230b.用Steffensen迭代法计算的结果:近似解为:1.365230给出程序:1,简单迭代法的程序(C++)#include "stdio.h"#include "math.h"#define phi(x) 0.5*sqrt(10-x*x*x)void main(){int n=1,N;float x,x0,del;printf("x0="); scanf("%f",&x0); printf("\ndel=:"); scanf("%f",&del); printf("\nN="); scanf("%d",&N);printf("\nk x(k)");printf("\n %2d %f ",0,x0);while (n<N){ x=phi(x0);if(fabs(x-x0)<del){ printf("\n \n=近似解= %f \n",x);return;}printf("\n %2d %f ",n,x0);n=n+1; x0=x;}printf("\n \n%d次迭代后未达到精度要求.\n",N); }2,Steffensen迭代法的程序(C++)#include "stdio.h"#include "math.h"#define phi(x) 0.5*sqrt(10-x*x*x);void main(){int n=1,N;float x,x0,del,y,z,a,b;printf("x0="); scanf("%f",&x0);printf("\ndel=:"); scanf("%f",&del);printf("\na="); scanf("%f",&a);printf("\nb="); scanf("%f",&b);printf("\nN="); scanf("%d",&N);printf("\nk x(k)");printf("\n %2d %f ",0,x0);while (n<N){ y=phi(x0);z=phi(y);x=x0-(y-x0)*(y-x0)/(z-2*y+x0);if(fabs(x-x0)<del){ printf("\n \n=近似解= %f \n",x);return;}printf("\n %2d %f ",n,x0);n=n+1; x0=x;}printf("\n \n%d次迭代后未达到精度要求.\n",N);}结果分析:1.用简单迭代法和Steffensen迭代法都能求出非线性方程的近似解,且用简单迭代法和Steffensen迭代法求出的近似解基本一样。

非线性方程组迭代法

非线性方程组迭代法

实验二 非线性方程的数值解法1.1 实验内容和要求在科学研究和工程技术中大量的实际问题是非线性的,求非线性方程()0f x =满足一定精确度的近似根是工程计算与科学研究中诸多领域经常需要解决的问题。

实验目的:进一步理解掌握非线性方程求根的简单迭代法、埃特金Aitken 加速法、牛顿迭代法的思想和构造。

实验内容: 求方程2320x x x e -+-=的实根。

要求:(1)设计一种简单迭代法,要使迭代序列收敛,然后再用埃特金Aitken 加速迭代,计算到-8110k k x x --<为止。

(2)用牛顿迭代法,同样计算到-8110k k x x --<(3)输出迭代初值、迭代次数k 及各次迭代值,并比较算法的优劣。

1.2 算法描述普通迭代法计算步骤:(1)给定初始近似值0x ,eps 为精确度。

(2)用迭代公式x =x 2+2−e x 3进行迭代,直到-8110k k x x --<为止。

埃特金Aitken 加速迭代法计算步骤:(1)将()0f x =化成同解方程()x x ϕ=()k k y x ϕ= ,()k k z y ϕ=21()2k k k k k k k y x x x z y x +-=--+=22k k k k k kx z y z y x --+ (2)计算到-8110k k x x --<为止。

牛顿法计算步骤:给定初始近似值0x ,1ε为根的容许误差,2ε为()f x 的容许误差,N 为迭代次数的容许值。

计算00(),()f x f x '(1)如果0()0f x '=或者迭代次数大于N ,则算法失败,结束;否则执行(2)(2)按公式0100()()f x x x f x =-'迭代一次,得到新的近似值1x ,计算11(),()f x f x ' (3)如果101x x ε-<或者12()f x ε<,则迭代终止,以1x 作为所求的根,结束;否则执行(4)(4)以111(,(),())x f x f x '代替000(,(),())x f x f x ',转步骤(1)继续迭代。

实验一非线性方程组求解实验报告

实验一非线性方程组求解实验报告

计算方法实验报告专业班级:姓名:学号:实验成绩:1.【实验题目】非线性方程组求解2.【实验目的】(1).掌握二分法、迭代法、牛顿迭代法求方程近似根的基本思想与原理。

(2).掌握常用迭代算法的程序实现。

3.【实验内容】迭代法是求解非线性方程的基本方法,其构造方法可以有多种多样,但关键是怎样才能使迭代收敛且有较快的收敛速度。

考虑一个简单的代数方程,针对该方程,可以构造多种迭代法,如:取初始值,取,分别用以上迭代格式作实验,记录各算法的迭代过程4. 【实验要求】(1)取定某个初始值,按方案1~3对非线性方程求根,它们的收敛性如何?重复选取不同的初始值,反复实验。

请读者自行设计一种比较形象的记录方式(如利用Matlab的图形功能),分析三种迭代法的收敛性与初值选取的关系。

(2)对三个迭代格式的某一种,分别取不同的初始值进行迭代,结果如何?试分析迭代法对不同的初值是否有差异?(3)对代数方程,分别用方案1 用二分法求解;方案2 用牛顿法求解;5. 【算法描述】二分法算法步骤1)计算有根区间的端点a,b及预先给定的精度e。

2)计算中点(a+b)/2。

3)若f(x)f(a)<0,则x b,转向4);否则,x a,转向4).⇒⇒4)若b-a<e,则输出满足精度的根x,结束;否则转向2)。

牛顿法迭代法的计算步骤x01)给出初始近根及精度e。

2)计算。

x x x x f f 1000)(')(⇒-3)若|-|<e ,则转向4);否则转向2)。

x 1x 0x x 01⇒4)输出满足精度的根,结束。

x 16. 【源程序(带注释)】二分法#include<stdio.h>#include<math.h>#include<conio.h>#include<windows.h>float f(float x){float a;a=x*x*x-x-1;return a;} /*求函数值,如果求其它函数,只需改成其它函数即可*/ main(){float a,b,e,x; /* a,b 分别表示有根区间的左、右端点, e 是精度要求,x 区间中点值*/system("CLS");//清屏printf("对代数方程x^3-x-1=0,分别用\n 方案1 用二分法求解\n");printf(" \n please input data a =");scanf("%f",&a);printf(" \n please input data b=");scanf("%f",&b);if(f(a)*f(b)<0){while(f(x)!=0){x=(a+b)/2;if(f(x)*f(a)<0){b=x;if(fabs(b-a)<0.000001)break;elsecontinue;}else{a=x;if(fabs(b-a)<0.000001)break;else continue;}}printf("\n");x=(b+a)/2;printf("the root of f(x)=0 is x=%f\n",x);}elseprintf("\ not root! afresh input\n"); /*表示[a,b] 区间无根,重新选择有根区间*/getch();return(x);}牛顿法#include<stdio.h>#include<math.h>#include<conio.h>#include<windows.h>#define maxrept 1000 /*最大迭代次数*/float f(float x) {float a;a=x*x*x-x-1;return a; /*函数f(x) */}float df(float x) {return(1+exp(-x)); /* 函数f(x)的导数) (x f ′*/ }float iterate(float x) {float x1;x1=x-f(x)/df(x); /* 牛顿迭代函数iterate(x)=x-f(x) / ) (x f ′*/return(x1);}main() {float x0,x1,d;int k=0;//clrscr();system("CLS");printf("对代数方程x^3-x-1=0,分别用\n方案2 用牛顿法求解\n");printf("\n please input x0="); /* 输入迭代初值x0 */scanf("%f",&x0);printf("\n k xk\n");printf("\ %d %f\n",k,x0);do {k++;x1=iterate(x0);printf(" %d %f\n",k,x1);d=fabs(x1-x0);x0=x1;}while((d>=0.000001)&(k<maxrept));if(k<maxrept)printf("the root of f(x)=0 is x=%f, k=%d\n",x1,k);elseprintf("\n the iteration is failed!\n");getch();}7.【实验结果与分析总结(含运行结果截图)】。

非线性方程的迭代法

非线性方程的迭代法

非线性方程的迭代法”1. 实验题目设方程f (x )=x 3-3x-1=0有3个实根x1*=1.8793,x2*=-0.34727,x3*=-1.53209.现采用下面6种不同计算格式,求f (x )=0的根x1*,x2*。

(a) x=2x 1x 3+ (b) x=313+x (c) x=313+x (d) x=312-x (e) x=x/13+ (f) x=x-31 要求如下:(1)编制一个程序进行运算,最后打印出每种迭代格式的敛散情况;(2)用误差估计|x1n +-xn |<del来控制迭代次数,并且打印出迭代的次数;(3)观察初始值的选取对迭代收敛有何影响;(4)分析迭代收敛和发散的原因。

2. 实验目的掌握用迭代法求解线性方程组,加深对用迭代方程求方程根的理解3. 基础理论4. 实验环境Visual C++ 语言5. 实验过程#include<iostream.h>#include<stdio.h>#include<math.h>#define pha(x) 3*x+1/x*x#define phb(x) (x*x*x-1)/3#define phc(x) pow(3*x+1,1/3.0)#define phd(x) 1/(x*x-3)#define phe(x) sqrt(3+1/x)#define phf(x) x-((x*x*x-3*x-1)/((x*x-1)*3)) void main(){int N;double x,x0,del;cout<<"初始近似值x0=";cin>>x0;cout<<"精度del=";cin>>del;cout<<"最大迭代次数N=";cin>>N;double s;for(int k=1;k<7;k++){int n=1;if(k==1){s=fabs(pha(x0+1e-4)-pha(x0))/1e-4;cout<<"使用a计算方法:"<<endl; }if(k==2){s=fabs(phb(x0+1e-4)-phb(x0))/1e-4;cout<<"使用b计算方法:"<<endl; }if(k==3){s=fabs(phc(x0+1e-4)-phc(x0))/1e-4;cout<<"使用c计算方法:"<<endl; }if(k==4){s=fabs(phd(x0+1e-4)-phd(x0))/1e-4;cout<<"使用d计算方法:"<<endl; }if(k==5){s=fabs(phe(x0+1e-4)-phe(x0))/1e-4;cout<<"使用e计算方法:"<<endl; }if(k==6){s=fabs(phf(x0+1e-4)-phf(x0))/1e-4;cout<<"使用f计算方法:"<<endl; }if(s>0&&s<1){cout<<"该迭代公式收敛"<<endl;while(n<N){if(k==1) x=pha(x0);if(k==2) x=phb(x0);if(k==3) x=phc(x0);if(k==4) x=phd(x0);if(k==5) x=phe(x0);if(k==6) x=phf(x0);if(fabs(x-x0)<del){cout<<"近似解为:"<<x<<endl;cout<<"迭代次数为:"<<n<<endl<<endl;n=N+1;}elsen=n+1;x0=x;if(n==N)cout<<"超过最大的迭代次数,得不到所要求近似解。

数值分析 数值分析 Newton迭代法求解非线性方程实验

数值分析  数值分析  Newton迭代法求解非线性方程实验
intf("%Lf\n",u[k][j]);
}//计算出u[i][j]并输出.
第二部分 for(i=k+1;i<n;i++)
{s=0.0;
for(r=0;r<k-1;r++)
{s=s+l[k][r]*u[r][k];}
l[i][k]=(a[i][k]-s)/u[k][k];
printf("%Lf\n",l[i][k]);
{s=0.0;
for(r=0;r<k-1;r++)
{s=s+l[k][r]*u[r][k];}
l[i][k]=(a[i][k]-s)/u[k][k];
printf("l[%d][%d]%Lf\n",i,k,l[i][k]);}
}
}
六、实验结果
七、上机实验体会
在这个试验中同样叶出现了很多问题,对L,U的求解输出中,输出的位置的不同,结果也就会出差错.经过多次调整,结果总算输出了.
通过此次试验,我理解了多重循环的运用,并了解了古人的聪明智慧,]讲将复杂问题简单化,现在的大学生们,应该学习他们的创新及钻研精神。
for(k=0;k<n;k++)
{for(j=k;j<n;j++)
{s=0.0;
for (r=0;r<k-1;r++)
{s=s+l[k][r]*u[r][j];}
u[k][j]=a[k][j]-s;
printf("u[%d][%d]=%Lf\n",k,j,u[k][j]); }
for(i=k+1;i<n;i++)

非线性方程的迭代法实验

非线性方程的迭代法实验

《数值分析》实验报告实验1 非线性方程的迭代法1.实验名称实验 非线性方程的迭代法2.实验题目设方程f(x)=x3-3*x-1=0有三个实根,X1*=1.8793,X2*= -0.34727,X3*= -1.53209,现采用下面6种不同的计算格式,求f(x)=0的根x1*,x2*。

(a) x=21x 3+ (b) x=31x 3- (c) x=31x 3+ (d) x=3x 12- (e) x=x 13+ (f) x=x-311-x 1-x 3-x 23 要求如下:(1)编制一个程序进行运算,最后打印出每种迭代格式的敛散情况。

(2)用误差估计|xn+1-xn|<ε来控制迭代次数,并且打印出迭代的次数。

(3)观察初始值的选取对迭代收敛有何影响。

(4)分析迭代收敛和发散的原因。

3实验过程:(利用C 语言及迭代算法编写代码如下)#include<stdio.h>#include<math.h>double fa(double x){return (3*x+1)/(x*x);}double fb(double x){return (x*x*x-1)/3;}double fc(double x){return pow( (3*x+1),1.0/3.0);}double fd(double x){return 1/(x*x -3);}double fe(double x){return sqrt(3+1/x);}double ff(double x){return x-(x*x*x-3*x-1)/( 3* (x*x-1) ); }int main(){double e,x,x0,x1;int n,count,i;printf("请输入最大迭代次数N: ");scanf("%d",&n);printf("请输入函数的一个近似值X: "); scanf("%lf",&x1);printf("请输入误差估计值e: ");scanf("%lf",&e);for(i=1;i<=6;i++){printf("函数f%c()的结果\n",'a'-1+i);count=1;x0=x1;while(count<=n){switch(i){case 1: x=fa(x0); break;case 2: x=fb(x0); break;case 3: x=fc(x0); break;case 4: x=fd(x0); break;case 5: x=fe(x0); break;case 6: x=ff(x0); break;}// x=fb(x0);if(fabs(x-x0)<e){printf(" x= %lf\n\n",x0);break;}else{printf("%d %lf\n",count,x);x0=x;count++;}}if(count>n)printf("循环次数超过%d,没求出结果\n\n",count-1);}return 0;}实验结果:取迭代最大次数N为50,ε=0.0000001,近似初始值如下表的结果如下表(n为迭代次数):实验数据分析:显然:对于函数a取初始值X1*=1.8793,X2*= -0.34727时,迭代次数是超过50次的,即函数a在X1*=1.8793,X2*= -0.34727可能是发散的。

求解非线性方程实验报告

求解非线性方程实验报告

求解非线性方程实验报告一.实验目的:通过本节实验课的学习,要求我们理解并掌握二分法、不动点迭代、牛顿切线法及弦截法解非线性方程求根的原理,掌握相应的算法原理,通过计算机解决实验问题二.实验内容: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)>dltc=(a+b)/2;if f(c)==0break;elseif f(c)*f(b)<0a=c;else b=c;endfprintf('k=%d,x=%.5f\n',k,c); k=k+1;end2、eps=10^(-8);dx=1;x0=3.5;k=0;while(dx>eps)k=k+1;x=log(x0)+2;dx=abs(x-x0)/(1+abs(x));x0=x;endkx3、f=inline('x^3-x-1');df=inline('3*x^2-1');d2f=inline('6*x');a=-3;b=3;dlt=1.0e-5;if f(a)*d2f(a)>0x0=a;elsex0=b;endm=min(abs(df(a)),abs(df(b)));k=0;while abs(f(x0))>m*dltk=k+1;x1=x0-f(x0)/df(x0);x0=x1;fprintf('k=%d x=%.5f\n',k,x0); end for x0=1.5fprintf('k=%d x=%.5f\n',k,x0); end for x0=0fprintf('k=%d x=%.5f\n',k,x0); end for x0=-1fprintf('k=%d x=%.5f\n',k,x0); end 五.程序运行结果:1、k=1,x=0.50000k=2,x=0.75000k=3,x=0.62500k=4,x=0.56250k=5,x=0.53125k=6,x=0.51563k=7,x=0.50781k=8,x=0.51172k=9,x=0.50977k=10,x=0.51074k=11,x=0.51123k=12,x=0.51099k=13,x=0.51086k=14,x=0.51093 2、k =15x =3.14623、k=1 x=-2.03846 k=2 x=-1.39028k=3 x=-0.91161k=4 x=-0.34503k=5 x=-1.42775k=6 x=-0.94242k=7 x=-0.40495k=8 x=-1.70690k=9 x=-1.15576k=10 x=-0.69419 k=11 x=0.74249k=12 x=2.78130k=13 x=1.98273k=14 x=1.53693k=15 x=1.35726k=16 x=1.32566k=17 x=1.32472当x0=1.5时:k=17 x=1.50000当x0=0时:k=17 x=0.00000当x0=-1时:k=17 x=-1.000002、六.实验总结:通过实验学会理解并掌握二分法、不动点迭代、牛顿切线法及弦截法解非线性方程求根的原理,掌握相应的算法原理,通过计算机解决实验问题并通过反复的上机实验操作,解决了在实验过程中遇到的实验问题,并了解了一些函数的特殊用法,学会了用这三种基本方法解决实际遇到的问题,并了解了二分法、不动点迭代、牛顿切线法及弦截法的各种变形算法。

非线性方程的解法数学实验报告

非线性方程的解法数学实验报告
fork=1:3
[x,fv,ef,out]=fzero(@f,x0(k))
end
结果
x0 =
1 4 10
x =
1.4044
fv =
0
ef =
1
out =
intervaliterations: 9
iterations: 6
funcCount: 25
algorithm: 'bisection, interpolation'
初值为x=3时,结果为
ans =
1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000
3.0000 1.9075 1.5163 1.4130 1.4045 1.4044 1.4044
【实验总结】
通过本次试验我们学会了用Matlab解非线性方程的fzero和fsolve方法,明白了两种方法的相同和不同之处;此外还学会了利用牛顿法构造迭代公式求解已知非线性方程的解。
message: 'Zero found in the interval [0.547452, 1.45255]'
x =
1.4044
fv =
0
ef =
1
out =
intervaliterations: 11
iterations: 12
funcCount: 34
algorithm: 'bisection, interpolation'
firstorderopt: 1.6457e-007
message: 'Optimization terminated: first-order optimality is less than options.TolFun.'

非线性方程迭代解法实验报告

非线性方程迭代解法实验报告

深圳大学实验报告
课程名称:计算方法
实验项目名称:非线性方程迭代解法
学院:计算机与软件学院
专业、班级:09 计算机科学与技术05班
}
ax[k]=x2;
//printf("用%d次牛顿迭代求得一个根,值为:\n",j);//迭代次数
//printf("用%d次牛顿简化迭代求得一个根,值为:\n",j);//牛顿简化//sprintf("用%d次弦割迭代求得一个根,值为:\n",j);//弦割
printf("用%d次下山迭代求得一个根,值为:\n",j);//下山
printf("ax%d=%.9lf\n",k+1,ax[k]);//输出根
k++;//记录根个数
}
getchar();
getchar();
}
3.3 模型的解(含运行结果截图)
图1:牛顿迭代
图1:简化牛顿迭代
图3:弦割法
图4:下山法
3.4 结果分析
用牛顿迭代解法的收敛速度最快,求解的时候分别只用4次和3。

数值分析实验报告之迭代法求非线性方程的根

数值分析实验报告之迭代法求非线性方程的根

数值分析实验报告之迭代法求非线性方程的根1.实验目的掌握迭代法求非线性方程根的基本原理和使用方法,加深对数值计算方法的理解与应用。

2.实验原理迭代法是一种通过不断逼近的方法求解非线性方程的根。

根据不同的函数特点和问题需求,可以选择不同的迭代公式进行计算,如牛顿迭代法、二分法、弦截法等。

3.实验内容本次实验使用牛顿迭代法求解非线性方程的根。

牛顿迭代法基于函数的局部线性逼近,通过不断迭代逼近零点,直至满足收敛条件。

具体步骤如下:Step 1:选择初始点X0。

Step 2:计算函数f(x)在X0处的导数f'(x0)。

Step 3:计算迭代公式Xn+1 = Xn - f(Xn) / f'(Xn)。

Step 4:判断收敛准则,若满足则迭代结束,输出解Xn;否则返回Step 2,继续迭代。

Step 5:根据实际情况判断迭代过程是否收敛,并输出结果。

4.实验步骤步骤一:选择初始点。

根据非线性方程的特点,选择恰当的初始点,以便迭代公式收敛。

步骤二:计算导数。

根据选择的非线性方程,计算函数f(x)的导数f'(x0),作为迭代公式的计算基础。

步骤三:迭代计算。

根据迭代公式Xn+1=Xn-f(Xn)/f'(Xn),计算下一个迭代点Xn+1步骤四:判断收敛。

判断迭代过程是否满足收敛条件,通常可以通过设置迭代次数上限、判断前后两次迭代结果的差值是否足够小等方式进行判断。

步骤五:输出结果。

根据实际情况,输出最终的迭代结果。

5.实验结果与分析以求解非线性方程f(x)=x^3-x-1为例,选择初始点X0=1进行迭代计算。

根据函数f(x)的导数计算公式,得到导数f'(x0)=3x0^2-1,即f'(1)=2根据迭代公式Xn+1=Xn-f(Xn)/f'(Xn),带入计算可得:X1=X0-(X0^3-X0-1)/(3X0^2-1)=1-(1-1-1)/(3-1)=1-0/2=1根据收敛准则,判断迭代结果是否满足收敛条件。

数值分析实验报告_清华大学_非线性方程的解法

数值分析实验报告_清华大学_非线性方程的解法

非线性方程的解法实验1.算法设计与比较问题提出:非线性方程组的求解方法很多,基本的思想是线性化。

不同的方法效果如何,要靠计算的实践来分析、比较。

实验内容:考虑算法(1)牛顿法(2)拟牛顿法分别编写它们的matlab程序。

实验要求:(1)用上述方法,分别计算两个例子。

在达到精度相同的前提下,比较迭代次数、浮点运算次数和CPU时间等。

1.1程序清单为使用flops统计浮点运算次数,使用MATLAB5.3版本%f1.m原函数f1function y=f(x)y(1)=12*x(1)-x(2)^2-4*x(3)-7;y(2)=x(1)^2+10*x(2)-x(3)-8;y(3)=x(2)^3+10*x(3)-8;end%ff1.m原函数f1的雅克比矩阵function y=ff(x)y(1,:)=[12,-2*x(2),-4];y(2,:)=[2*x(1),10,-1];y(3,:)=[0,3*x(2)^2,10];end%f1.m原函数f2function y=f2(x)y(1)=3*x(1)-cos(x(2)*x(3)) -1/2;y(2)=x(1)^2-81*(x(2)+0.1)^2+sin(x(3))+1.06;y(3)=exp(-x(1)*x(2))+20*x(3)+1/3*(10*pi-3);end%ff2.m原函数f2的雅克比矩阵function y=ff2(x)y(1,:)=[3,x(3)*sin(x(2)*x(3)),x(2)*sin(x(2)*x(3))];y(2,:)=[2*x(1),-2*81*(x(2)+0.1),cos(x(3))];y(3,:)=[-x(2)*exp(-x(1)*x(2)),-x(1)*exp(-x(1)*x(2)),20]; end%牛顿法(以第一个方程组为例)clear;x0=[0,0,0]';n=10;tol=1e-6;x(:,1)=x0;i=1;u=[1,1,1]';tic;while (norm(u)>tol*norm(x(:,i))&(i<n))A=ff1(x(:,i));b=f1(x(:,i))';u=-A\b;x(:,i+1)=x(:,i)+u;i=i+1;end;x(:,i)iter=i-1t=toc%拟牛顿法(以第一个方程组为例)clear;x0=[0,0,0]';n=10;tol=1e-6;x(:,1)=x0;i=1;p=[1,1,1]';A=ff1(x(:,1));tic;while (norm(p)>tol*norm(x(:,i))&(i<n))x(:,i+1)=x(:,i)-A\f1(x(:,i))';p=x(:,i+1)-x(:,i);q=f1(x(:,i+1))'-f1(x(:,i))';A=A+(q-A*p)*p'/norm(p,2)^2;i=i+1;end;iter=i-1t=tocx(:,i)1.2运行结果1.2.1第一个方程组精确解为*T =(0.886020214719037, 0.796444775323146, 0.749479574122230)x 取最大迭代次数n=5000,相对误差限Tol=1e-6 (1)取()(0)1,1,1x T=牛顿迭代法迭代3次收敛,浮点运算次数为440,每次迭代平均浮点运算次数为147,CPU 耗时t =0(s)拟牛顿法迭代4次收敛,浮点运算次数为1048,每次迭代平均浮点运算次数为262,CPU 耗时t =0(s)(2)取()(0)000x T =,, 牛顿迭代法迭代4次收敛,浮点运算次数为510,每次迭代平均浮点运算次数为128,CPU 耗时t =1.600e-002(s)拟牛顿法迭代6次收敛,浮点运算次数为1493,每次迭代平均浮点运算次数为248,CPU 耗时t =1.50e-002(s)(3)取()(0)50,5050x T=,牛顿迭代法迭代15次收敛,浮点运算次数为2118,每次迭代平均浮点运算次数为141,CPU 耗时t =1.600e-002(s)拟牛顿法迭代338次收敛,浮点运算次数为88454,每次迭代平均浮点运算次数为262,CPU 耗时t =3.100e-002(s)1.2.2第二个方程组精确解为*T =(0.886020214719037, 0.796444775323146, 0.749479574122230)x 取最大迭代次数n=5000,相对误差限Tol=1e-6(1)取()(0)000x T=,, 牛顿迭代法迭代5次收敛,浮点运算次数为776,每次迭代平均浮点运算次数为155.2,CPU 耗时t =0(s)拟牛顿法迭代6次收敛,浮点运算次数为1635,每次迭代平均浮点运算次数为273,CPU 耗时t =0(s)(2)取()(0)888x T=,, 牛顿迭代法迭代9次收敛,浮点运算次数为1519,每次迭代平均浮点运算次数为169,CPU 耗时t =0(s)拟牛顿法迭代21次收敛,浮点运算次数为5924,每次迭代平均浮点运算次数为282,CPU 耗时t =1.600e-002(s)(3)对于离精确解更远的初值(如()(0)101010x T=,,),在计算中会出现奇异或接近奇异的矩阵,计算结果误差很大或计算根本无法进行下去。

非线性方程求解实验报告

非线性方程求解实验报告

数学实验报告非线性方程求解一、实验目的1.掌握用 MATLAB 软件求解非线性方程和方程组的基本用法,并对结果作初步分析;2.练习用非线性方程和方程组建立实际问题的模型并进行求解。

二、实验内容题目1【问题描述】(Q1)小张夫妇以按揭方式贷款买了1套价值20万元的房子,首付了5万元,每月还款1000元,15年还清。

问贷款利率是多少?(Q2)某人欲贷款50 万元购房,他咨询了两家银行,第一家银行开出的条件是每月还4500元,15 年还清;第二家银行开出的条件是每年还45000 元,20 年还清。

从利率方面看,哪家银行较优惠(简单假设:年利率=月利率×12)?【分析与解】假设初始贷款金额为x0,贷款利率为p,每月还款金额为x,第i个月还完当月贷款后所欠银行的金额为x i,(i=1,2,3,......,n)。

由题意可知:x1=x0(1+p)−xx2=x0(1+p)2−x(1+p)−xx3=x0(1+p)3−x(1+p)2−x(1+p)−x……x n=x0(1+p)n−x(1+p)n−1−⋯−x(1+p)−x=x0(1+p)n−x (1+p)n−1p=0因而有:x0(1+p)n=x (1+p)n−1p (1)则可以根据上述方程描述的函数关系求解相应的变量。

(Q1)根据公式(1),可以得到以下方程:150p(1+p)180−(1+p)180+1=0设 f(p)=150p(1+p)180−(1+p)180+1,通过计算机程序绘制f(p)的图像以判断解p的大致区间,在Matlab中编程如下:for i = 1:25t = 0.0001*i;p(i) = t;f(i) = 150*t*(1+t).^180-(1+t).^180+1;end;plot(p,f),hold on,grid on;运行以上代码得到如下图像:f(p)~p关系曲线图通过观察上图可知p∈[0.002,0.0022]。

Solution1:对于p∈[0.002,0.0022],采用二分法求解,在Matlab 中编程如下:clear;clc;x0=150000;n=180;x=1000;p0=0.002;p1=0.0022;while (abs(p1-p0)>1e-8)f0=x0*(1+p0).^n+x*(1-(1+p0).^n)/p0;f1=x0*(1+p1).^n+x*(1-(1+p1).^n)/p1;p2=(p0+p1)/2;f2=x0*(1+p2).^n+x*(1-(1+p2).^n)/p2;if (f0*f2>0 && f1*f2<0)p0=p2;elsep1=p2;end;end;p0结果得到p0=0.00208116455078125=0.2081%.所以贷款利率是0.2081%。

非线性迭代实验报告

非线性迭代实验报告

探索实验二 非线性迭代一、实验背景与实验目的迭代是数学研究中的一个非常重要的工具,通过函数或向量函数由初始结点生成迭代结点列,也可通过函数或向量函数由初值(向量)生成迭代数列或向量列。

蛛网图也是一个有用的数学工具,可以帮助理解通过一元函数由初值生成的迭代数列的敛散性,也帮助理解平衡点(两平面曲线交点)的稳定性。

本实验在Mathematica 平台上首先利用蛛网图和迭代数列研究不动点的类型;其次通过蛛网图和迭代数列研究Logistic 映射,探索周期点的性质、认识混沌现象;第三通过迭代数列或向量列求解方程(组)而寻求有效的求解方法;最后,利用结点迭代探索分形的性质。

一、 实验计划1.迭代序列与不动点 1.1程序给定实数域上光滑的实值函数)(x f 以及初值0x ,定义数列)(1n n x f x =+, ,2,1,0=n (2.2.1)}{n x 称为)(x f 的一个迭代序列。

对函数的迭代过程,我们可以用几何图象来直观地显示它——“蜘蛛网”。

运行下列Mathematica 程序:Clear[f]f[x_] := (25*x - 85)/(x + 3); (实验时需改变函数) Solve[f[x]==x , x] (求出函数的不动点)g1=Plot[f[x], {x, -10, 20}, PlotStyle -> RGBColor[1, 0, 0], DisplayFunction -> Identity];g2=Plot[x, {x, -10, 10}, PlotStyle -> RGBColor[0, 1, 0], DisplayFunction -> Identity]; x0=5.5; r = {};r0=Graphics[{RGBColor[0, 0, 1], Line[{{x0, 0}, {x0, x0}}]}]; For[i = 1, i <= 100, i++,r=Append[r, Graphics[{RGBColor[0, 0, 1], Line[{{x0, x0},{x0, f[x0]}, {f[x0], f[x0]}}] }]]; x0=f[x0] ];Show[g1, g2, r, r0, PlotRange -> {-1, 20}, (PlotRange 控制图形上下范围) DisplayFunction -> $DisplayFunction] x[0]=x0;x[i_]:=f[x[i-1]]; (定义序列) t=Table[x[i],{i,1,10}]//N ListPlot[t] (散点图)1.2实验思路首先对函数38525+-=x x y 研究不动点,需要 (1)对Plot 中{x,-10,20}可改为{x,-50,50};对PlotRange 中{ -1,20}可改为{-50,50};(2)x0=5.5中5.5分别改为-30,-20,-5,-3.001,-2.999,-1,0,1,1.5,2.5,4,4.5, 4.9,4.999,5,5.1,5.001,6,10,16,17,18,20,30;(3)对t=Table[x[i],{i,1,20}]//N 中20分别改为100,200; (4)对i<=100中100分别改为200,500,1000。

非线性方程实根的简单迭代法

非线性方程实根的简单迭代法

山东师范大学数学科学学院实验报告实验课程:非线性方程(组)的解法实验项目:非线性方程实根的简单迭代法姓名:丁建伟学号:200708020211 班级:二班专业:信计指导教师:朱爱玲老师完成日期:2010-5-10实验目的掌握非线性方程实根的简单迭代法的上机编程计算。

实验内容:问题分析和算法设计问题:用简单迭代法求方程x5-x-0.5=0的正根,其精度为10-5。

问题分析:为了满足简单迭代法的收敛条件,我们选取迭代函数x(k+1)=(x(k)+0.5)^(1/5);通过画图得知方程x5-x-0.5=0的正根在区间[1 1.2]内,于是选取初始值x(0)=1。

将初始值x(0)=1代入迭代函数进行迭代运算,直到迭代得到的x(k+1)-x(k)<10-5为止。

选取x(k+1)作为所求方程的近似正根。

主要程序代码M文件(fixpt):function[P,k,err,p]=fixpt(g,p0,tol,max1)P(1)=p0;Q(1)=1;for k=2:max1P(k)=feval(g,P(k-1));Q(k)=k;err=abs(P(k)-P(k-1));if err<tolbreak;endif k==max1disp('maximum number of iteration exceeded');endendA=zeros(k,2);for m=1:kA(m,1)=m;A(m,2)=P(m)endP(k)Errk主程序:f=inline('(x+0.5)^(1/5)'); fixpt(f,1,10^(-5),20)运行结果和总结运行结果:A =1.0000 1.00002.0000 1.08453.0000 1.09644.0000 1.09815.0000 1.09836.0000 1.09837.0000 1.0983 ans =1.0983err =4.2823e-006k =7由运行结果可知:用简单迭代法对迭代函数迭代7次便可以得到符合精度要求的方程近似解1.0983,此时近似解与精确解的误差为4.2823e-006。

非线性方程求解实验报告

非线性方程求解实验报告

} void main() { double x1,x2,a,b,e2=1; int i = 0,e1; printf("请输入根的区间:"); scanf("%lf",&a); scanf("%lf",&b); if((f(a)*f(b))<0) { printf("要求小数点后的位数:"); scanf("%d",&e1); while(e1>0) { e2=e2/10; e1--; } e2=e2/2; printf("e2=%f",e2); x1=a; printf("第%d 次迭代后结果是:%20.19f\n",i,x1); x2=f(x1); while(fabs(x2-x1)>e2) { i++; printf("第%d 次迭代后结果是:%20.19f\n",i,x2); x1=x2; x2=fdao(x1); } printf("共进行%d 次迭代过程\n",i); printf("结果是:%20.19f\n",x2); } else printf("无法进行迭代!"); }
及 实 验 步 骤
(3)撰写实验报告 2、实验 2 实验步骤: (1)程序设计 (2)计算实例 (3)撰写实验报告 1、 二分法求根实验结果如图:
调 试 过 程 及 实 验 结 果
2、 迭代法的求根实验结果如图:
总 结
附 录
1、 通过本次实验,使我掌握了使用二分法求非线性方程的根,加深了对 二分法的了解。 2、 通过本次实验,使我掌握了使用迭代法求非线性方程的根的方法,能 够使用使用迭代法正确的求出求非线性方程的根。 1、 二分法程序清单: #include<stdio.h> #include<math.h> #include<conio.h> double f(double x) { double y = 0; y = sin(x) - x*x/2; return y; } void main() { double a,b,y1,y2,temp; int e1,e2=1,n,i=0; printf("请输入根的区间:"); scanf("%lf",&a); scanf("%lf",&b); y1=f(a); y2=f(b); if((y1*y2)<0)

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

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

实验十一非线性方程组求解练习三(4)题目:用牛顿切线迭代法求x^2-2*x*eps(-x)+eps(-x)=0的根。

能否构造出其他形式的迭代序列,使其收敛到该方程的一个根。

牛顿切线迭代法程序:f=inline('x^2-2*x*exp(x)+exp(-x)');df=inline('2*x-2*exp(x)-2*x*exp(x)-exp(-x)');d2f=inline('2-4*exp(x)-2*x*exp(x)+exp(-x)');a=-1;b=1;dlt=1.0e-5;if f(a)*d2f(a)>0x0=a;elsex0=b;endm=min(abs(df(a)),abs(df(b)));k=1;while abs(f(x0))>m*dltx1=x0-f(x0)/df(x0);x0=x1;vpa(x0,7)k=k+1end结果:弦截法程序:f=inline('x^2-2*x*exp(x)+exp(-x)');x0=0;b=1;dlt=1.0e-5;k=1;while abs(f(x0))>dltx1=b-(b-x0)*f(b)/(f(b)-f(x0));x0=x1;vpa(x0,7)k=k+1end结果:练习四(1)题目:Feigenbaum在做研究时,对超越函数y=rsin(pi*x)(r为非负实数)进行了分叉和混沌的研究,试利用迭代格式x(k+1)=r*sin(pi*x(k)),做出相应的Feigenbaum图。

程序:clear;clf;hold onfor r=0.1:0.005:1x=[0.1];fori=2:150x(i)=r*sin(pi*x(i-1));endfprintf('r=%.3f\n',r)fori=101:150plot(r,x(i),'k.');endend结果:练习五(3)题目:有一艘宽为5m的长方形驳船欲驶过某河道的直角湾,经测量知河道的宽为10m 和5m,试问要驶过该直角湾驳船的长度不能超过多少米?程序:Syms xf=(((10/tan(x))+12)*sin(x)-5)/(sin(x)*cos(x)); %建立船长与角度的关系diff(f,x)z=inline('(-10/tan(x)^2*(1+tan(x)^2)*sin(x)+(10/tan(x)+12)*cos(x))/sin(x)/cos(x)-((10/tan(x)+12)* sin(x)-5)/sin(x)^2+((10/tan(x)+12)*sin(x)-5)/cos(x)^2');a=0;b=3.14;dlt=1.0e-5;while abs(b-a)>dltc=(a+b)/2if z(c)==0break;elseif z(c)*z(b)<0a=c;else b=c;endfprintf('k=%d,x=%.5f\n',k,c);k=k+1;end结果:k=1,x=1.57000k=2,x=0.78500k=3,x=0.39250k=4,x=0.58875k=5,x=0.68688k=6,x=0.73594k=7,x=0.71141k=8,x=0.72367k=9,x=0.72980k=10,x=0.73287k=11,x=0.73134k=12,x=0.73210k=13,x=0.73172k=14,x=0.73191k=15,x=0.73201k=16,x=0.73196k=17,x=0.73198k=18,x=0.73200k=19,x=0.73200结论:用程序x=0.73200;s=eval(f);求得s=21.0372。

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

深圳大学实验报告
课程名称:计算方法
实验项目名称:非线性方程迭代解法
学院:计算机与软件学院
专业、班级:09 计算机科学与技术05班
}
ax[k]=x2;
//printf("用%d次牛顿迭代求得一个根,值为:\n",j);//迭代次数
//printf("用%d次牛顿简化迭代求得一个根,值为:\n",j);//牛顿简化//sprintf("用%d次弦割迭代求得一个根,值为:\n",j);//弦割
printf("用%d次下山迭代求得一个根,值为:\n",j);//下山
printf("ax%d=%.9lf\n",k+1,ax[k]);//输出根
k++;//记录根个数
}
getchar();
getchar();
}
3.3 模型的解(含运行结果截图)
图1:牛顿迭代
图1:简化牛顿迭代
图3:弦割法
图4:下山法
3.4 结果分析
用牛顿迭代解法的收敛速度最快,求解的时候分别只用4次和3。

相关文档
最新文档