实验 3 螺旋线与平面的交点
3.1 实验目的本次实验目的在于使学生能够借助于计算机,利用数学软件解决一些具体的非线性方程的求根问题 。
3.2 实验内容螺旋线与平面相交的情况多种多样,根据螺旋线与平面方程的不同可以相交,也可以不相交。在相交的情况下,可以交于一点,也可以交于好多点。对于各种相交的情况,要求其交点的坐标并不是一件容易的事。本次实验就以此为背景讨论几种方程求根方法。以下面的具体问题为例:已知螺旋线的参数方程为?c o s4?x,?s in4?y,
z, 80,平面的方程为 025.0 zyx,求该螺旋线与平面的交点。
3.3 问题求解将采用多种方法求螺旋线与平面的交点坐标,包括二分法、迭代法和弦截法等。
将螺旋线的参数方程代入平面方程后可得,025.0s i n4c o s4
等价变形得 5.02s in4c o s4,
0 5 10 15 20 25 30
- 1 2
- 1 0
-8
-6
-4
-2
0
2
4
6
luoxuanxianyuzhixian.m
theta=0:0.01:8*pi;
y1=4*(cos(theta)+sin(theta));
y2=2-0.5*theta;
plot(theta,y1,theta,y2)
从图形可见在 80 内直线与三角曲线有 4个交点。
Matlab
(1) 区间二分法
.
(1) 区间二分法定理:若函数 )(xf 在区间 [a,b]上连续,且 0)()(?bfaf,则
0)(?xf 在区间内至少有一个根。
(1) 区间二分法定理:若函数 )(xf 在区间 [a,b]上连续,且 0)()(?bfaf,则
0)(?xf 在区间内至少有一个根。
[ ]a b0)(?af
0)(?bf.
][
0)2(||0)2(||0)2( bafbafbaf
[
[
]
]
]
.
.
.
0)2( baf
][
][
][
0)(?af
0)43(||0)43(||0)43( bafbafbaf
0)43( baf 0)2( baf
0)8 35(||0)8 35(||0)8 35( bafbafbaf
[0)43( baf 0)8 35( baf
取每次二分小区间的中点可得一个收敛序列n
iix 1?
,该实数序列的极就是方程的根。即
*lim xx nn

nn
abxx
2
*
若要求精度
nxx *
,则要做等分区间的次数至少是:
1lo g 2 ab
0 5 10 15 20 25 30
- 1 2
- 1 0
-8
-6
-4
-2
0
2
4
6
★ 计算 65 内的交点
Matlab实际上,
5679965- 2,2 0 1 0 4 8 3)5(?f
3 8 0 5 7 63,7 2 3 0 1 9 1 5)6(?f
05.0)s i n( c o s4)(f
erfengfaqiujie.m
a=5;b=6;x1=a;x2=b;
while abs(x1-x2)>0.000001
x3=(x1+x2)/2;
f3=4*cos(x3)+4*sin(x3)+0.5*x3-2;
if f3~=0
f1=4*cos(x1)+4*sin(x1)+0.5*x1-2;
f2=4*cos(x2)+4*sin(x2)+0.5*x2-2;
if f1*f3<0
x2=x3;
else
x1=x3;
end
end
end
x3
执行结果为,x3 =5.37587451934814
该点的近似坐标为:
( 2.46346668293075,-3.15140157740808,5.37587451934814)
查看图形
continue
back
-4
-2
0
2
4
-4
-2
0
2
4
0
5
10
15
20
25
30
x? á
y? á
z
á
Matlab
(2) 牛顿迭代法设方程 0)(?xf 有实数根,若能够将方程等价地转化成 )(xgx?,
取一个初始值
0x
代入 )(xgx? 的右端算得 )(
01 xgx?
,依次再计算
)( 12 xgx?,类推可得序列
)(1 kk xgx,2,1,0?k,
1kkx,
称此序列为由 迭代函数 )(xg 产生的 迭代序列,
0x
为 迭代初始值 。
若该迭代序列收敛,则它的极限就是方程 0)(?xf 的一个根 。
kx
称为方程根的 k次近似值,称使得迭代法收敛的初始值的取值范围为 迭代收敛域 。 图示点击例 3.1 容易验证方程 032 xx 有两个不相等的实数根。
输入 MATLAB软件命令 solve(‘x^2+x-3=0’) 执行结果为,
ans = [ -1/2+1/2*13^(1/2)]
[ -1/2-1/2*13^(1/2)]
该方程可等价地转化为 23 xx,由此而决定的迭代格式为
21 3 kk xx3,2,1,0?k
,continue
xy?
)(xgy?
0x1x2x
back
21 3 kk xx3,2,1,0?k,
,显然该迭代序列不可能收敛到方程的根。若取迭代初始值 0
0?x
但是,方程也可以等价地转化为 xx 3,此时若取迭代初始值
00?x,
用迭代法
kk xx 313,2,1,0?k

则经过 34次迭代后就可得到方程的一个正的近似解 3 0 2 7 7 5 6 3 7 7.1?x
kk xx 313,2,1,0?k

则经过 22次迭代后就可得到方程的一个负的近似解若继续取迭代初始值 0
0?x

3 0 2 7 7 5 6 3 7 7.2x
Run-iteration
x=-5:0.1:3;y1=x;y2=sqrt(3-x);
plot(x,y1,x,y2)
hold on
x0=1;x1=sqrt(3-x0);s=[];ss=[];
while abs(x1-x0)>0.000001
x0=x1;s=[s,x0];x1=sqrt(3-x0);ss=[ss,x1];
end
plot(s,ss,‘r*')
continue
figure
-5 -4 -3 -2 -1 0 1 2 3
-5
-4
-3
-2
-1
0
1
2
3
back
关于迭代法的收敛性有著名的李普希兹定理若李普希兹条件成立,则用第 k次近似值代替方程的精确解 其误差*x,
有下面的估计式:
||1||1||1 1|| 0111* xxLLxxLLxxLxx
k
kkkkk
同时由
|)(|1||1|| 0001* xxgLLxxLLxx
kk
k
可得要满足精度至少要做的迭代次数,
L
xxg
L
k
ln
|)(|
)1(ln
00?
1l o g |)(|
)1(
00

xxg
L
L
即,
★ 牛顿迭代法迭代格式,
)(
)(
1
k
k
kk xf
xfxx

,,2,1,0?k
迭代函数,
)(
)()(
xf
xfxxg

几何意义
continue
关于牛顿迭代法有下面的收敛性定理,
定理 对于方程 0)(?xf,若存在区间 ],[ ba,使得
0)()(?bfaf(1)
(2) )(xf 在区间 ],[ ba 上连续且符号一致 ;;
(3) 对于任意的 ],[ bax?,0)( xf ;
则当迭代初始值 ],[
0 bax?
,且 )( 0xf 与 )(
0xf 保持同号时,
牛顿迭代法产生的迭代序列kx 收敛于方程在区间 ],[ ba 上的唯一解 *x 。
xkx
1?kx2?k
x
y
o
)( xfy?
几何意义,
它的第 1?k 次迭代值
1?kx
就是曲线 )(xfy? 在点 ))(,(
kk xfx
处切线 ))(()( kkk xxxfxfy 与 x 轴交点的横作标,所以通常也称牛顿迭代法为牛顿切线迭代法或者切线法 。 back
★ 计算 109 内的交点 Matlab
可以证明在区间 109 内函数 25.0s i n4c o s4)(f
满足牛顿迭代法收敛的条件,迭代公式为:
5.0)s i n( co s4
25.0)s i n( co s4
1

kk
kkk
kk
,,2,1,0?k
选取初始迭代值 9.5,编写程序,
niudunqiexianfa.m
x0=9.6;
x1=x0-(4*(cos(x0)+sin(x0))+0.5*x0-2)/(4*(cos(x0)-sin(x0))+0.5);
while abs(x1-x0)>0.000001
x0=x1;
x1=x1-(4*(cos(x1)+sin(x1))+0.5*x1-2)/(4*(cos(x1)-
sin(x1))+0.5);
end
x1执行的结果是 x1 =9.10779101692532,此时
015-3 9 4 0 0 2 5 1 e- 1,7 7 6 3 5 6 86 9 2 5 3 2 )9,1 0 7 7 9 1 0 1(?f
交点坐标,
( -3.80071565817249,1.24682014970983,9.10779101692532)
Matlab
-4
-2
0
2
4
-4
-2
0
2
4
0
5
10
15
20
25
30
x? á
y? á
z
á
(3) 弦截法牛顿切线法虽然收敛速度快,具有二次收敛速度,但是每次迭代时都要
)(xf计算函数 的导数值 )(xf? 试想当函数,)(xf 很复杂时,仍使用牛顿下面介绍的弦截法则是避开了求导数运算,具体又分为单点弦截法和双点弦截法。
迭代法就有点不方便了 。
★ 单点弦截法条件:设方程 0)(?xf 在区间 ),( ba 内有一个单根?x,)(xf 在区间
),( ba 上不变号,不妨假设如下图所示,
)(xfy?
y
x 大图单点弦截法 的基本思想是:连接两个端点 ))(,( afa 与 ))(,( bfb 作弦
)()()()()( axab afbfafxf
此弦与 x 轴交点的横坐标设为
)()()( )(1 abafbf afax
如果 0)(
1?xf
,则 1xx 即为所求根,否则选取点 ))(,( 11 xfx 和点
))(,( afa (该点的选取要满足条件 )(af 与 )(xf 同号,并改记 ))(,( 00 xfx
再做弦
)()()()()( 1
01
01
1 xxxx
xfxfxfxf?

此弦与 x 轴交点的横坐标设为
)()()( )( 01
01
1
12 xxxfxf
xfxx?

依次类推写成迭代格式即为
)()()( )( 0
0
1 xxxfxf
xfxx
k
k
k
kk
,3,2,1,0?k
continue
back
★ 双点弦截法
)()()( )( 0
0
1 xxxfxf
xfxx
k
k
k
kk
3,2,1,0?k
单点弦截法迭代公式若在做第 1?k 次迭代时,将迭代公式中的点 ))(,(
00 xfx
换成点
))(,( 11 kk xfx 即得 双点弦截法
(有时也称 快速弦截法 ),具体迭代法如下
)()()( )( 1
1
1?
kk
kk
k
kk xxxfxf
xfxx3,2,1,0?k,
双点弦截迭代法较单点弦截迭代法收敛的速度快,但一般情况下比牛顿迭代法慢,是超线性收敛的,收敛阶数是
6 1 8.12 51p
双点弦截法是牛顿迭代法的变形,实际上可以看作是用差商
k
k
xx
xfxf
)()(
代替函数 )(xf 在
kx
处导数 )(
kxf?
的结果,其最大的优点就是避免了求导数。
★ 用双点弦截法计算 5.116.10 内的交点 Matlab
shuangjiefaqiujiaodian.m
sx=[]; sx(1)=11.5; sx(2)=10.6; i=1;
while abs(sx(i+1)-sx(i))>10^(-6)
i=i+1;
sx(i+1)=sx(i)-(4*(cos(sx(i))+sin(sx(i)))+0.5*sx(i)-2)/
((4*(cos(sx(i))+sin(sx(i)))+0.5*sx(i)-2)-
(4*(cos(sx(i-1))+sin(sx(i-1)))+0.5*sx(i-1)-2))*
(sx(i)-sx(i-1))
end
执行的结果是 11.10229958942128,此时交点的近似坐标为
( 0.42609124741995,-3.97724103479687,11.10229958942128)
Matlab
-4
-2
0
2
4
-4
-2
0
2
4
0
5
10
15
20
25
30
x? á
y? á
z
á
三个交点的图示:
-4
-2
0
2
4
-4
-2
0
2
4
0
5
10
15
20
25
30
x? á
y? á
z
á
Matlab
螺旋线与平面
Matlab
螺旋线与平面相交的程序:
x=0:0.01:8*pi; y1=4*cos(x); y2=4*sin(x); y3=x;
a1=0.42609124741995; b1=-3.97724103479687; c1=11.10229958942128;
a2=-3.80071565817249; b2=1.24682014970983; c2=9.10779101692532;
a3=2.46346668293075; b3=-3.15140157740808; c3=5.37587451934814;
xx=-4:0.1:4; yy=xx; [xxx,yyy]=meshgrid(xx,yy); zzz=2*(2-xxx-yyy);
plot3(y1,y2,y3,a1,b1,c1,'r*',a2,b2,c2,'g*',a3,b3,c3,'b*')
hold on
surf(xxx,yyy,zzz)
xlabel(‘x轴 ')
ylabel('y轴 ')
zlabel('z轴 ')
★ 抛物线截法(密勒 (Muller)法)
★ 搜索算法
Thank you for your cooperation