牛顿迭代法解二元方程组以及误差分析 matlab实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
),....,(,.0],;,[0
),()(),()(),(0),()(),()(),(,.**,0],;,[),()()(),()()(,0),(),(),(])()[(),(),(),(),(),(])()[(),(),(2,),(])()[(21),(])()[(),(),()(2
)(''))((')()(:
11001n 1n 110101010100000000000000000000000000200000000000
00
000y x y x g f g f fg g f y y g f g f g f fg x x g g f f y x g y y y x g x x y x g y x f y y y x f x x y x f y x y x y x g f g f fg g f y y g f g f g f fg x x g f g f fg g f y y g f g f g f fg x x g g f f y x g y x g y y y x g x x y x f y x f y y y x f x x y x g y x f y x g y y y x x x y x g y x g y x f y x g y x f y y y x x x y x f y x f y x y x f y y y x x x y x f y y y x x x y x f y x f x x f x x x f x f x f x y y x x
x n n x y y x y y y x y x n n y n n n x n n n n n y n n n x n n n n n x y y x x
x x y y x y y x y y x x x x y y x y y y x y x y x y x y y x x y y x x y x y y x x ),由此可得到迭代序列(,则其解可记为:
的行列式不为若系数矩阵:
附近的线性化方程组为在一元方程牛顿迭代法,类似
,的新近似值于是就得到了根,则可得解:
的行列式不为若系数矩阵),(),(
),(),(
则两式构成方程组:
令可得:
构成二元方程组,同样与若另有一方程:
阶小项,得到线性方程忽略在方程根附近取值时,当二元函数的展开为:
开类似一元函数的泰勒展⎪⎪⎩
⎪⎪⎨⎧-+-+=-+-+=⎪⎩⎪⎨⎧=-+-+=-+-+⎪⎪⎩
⎪⎪⎨⎧-+-+=-+-+=⇒⎪⎪⎩⎪⎪⎨⎧-+-=--+-=-⎪⎩⎪⎨⎧-=-+--=-+-==∂∂-+∂∂-+=∂∂-+∂∂-+=∂∂-+∂∂-+∂∂-+∂∂-+=-+
-+=++========η
ξξ
举例,给定方程组为:
4)exp(),(1
)4arctan(),(222331-+=--+=--y x y x g y x y x f
先用matlab 自带函数solve 解此方程组,确定牛顿迭代时的初值范围,得到根为:
⎩
⎨⎧==8493476.0848937.108y x 作图验证:
此组值确为方程的根。
通过观察我们可以发现y 的取值必须大于0。这在程序中必须说明,如果迭代过程中y 小于0,则此迭代法发散。
误差分析:因为范数等价的原因,我们选择2范数。将两次相邻迭代差差范数的比值,即相对误的与,2x x n n 1+n x 的2范数作为误差,存储与一个向量或矩阵中,并作出曲线图,观察迭代过程中误差的变化情况。
如选初值为(12,0.3),得到误差图形为:
选初值为(12,1.2),误差图为:
我们可以发现误差在前3-5次迭代的时候迅速下降,但是中间会有上升的过程,直至最后误差达到我们设定的误差值。由此猜想迭代过程可能漏掉了一些根,利用作图,得到曲线如下:
可以发现还有两组根,用牛顿迭代法只能得到一组值,可能是因为所给方程比较特殊,它的定义域中x,y 均不能为0,导致函数不连续。 另外,也可能因为函数不连续,导致初值只能在根的附件变化时才能得到收敛的结果。
因此我们不妨将初值选的稍微小一些,如:[1,2],得到根为
⎩
⎨⎧==2.7637 y 0.8925x 选初值为[-1,4],得到根为
⎩
⎨⎧==3.4880y -0.8757x 综上所述,此方程组有三组根,不同的初值,会得到不同的解的情况,也会有不同的误差情况。初值选得越接近真值,误差变化程度越小,迭代次数也越少。
程序在另三个附件中。
同理,对于n 元函数方程组,我们有:
.n .)('.
)],...,(),...,,...,,([)(.
n 1n )(')(.,...,,0],...,;......;,...,,[),...,,()(...)()(....
....),...,,()(...)()()()
()(1)()(2)(11)()()1()()()()1(21112111)
1(1012200201n 0202)1(2101)1(1
002011102102)1(21101)1(1有限时的解编程,依然可以得到类似二元方程组,那么利用牛顿迭代法,为系数矩阵是一行向量为值迭代得到的各自变量的次
是第的值,次迭代得到的各自变量是第牛顿迭代序列依二元方程组,可得到的值。
同样可解出,
的行列式不为若系数矩阵,以此类推。
知数第一次迭代后的值的初始值,第一个未
分别表示第一个未知数,求导,
个方程对第二个未知数表示,第式中,如)()()()()()()()()()()()()(matlab X F x x fn x x x f X F X X X F X F X X x x x f f f f f x x x n f x x x f f x x f x x f x x x x x f f x x f x x f x x n n n n n n n n n n n n n n n n nxn nx xn x x nx n nxn n n nx nx n xn n n x x +-=⎪⎪⎩⎪⎪⎨⎧-=-++-+--=-++-+-++