1、精品word不动点迭代法和牛顿法非线性方程组求解MATLAB 程序设计实践课程考核 、编程实现以下科学计算算法,并举一例应用之.(参考书籍精 通科学计算,王正林等著,电子工业出版社, 年) “不动点迭代法和牛顿法非线性方程组求解” (1).不动点迭代法非线性方程组求解(a).算法说明:设含有n个未知数与n个方程的非线性方程组记为:F(x)=0,然后把上述方程组改为便于迭代的等价形式:x=(x),由此就可以构造不动点迭代法的迭代公式:如果得到的序列xk满足,则就是的不动点,这样就可以求出非线性方程组的解.在MATLAB中编程实现的非线性方程组的不动点迭代法的函数为:mulStablePoint。
2、功能:用不动点迭代法求非线性方程组的一个解。调用格式:r,n=mulStablePoint(x0,eps).其中,x0为初始迭代向量; eps为迭代精度; r为求出的解向量; n为迭代步数。(b)。流程图:(c).源程序代码:function r,n=mulStablePoint(x0,eps)%不动点迭代法求非线性方程组的一个解%初始迭代向量:x0%迭代精度:eps%解向量:r迭代步数:nif nargin=1 eps=1。0e-4;end r=myf(x0);n=1;tol=1;while toleps x0=r; r=myf(x0); 迭代公式 tol=norm(r-x0); 注意矩阵的
3、误差求法,norm为矩阵的欧几里德范数 n=n+1; if(n100000) 迭代步数控制 disp(迭代步数太多,可能不收敛!); return; endend举例说明:解:首先建立myf.m函数文件,输入以下内容:function f=myf(x)f(1)=0.5*sin(x(1))+0。1cos(x(2)*x(1)-x(1);f(2)=0.5*cos(x(1)-0.1sin(x(2))x(2);在MATLAB命令窗口中输入:(2)。牛顿法非线性方程组求解(a).算法说明:设非线性方程组为,其中, 牛顿迭代法的迭代公式为:求解步骤为:(1)给出初始值;(2)对n=1,2,3计算F(xn)和
4、F(xn);(3)求出xn+1,并进行精度控制。更一般的牛顿法迭代公式为:当 = F(x0)时,就得到简化牛顿法.在MATLAB中编程实现的非线性方程组的牛顿迭代法的函数为:mulNewton。功能:用牛顿迭代法求非线性方程组的一个解。调用格式:r,n=mulNewton(x0,eps).其中,x0为初始迭代向量; eps为迭代精度; r为求出的解向量; n为迭代步数。(b).流程图:(c)。源程序代码:function r,n=mulNewton(x0,eps)%牛顿迭代法求非线性方程组的一个解%初始迭代向量x0%迭代精度eps解向量r迭代步数nif nargin=1 eps=1.0e4;e
5、nd r=x0myf(x0)/dmyf(x0);n=1;tol=1;while toleps x0=r; r=x0myf(x0)/dmyf(x0); 核心迭代公式 tol=norm(rx0); n=n+1; if(n100000) %迭代步数控制 disp(迭代步数太多,可能不收敛!); return; endend另一种方法为简化牛顿迭代法,如下:在MATLAB中编程实现的非线性方程组的简化牛顿迭代法的函数为:mulSimNewton。功能:用简化牛顿迭代法求非线性方程组的一个解。调用格式:r,n=mulSimNewton(x0,eps)。其中,x0为初始迭代向量; eps为迭代精度; r为
6、求出的解向量; n为迭代步数。源程序代码:function r,n=mulSimNewton(x0,eps)%简化牛顿迭代法求非线性方程组的一个解%初始迭代向量x0迭代精度eps%解向量r迭代步数nif nargin=1 eps=1。0e-4;end r=x0-myf(x0)/dmyf(x0);c=dmyf(x0);n=1;tol=1;while toleps x0=r; r=x0myf(x0)/c; tol=norm(r-x0); n=n+1; if(n100000) disp(迭代步数太多,可能不收敛!); return; endend举例说明:解:首先建立myf.m函数文件,输入以下内容
7、:function f=myf(x)f(1)=0。5sin(x(1))+0.1cos(x(2)x(1))x(1);f(2)=0.5*cos(x(1)-0。1*sin(x(2)-x(2);f=f(1) f(2);再建立dmyf。m导数的雅可比矩阵,输入以下内容:function df=dmyf(x)df=0.5cos(x(1))-0.1x(2)*sin(x(2)x(1))-1-0.1x(1)sin(x(2)*x(1))0.5*sin(x(1))0。1*cos(x(2)1;然后在MATLAB命令窗口中输入:2、编程解决以下科学计算问题1)5有3个多项式试进行下列操作:(1)求(2)求的根(3)当x
8、取矩阵A的每一个元素,求的值。其中:A (4)当以矩阵A为自变量时,求的值。其中A的值与第(3)题相同。流程图源程序代码:求积函数 conv(x,y)%求平方根函数 roots(p)%逐一取用矩阵中的数值函数 polyval(p,x)取用矩阵的函数 polyvalm(p,A)是按照矩阵运算规则计算多项式的值多项式 p2,p3%矩阵 A p1=1 2 4 0 5; p2=1 2;p3=1 2 3;p0=conv(p2,p3) 对p2和p3求积p=p1+0 p0 %对p1和p0进行求和x=roots(p) %对p进行求根x=1 1。2 -1。4;0.75 2 3.5;0 5 2。5;x0=poly
9、val(p,x) %将矩阵x中的每一个数值代入p中A=1 1.2 1.4;0。75 2 3.5;0 5 2。5;x0=polyvalm(p,A) %将矩阵A代入p中 结果 2)2.用三次多项式拟合下面数据,做出图形. x=0 0。2 0。4 0。6 0.8 1 y=0 7。78 10。68 8。37 3。97 0解:【.m文件程序代码】 x= 0:0。2:1; y=0 7。78 10.68 8.37 3。97 0; a= polyfit (x,y,3) a = 41。5625 101。6071 60.0768 -0.1179 x1=0: 0.05: 1; y1=a(4)+a(3)*x1+a(2
10、)*x1。2+a(1)*x1.3; plot (x, y, *) hold on plot (x1, y1, -r)运行结果:流程图:3.拟合函数有如下形式: y=exp(x)试确定系数,并分别用线性尺度和对数尺度做出拟合曲线的图形。x=0.0129 0。0247 0。0530 0。1550 0.3010 0.4710 0。8020 1。2700 1。4300 2.4600 y=9。5600 8.1845 5.2612 2。7917 2.2611 1.7340 1.2370 1.0674 1。1171 0。7620解:【.m文件程序代码】function jisuanx=0。0129 0.02
11、47 0.053 0。155 0。301 0。471 0.802 1。27 1.43 2。46;y=9.56 8。1845 5.2616 2.7917 2.2611 1.734 1.237 1。0674 1。1171 0。762;p=polyfit(x,log(y),1);a=exp(p(2))b=p(1)x0=0.0129:0。0001:2。46;y0=4。4717。exp(0。9238。*x0);subplot(2,1,1)plot(x0,y0)hold onsubplot(2,1,2)loglog(x0,y0)hold on jisuana = 4。4717b = -0.9238流程图:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1