11
A =
1.3310 1.2100 1.1000 1.0000 0 0.1473 0.2975 0.1390 0 0 -0.0101 -0.0033 回代求解 x
0 0.2814 0.3279 x
=0.2245 0.2814 0.3279
实验2.3:用超松弛迭代法求解如下与电路有关的方程组:
?(1/2?1/4?1/3)ea?(1/4)eb?(1/3)ec?20/2? (?1/4)ea?(1/4?1/3?5/1)eb?(1/5)ec?0??(?1/3)ea?(1/5)eb?(1/3?1/3?1/5)ec?5/3?实验代码:
a(1,1)=1/2+1/4+1/3;a(1,2)=-1/4;a(1,3)=-1/3; a(2,1)=a(1,2);a(2,2)=1/4+1/3+1/5;a(2,3)=-1/5; a(3,1)=a(1,3);a(3,2)=a(2,3);a(3,3)=1/3+1/5+1/3; y(1)=20/2;y(2)=0;y(3)=5/3; x=zeros(1,3); w=1.2; for it=1:50 error=0; for i=1:3
s=0;xb=x(i); for j=1:3
if i~=j,s=s+a(i,j)*x(j);end end
x(i)=w*(y(i)-s)/a(i,i)+(1-w)*x(i); error=error+abs(x(i)-xb); end
fprintf('It.no.=%3.0f,error=%7.2e\\n',it,error) if error/3<0.0001,break;end end x
实验结果
It.no.= 1,error=2.39e+001 It.no.= 2,error=4.75e+000 It.no.= 3,error=7.24e-001 It.no.= 4,error=2.64e-001 It.no.= 5,error=5.03e-002 It.no.= 6,error=1.36e-002 It.no.= 7,error=4.39e-003
11
12
It.no.= 8,error=1.16e-003 It.no.= 9,error=3.03e-004 It.no.= 10,error=8.55e-005 x =
13.3453 6.4401 8.5420
试验三 函数逼近与曲线拟合
实验目的:编写插值程序,验证Runge 现象,练习使用MATLAB 的若干插 值函数,掌握曲线拟合的最小二乘法,培养编程能力和解决插值问题的实践技能。
实验环境:MATLAB
实验3.1 :(编写Lagrange 插值程序) 已知数据如下: i x 0.56160 0.56280 0.56401 0.56521 i y 0.82741 0.82659 0.82577 0.81495
试用 Lagrange 插值多项式求x = 0.5626, 0.5635, 0.5645时的函数近似值。 实验代码:
function yy=Lagrange(x,y,xi) m=length(x); n=length(y);
if m~=n,error('向量X与Y的长度必须一致');end s=0; for i=1:n
z=ones(1,length(xi)); for j=1:n if j~=i
z=z.*(xi-x(j))/(x(i)-x(j)); end end
s=s+z*y(i); end yy=s;
在命令窗口调用函数M文件Lagrange: >> x=[0.5610,0.56280,0.56401,0.56521]; >> y=[0.81741,0.82659,0.82577,0.82495]; >> xi=[0.5625,0.5635,0.5645]; >> yi=Lagrange(x,y,xi) yi =
0.8262 0.8264 0.8252 >> plot(x,y,'o',xi,yi,'g^')
12
13
实验3. 2: (高次插值的Runge 现象) 在[-5,5]上取11 个等距间隔为1 的节点为插值点,对函数f(x)=5/(1+x2)进行Lagrange 插值,把f(x)和插值多项式的曲线画在一张图上。 实验代码:
function yy=Lagrange(x,y,xi) m=length(x); n=length(y);
if m~=n,error('向量X与Y的长度必须一致');end s=0;
for i=1:n
z=ones(1,length(xi)); for j=1:n if j~=i
z=z.*(xi-x(j))/(x(i)-x(j)); end end
s=s+z*y(i); end yy=s;
在命令窗口编写如下程序: >> t=-5:0.1:5; >> ft=5./(1+t.*t); >> t1=-5:1:5;
>> ft1=5./(1+t1.*t1); >> y1=Lagrange(t1,ft1,t);
>> plot(t,ft,'b:',t,y1,'g+');
13
14
实验3.3 :( 练习interp1 函数) 在[0,10] 画sin(x) 的曲线, 取插值节点:x k k = (k=0,1,…,10)和节点处的函数值 sin( ) k k y = x ,作分段线性插值,并画出相应的折线图,将两图形绘在一张图上。 实验代码:
在命令窗口输入:
>> plot(x,y,'ro',xi,yi,'r-')
14
15
>> x=0:10;y=sin(x);
>> xi=0:0.2:10;yi=interp1(x,y,xi);
>> plot(x,y,'ko',xi,yi,'k-',xi,sin(xi),'k--','LineWidth',2); >> xlabel('x');ylabel('sin(x)')
实验3.4 :(练习csape 和ppval 函数) 已知平方根表如下: X 1 4 9 16 X 1 2 3 4
已知第一类边界条件 f ′(1) = 1/ 2, f ′(16) = 1/ 8,求三次样条插值函数 S(x),并计算5 的近似值。 实验代码:
x=[1 4 9 16];y=[1 2 3 4];
pp=csape(x,y,'complete',[1/2,1/8]) pp =
form: 'pp'
breaks: [1 4 9 16] coefs: [3x4 double] pieces: 3 order: 4 dim: 1 >>
>> pp.coefs
15

