实验一
一、 实验目的与要求
用二分法和牛顿迭代法(包括弦截法)编程求方程
的实根,要求误差不超过
。输出迭代次数,初始值和根的近似值;构造不同的迭代函数,用迭代法求解,并进行比较。
二、 实验
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
编写M文件绘制该函数图形,源程序如下:
function y=EX0111
x=-1:0.1:2;
y=sin(x)-(x.^2)/2;
plot(x,y,'r')
hold on
plot(x,zeros(size(x)))
hold off
grid
运行后可以看出,函数的根在区间[1,1.5]。所以,分析题意,编写二分法源程序如下:
function y=EX0110
syms x y;
y=sin(x)-(x.^2)/2;
a=1;
b=1.5;
delta=0.0001;
ya=subs(y,a);
yb=subs(y,b);
N=1+round((log(b-a)-log(delta))/log(2));
for k=1:N
dx=yb*(b-a)/(yb-ya+eps);
c=b-dx;
ab=b-a;
yc=subs(y,c);
if yc==0,break;
elseif ya*yc<0
b=c;
yb=yc;
else
a=c;
ya=yc;
end
dd=min(abs(ab),abs(yc));
if dd
=derta
x0=t;
k=k+1;
xk(k)=t;
t=x0-fun(x0)./dfun(x0);
if (k-1)>n error('n is full'),end
end
构造新的迭代函数为
,编辑源程序如下:
function y=iter()
syms x y;
y=sqrt(2*sin(x));
x0=1;
max=20;
derta=0.0001;
t=[x0];
x=subs(y,x0);
k=0;
while abs(x-x0)>=derta
t=[t,x];
x0=x;
x=subs(y,x0);
k=k+1;
if k>max
disp('迭代次数超过最大次数。 ')
break
end
end
t
三、 实验结果和数据处理
运行绘制函数图形源文件得如下图像,从图像中可看出,该函数的根所在的区间为[1,1.5]。
图1
运行运用二分法编程的源程序得如下数据:
图2
运行运用牛顿迭代法编程的源程序,在命令框中输入如下命令:
[xk,k]=newtoneq(1,20,0.0001)
运行得出以下数据:
图3
运行新构造的迭代函数源程序求解:
图4
实验二
一、实验目的与要求
已知椭圆的周长可以表示成
(
),取a=1。针对
从0.1到0.9(步长h=0.1)分别求出周长s。(用Romberg积分方法)
二、实验方案
编辑实现Romberg积分方法的源程序,得如下M文件:
function [s,n,t]=rombint(fun,a,b,tol)
format long
s=10000;
s0=0;
k=2;
t(1,1)=(b-a)*(fun(a)+fun(b))/2;
while (abs(s-s0)>tol)
h=(b-a)/2^(k-1);
w=0;
if(h~=0)
for i=1:(2^(k-1)-1)
w=w+fun(a+i*h);
end
t(k,1)=h*(fun(a)/2+w+fun(b)/2);
for l=2:k
for i=1;(k-l+1)
t(i,l)=(4^(l-1)*t(i+1,l-1)-t(i,l-1))/(4^(l-1)-1);
end
end
s=t(1,k);
s0=t(1,k-1);
k=k+1;
n=k-1;
else s=s0
n=-k;
end
end
并在运行时,依次在命令框中输入如下命令:
fun=inline('sqrt(1+
^2*cos(t).^2)','t');
s=rombint(fun,0,2*pi,1e-6)
其中,
依次取值为0.1、0.2、0.3、0.4、0.5、0.6、0.7、0.8、0.9进行运算。
三、实验结果和数据处理
运算结果如下: