func=@(x)(( 2-exp(x))./10) x(1)=a; wucha=1;m=1;
while wucha> 5*10^(-4) p(m+1)=func(x(m));
q(m+1)=func(p(m+1));
x(m+1)=q(m+1)-((q(m+1)-p(m+1))^2)./(q(m+1)-2*p(m+1)+x(m));
wucha=abs(x(m+1)-x(m)); m=m+1; if m>1000 break; end end
format long y=x(m-1); m=m-1;
运行结果y =0.090483741803596 m =2
(4) 取初值x0 0,并用牛顿迭代法;
function x=newtondiedai(x0) x=x0;
for i=1:10000
y=x-(exp(x)+10*x-2)./(exp(x)+10);x=y; y=x-(exp(x)+10*x-2)./(exp(x)+10); if abs(x-y)<0.0001 disp('迭代次数'); i break; end end
(5) 分析绝对误差。
|x-x*|=
| 0.090525101307255-0.0905|= 0. 000025101307255<1/(2*(0+1))* 10^(-(11-1)=0.5*10^(-10)
3. 钢水包使用次数多以后,钢包的容积增大,数据如下:
在command window输入一下函数值调用 x = [2:16] ;
y = [6.42 8.2 9.58 9.5 9.7 10 9.93 9.99 10.49 10.59 10.60 10.8 10.6 10.9 10.76 ]; x0=[ 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 10.5 11.5 12.5 13.5 14.5 15.5 15.7]; [y1 x1]=lagrange(x,y,x0) matlab程序:
function [y1 x1]=lagrange(x,y,x0) %x0为拉格朗日差值函数点 nx=length(x);ny=length(y); if nx~=ny
warning('向量x与y的长度应该相等') return end
m=length(x0); x1=x0; for i=1:m; t=0.0;
for j=1:nx; u=1.0; for k=1:nx; if k~=j
u=u*(x0(i)-x(k))/(x(j)-x(k)); end end t=t+u*y(j); end y1(i)=t; end
xp=2:0.1:16; %这里的点的间距细一些. yp=spline(x,y,xp); t=polyfit(x,y,4);
disp('最小二乘法拟合函数解析式'); L=poly2sym(t,'x')
disp('显示拉格朗日插值x0结果') yf=polyval(t,xp); subplot(321)
plot(xp,yp,'g-','LineWidth',2);title('样条插值曲线'); subplot(322)
plot(x,y,'r--','LineWidth',2) ;title('原始数据点图'); subplot(323)
plot(xp,yf,'b+','LineWidth',2);title('最小二乘法拟合'); subplot(324)
plot(x1,y1,'y-','LineWidth',2);