实验二 非线性方程求根实验报告文档格式.docx
《实验二 非线性方程求根实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《实验二 非线性方程求根实验报告文档格式.docx(8页珍藏版)》请在冰点文库上搜索。
学号:
专业班级:
通信工程
实验二非线性方程求根
1目的与要求
(1)进一步熟练掌握求解非线性方程的二分法与Newton迭代法。
(2)掌握二分法与Newton迭代法的算法,能运用程序设计语言和此方法编制软件求出任意指定一元三次方程在给定点附近的根。
2实验内容
用二分法和Newton迭代法求方程
在1.5附近的根,精确到
,输出每次的迭代结果并统计所用的迭代次数。
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<
stdio.h>
math.h>
doublefun1(doublex)
{
returnx*x*x-x-1;
}
doublefun2(doublex1,doublex2)
return(x1+x2)/2;
main()
{
intn=1;
floata,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)<
b=c;
}
elseif(fun1(c)*fun1(b)<
a=c;
else
break;
当前计算次数为%d计算结果为%lf\n"
n,fun2(a,b));
n++;
不符合二分法使用条件,请重新输入:
\n"
Newton迭代法
doublefun2(doublex)
return3*x*x-1;
doubleroot(doublenum)
doublex1,x0;
x0=num;
if(fun2(x0)==0)
Algorithmfailed.Exit!
"
x1=x0-fun1(x0)/fun2(x0);
Newton迭代法求根\n"
while(fabs(x1-x0)>
n,x1);
x0=x1;
root(1.5);
5实验结果与分析
(1)二分法求根结果界面
(2)Newton迭代法求根结果界面
分析:
(1)本次试验两种算法均采用了while循环及if-else判断语句,编程函数并由主函数调用,较简单的实现了二分法与Newton迭代法的编程任务。
(2)由本次试验结果来看,同等精度条件下,Newton迭代法收敛快,稳定好,计算次数少,是求解非线性方程根的有效方法。
但是同时可以看出二分法具有计算简单,程序容易实现,可在大范围内求根的特点。
(3)此次试验较好的完成了任务,巩固了课堂知识。