实验一非线性方程组求解实验报告
计算方法实验报告
专业班级:姓名:学号:实验成绩:
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 牛顿法迭代法的计算步骤 1)给出初始近根x0及精度e。 2)计算x x x x f f 1000)(')(?-。 3)若|x 1-x 0| 4)输出满足精度的根x 1,结束。 6. 【源程序(带注释)】 二分法 #include #include #include #include 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; else continue; } 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); } else printf("\ not root! afresh input\n"); /*表示[a,b] 区间无根,重新选择有根区间*/ getch(); return(x); } 牛顿法 #include #include #include #include #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 if(k printf("the root of f(x)=0 is x=%f, k=%d\n",x1,k); else printf("\n the iteration is failed!\n"); getch(); } 7.【实验结果与分析总结(含运行结果截图)】