251 410 221 157 218 187 data = *
datb = *
A = +002 *
B =
+002 * xx =
x0 =
?xx???xxx的计算结果为:
(2)
N 10 20 30 40 condestA e+002 e+002 e+002 e+002 cond2A condA2 e+002 e+002 50 60 70 80 90 100 e+002 e+004 e+003 e+002 e+003 e+003 e+003 e+002 e+003 e+002 e+002 e+002 e+002 e+002 ⑶ >> sy5_2
please input n:n=8 n = 8 x0 = x00 = datx = 给出对
?xx???xxx的估计是:
?xx???xxx的理论结果是:
结果相差: (4)
n 4 5 6 7 8 9 cond1Hi e+004 e+005 e+007 e+008 e+010 e+012 cond2Hi e+004 e+005 e+007 e+008 e+010 e+011 condinfHi e+004 e+005 e+007 e+008 e+010 e+012 10 11 e+013 e+015 e+013 e+014 e+013 e+015 讨论:
线性代数方程组的性态与条件数有着很重要的关系,既矩阵的条件数是刻画矩阵性质的一个重要的依据,条件数越大,矩阵“病态”性越严重,在解线性代数方程组的过程中较容易产生比较大的误差,则在实际问题的操作过程中,我们必须要减少对条件数来求解,把条件数较大的矩阵化成条件数较小的矩阵来进行求解。
实验总结:
在本次实验中,使我们知道了矩阵条件数对线性代数方程组求解的影响,条件数越大,对最后解的影响的越大,hilbert矩阵是一个很”病态”的矩阵,他的条件数随着阶数的增加而增大,每增加一阶,条件数就增大一个数量级,在求解的过程中要尽量避免hilbert矩阵
学号:06450210 姓名:万轩
实验七 非线性方程求根
实验(迭代法、初始值与收敛性) 实验目的:初步认识非线性问题的迭代法与线性问题迭代法的差别,探讨迭代法及初始值与迭代收敛性的关系。
问题提出:迭代法是求解非线性方程的基本思想方法,与线性方程的情况一样,其构造方法可以有多种多样,但关键是怎样才能使迭代收敛且有较快的收敛速度。
实验内容:考虑一个简单的代数方程 x2?x?1?0
针对上述方程,可以构造多种迭代法,如
2xn?1?xn?1(7.1)
xn?1?1?1xn(7.2)
xn?1?xn?1(7.3)
在实轴上取初始值x0,请分别用迭代()-()作实验,记录各算法的迭代过程。 实验要求:
(1)取定某个初始值,分别计算()-()迭代结果,它们的收敛性如何?重复选取不同的初始值,反复实验。请自选设计一种比较形象的记录方式(如利用Matlab的图形功能),分析三种迭代法的收敛性与初值选取的关系。
(2)对三个迭代法中的某个,取不同的初始值进行迭代,结果如何?试分析迭代法对不同的初值是否有差异?
(3)线性方程组迭代法的收敛性是不依赖初始值选取的。比较线性与非线性问题迭代的差异,有何结论和问题。
实验过程:
程序: clear clc
s=input('请输入要运行的方程,运行第几个输入几s='); clf
if s==1 %决定坐标轴的范围和初始值
a=;b=; y00=0; x00=input('请输入第一个函数的初值:x00='); elseif s==2
a=;b=; y00=0; x00=input('请输入第二个函数的初值:x00='); elseif s==3
a=0;b=2; y00=0; x00=input('请输入第三个函数的初值:x00='); end
x=linspace(a,b,80);
y0=x; %计算直线y=x
y1=zxy7f(x,s); %计算迭代函数y=f(x) clear y; y=[y0;y1];
if s==1 %画图
plot(x,y,'linewidth',1) legend('y=x','y=f1')
title('x(n+1)=[x(n)]^2-1') %输出标题 elseif s==2
plot(x,y,'linewidth',2) legend('y=x','y=f2')
title('x(n+1)=1+1/x(n)') elseif s==3
plot(x,y,'linewidth',3) legend('y=x','y=f3')
title('x(n+1)=sqrt[x(n)+1]') end
hold on
plot([a b],[0,0],'k-',[0 0],[a b],'k-') axis([a,b,a,b]) %画坐标轴 z=[];
for i=1:15 %画蛛网图,迭代过程为n=15次
xt(1)=x00;yt(1)=y00; %决定始点坐标 xt(2)=zxy7f(xt(1),s); %决定终点坐标 yt(2)=zxy7f(xt(1),s);
zxyplot7(xt,yt, %画蛛网图 if i<=5
pause %按任意键逐次观察前5次迭代的蛛网图 end
x00=xt(2);y00=yt(2); %将本次迭代的终点作为下次的始点 z=[z,xt(1)]; %保存迭代点 end 保存为:
function y=zxy7f(x,s) if s==1
y=(x.*x-1); elseif s==2
y=(1+1./x); elseif s==3
y=sqrt(x+1); end 保存为: function out=zxyplot7(x,y,p)%画一次迭代的蛛网图,改变p调节箭头的大小 u(1)=0;v(1)=(y(2)-y(1)); %画出始点(x(1),y(1))终点(x(2),y(2))的有
向折线段
u(2)=eps;v(2)=eps; h=quiver([x(1) x(1)], [y(1) y(2)],u,v,p); set(h,'color','red'); hold on
u(1)=(x(2)-x(1));v(1)=0; u(2)=eps;v(2)=eps; h=quiver([x(1) x(2)], [y(2) y(2)],u,v,p); set(h,'color','red');
plot([x(1) x(1) x(2)],[y(1) y(2) y(2)],'') 保存为:
数值实验结果及分析: