当前位置:文档之家› 非线性方程组求解的牛顿迭代法用MATLAB实现

非线性方程组求解的牛顿迭代法用MATLAB实现

先画出函数图像找出大概位置
ezplot('exp(x^(-2)+y^(-2))=4',[-6,6,-6,6])%画出函数g
y=2.4:0.001:3.8;
x=(tan(1)+4-y.^(3/2)).^3;
hold on
plot(x,y)%画出函数f
将图放大观察
由图可以看出两个交点的大概位置是(-1,3.4)和(1,2.6)。
1. 二元函数的newton迭代法理论分析
设 在点 的某一邻域内连续且有直到2阶的连续偏导数, 为该邻域内任意一点,则有
其中 ,
于是方程 可近似表示为

同理,设 在点 的某一邻域内连续且有直到2阶的连续偏导数, 为该邻域内任意一点,亦有
其中 ,
于是方程 可近似表示为

于是得到方程组
求解这个方程组,当
所以将这两个点作为初始值进行迭代计算,MATLAB编程如下:
form=1:2;%循环两次计算出两个解
ifm<2
x=1;
y=2.6;
else
x=-1;
y=3.4;
end
xk=0;
yk=0;
i=0;
t=1;
whilet>0.000001%设置计算精度
i=i+1;
f=(tan(1)+4-y^(3/2))^3-x;

从而
(1)
记符号
于是(1)式可改写为
(2)迭代公式为:(3)通过迭代公式(3)可以迭代出当 时, 的值,当 ( 为给定的误差控制项)时,原方程组的根即为 。
2.newton迭代法求解给定的线性方程组
方程组
其中
求解过程如下
于是迭代公式为
为了解出正负轴的两个解,需要对函数f进行变形。
3.MATLAB编程实现过程
g=exp(x^(-2)+y^(-2))-4;
fx=-1;
fy=3*(tan(1)+4-y^(3/2))^2*(-1.5*y^(1/2));
gx=-2*x^(-3)*exp(x^(-2)+y^(-2));
gy=-2*y^(-3)*exp(x^(-2)+y^(-2));
xk=x+(f*gy-g*fy)/(gx*fy-fx*gy);
yk=y+(g*fx-f*gx)/(gx*fy-fx*gy);
t=abs(xk-x);
x=xk;
y=yk;
end
sprintf('i=%d\nx=%8.8f\ny=%8.8f',i,x,y)%输出计算次数及计算结果
end
计算结果如下图所示
计算精度为0.000001,迭代5次计算出结果
相关主题