当前位置:文档之家› 计算方法第二章方程求根上机报告

计算方法第二章方程求根上机报告

实验报告名称
班级:学号:姓名:成绩:
1实验目的
1)通过对二分法与牛顿迭代法作编程练习与上级运算,进一步体会二分法与牛顿迭代法的不同特点。

2)编写割线迭代法的程序,求非线性迭代法的解,并与牛顿迭代法。

2 实验内容
用牛顿法和割线法求下列方程的根
x^2-e^x=0;
x*e^x-1=0;
lgx+x-2=0;
3实验步骤
1)根据二分法和牛顿迭代法,割线法的算法编写相应的求根函数;
2)将题中所给参数带入二分法函数,确定大致区间;
3)用牛顿迭代法和割线法分别对方程进行求解;
3 程序设计
牛顿迭代法x0=1.0;
N=100;
k=0;
eps=5e-6;
delta=1e-6;
while(1)
x1=x0-fc1(x0)/fc2(x0);
k=k+1;
if k>N
disp('Newmethod failed')
break
end
if(abs(x1-x0)<delta || abs(fc1(x1))<delta)
break;
end
x0=x1; %²»ÄÜ·ÅÔÚabs(x1-x0)ǰ
end
fprintf('%f',x0)
fprintf(' %f ', abs(fc1(x1)) )
割线法
function cutline(x0,x1)
N=100;
k=0;
delta=5e-8;
while(1)
while(abs(x1-x0)>=delta)
c=x1;
x1=cutnext(x0,x1);
x0=c; %x0 x1µÝÍÆµÃµ½x1 x2 ÈÔÈ»±£´æÔÚx0 x1 end
k=k+1;
if k>N
disp('Cutline method failed')
break;
end
if(abs(x1-x0)<delta || abs(fc1(x1))<delta)
break;
end
end
fprintf('%.10f\n',x1);
function y=cutnext(a,b)
y=b-fc(b)/(fc(b)-fc(a))*(b-a);
1)原函数
function fc1=fc1(x)
fc1=x^2-exp(x);
end
导函数
function fc2=fc2(x)
fc2=2*x-exp(x);
end
2)原函数
function fc1=fc1(x)
fc1=x*exp(x)-1;
end
导数
function fc2=fc2(x)
fc2=(x+1)*exp(x);
end
3)原函数
function fc1=fc1(x)
fc1=log10(x)+x-2;
end
导函数
function fc2=fc2(x)
fc2=1/x/log(10)+1;
end
4实验结果及分析
1)
牛顿法结果
-0.7034722378
割线法结果
-0.7034674225
2)
牛顿法结果
0.5671435302
割线法结果
0.5671432904
3)
牛顿法结果
1.7553985566
割线法结果
1.7555794993
牛顿迭代法由于设置delta=1e-6,所以算出的误差e<1.0*10^-5; 割线法由于设置delta=5e-8,所以误差e<1.0*10^-7;
5总结
编程时由于将迭代的代码x0=x1放在
if(abs(x1-x0)<delta || abs(fc1(x1))<delta)
break;
end
之前导致程序没有执行就跳出,通过Debug发现了问题,将x0=x1;放到了循环体内部的最后一行,程序得以成功的运行。

6参考资料
参考文献:
1)《计算方法与实习》(袁慰平孙志忠吴宏伟闻震初)。

相关主题