文档库 最新最全的文档下载
当前位置:文档库 › 牛顿法优化设计matlab

牛顿法优化设计matlab

牛顿法优化设计matlab
牛顿法优化设计matlab

matlab实现牛顿迭代法求解非线性方程组教学文稿

matlab实现牛顿迭代法求解非线性方程组 已知非线性方程组如下 3*x1-cos(x2*x3)-1/2=0 x1^2-81*(x2+0.1)^2+sin(x3)+1.06=0 exp(-x1*x2)+20*x3+(10*pi-3)/3=0 求解要求精度达到0.00001 ———————————————————————————————— 首先建立函数fun 储存方程组编程如下将fun.m保存到工作路径中: function f=fun(x); %定义非线性方程组如下 %变量x1 x2 x3 %函数f1 f2 f3 syms x1 x2 x3 f1=3*x1-cos(x2*x3)-1/2; f2=x1^2-81*(x2+0.1)^2+sin(x3)+1.06; f3=exp(-x1*x2)+20*x3+(10*pi-3)/3; f=[f1 f2 f3]; ———————————————————————————————— 建立函数dfun 用来求方程组的雅克比矩阵将dfun.m保存到工作路径中: function df=dfun(x); %用来求解方程组的雅克比矩阵储存在dfun中 f=fun(x); df=[diff(f,'x1');diff(f,'x2');diff(f,'x3')]; df=conj(df'); ———————————————————————————————— 编程牛顿法求解非线性方程组将newton.m保存到工作路径中: function x=newton(x0,eps,N); con=0; %其中x0为迭代初值eps为精度要求N为最大迭代步数con用来记录结果是否收敛for i=1:N; f=subs(fun(x0),{'x1' 'x2' 'x3'},{x0(1) x0(2) x0(3)}); df=subs(dfun(x0),{'x1' 'x2' 'x3'},{x0(1) x0(2) x0(3)}); x=x0-f/df; for j=1: length(x0); il(i,j)=x(j); end if norm(x-x0)

牛顿迭代法解元方程组以及误差分析matlab实现

.0],;,[0 ),()(),()(),(0),()(),()(),(,.**,0],;,[),()()(),()()(,0),(),(),(])()[(),(),(),(),(),(])()[(),(),(2,),(])()[(21),(])()[(),(),()(2 )(''))((')()(: 1n 1n 110101010100000000000000000000000000200000000000 00 000fg 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 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 ,则其解可记为: 的行列式不为若系数矩阵: 附近的线性化方程组为在一元方程牛顿迭代法,类似 ,的新近似值于是就得到了根,则可得解: 的行列式不为若系数矩阵),(),( ),(),( 则两式构成方程组: 令可得: 构成二元方程组,同样与若另有一方程: 阶小项,得到线性方程忽略在方程根附近取值时,当二元函数的展开为: 开类似一元函数的泰勒展?????+-+=-+-+=?????=-+-+=-+-+??? ????-+-+=-+-+=????????-+-=--+-=-?????-=-+--=-+-==??-+??-+=??-+??-+=??-+??-+??-+??-+=-+ -+=++========η ξξ

MATLAB程序(牛顿法及线形方程组)

MATLAB 程序 1、图示牛顿迭代法(M 文件)文件名:newt_g function x = new_g(f_name,x0,xmin,xmax,n_points) clf,hold off % newton_method with graphic illustration del_x = 0.001; wid_x = xmax - xmin; dx = (xmax - xmin)/n_points; xp = xmin:dx:xmax; yp = feval(f_name,xp); plot(xp,yp);xlabel('x');ylabel('f(x)'); title('newton iteration'),hold on ymin = min(yp); ymax = max(yp); wid_y = ymax-ymin; yp = 0. * xp; plot(xp,yp) x = x0; xb = x+999; n=0; while abs(x-xb) > 0.000001 if n > 300 break; end y=feval(f_name,x); plot([x,x],[y,0]);plot(x,0,'o') fprintf(' n = % 3.0f, x = % 12.5e, y = % 12.5e \ n', n, x, y); xsc = (x-xmin)/wid_x; if n < 4, text(x,wid_y/20,[num2str(n)]), end y_driv = (feval(f_name,x + del_x) - y)/del_x; xb = x; x = xb - y/y_driv; n = n+1; plot([xb,x],[y,0]) end plot([x x],[0.05 * wid_y 0.2 * wid_y]) text( x, 0.2 * wid_y, 'final solution') plot([ x ( x - wid_x * 0.004)], [0.01 * wid_y 0.09 * wid_y]) plot([ x ( x + wid_x * 0.004)], [0.01 * wid_y 0.09 * wid_y]) 传热问题 假设一个火炉是用厚度为0.05m 的砖单层砌成的。炉内壁温度为T 0=625K, 外壁温度为T 1(未知)。由于对流和辐射造成了外壁的热量损失,温度T 1由下式决定: 44111()()()()0f k f T T T T T h T T x εσ∞=-+-+-=? 其中: k :炉壁的热传导系数,1.2W/mK ε: 发射率,0.8 T 0:内壁温度,625K T 1:外壁温度(未知),K T ∞:环境温度,298K T f :空气温度,298K H :热交换系数,20W/m 2K

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

1. 二元函数的newton 迭代法理论分析 设),(y x f z =在点),(00y x 的某一邻域内连续且有直到2阶的连续偏导数,),(00h y h x ++为该邻域内任意一点,则有 ?? ? ????? +??+≈++==00) ,(),(),(),(0000y y x x y x f y k y x f x h y x f k y h x f 其中 0x x h -=,0y -=y k 于是方程0),(=y x f 可近似表示为 0) ,(),(),(k =?? ? ????? +??+==k k y y x x k y x f y k y x f x h y x f 即 0),()(),()(),(y k =-+-+k k k k k x k k y x f y y y x f x x y x f 同理,设y)g(x,z =在点),(00y x 的某一邻域内连续且有直到2阶的连续偏导数,),(00h y h x ++为该邻域内任意一点,亦有 ?? ?????? +??+≈++==00),(),(),(),(0000y y x x y x g y k y x g x h y x g k y h x g 其中0x x h -=,0y -=y k 于是方程0),(g =y x 可近似表示为 0) ,(),(),(k =?? ? ????? +??+==k k y y x x k y x g y k y x g x h y x g 即 0),(g )(),()(),(y k =-+-+k k k k k x k k y x y y y x g x x y x g 于是得到方程组 ? ??=-+-+=-+-+0),(g )(),()(),(0),()(),()(),(y k y k k k k k k x k k k k k k k x k k y x y y y x g x x y x g y x f y y y x f x x y x f

2-8牛顿迭代法matlab

实验七 牛顿迭代法 【实验目的】 1.了解牛顿迭代法的基本概念。 2.了解牛顿迭代法的收敛性和收敛速度。 3.学习掌握MATLAB 软件有关的命令。 【实验内容】 用牛顿迭代法求方程0123=-++x x x 的近似根,误差不超过310-。 【实验准备】 1.牛顿迭代法原理 设已知方程0)(=x f 的近似根0x ,则在0x 附近)(x f 可用一阶泰勒多项式))((')()(000x x x f x f x p -+=近似代替.因此, 方程0)(=x f 可近似地表示为0)(=x p .用1x 表示0)(=x p 的根,它与0)(=x f 的根差异不大. 设0)('0≠x f ,由于1x 满足,0))((')(0100=-+x x x f x f 解得 ) (')(0001x f x f x x -= 重复这一过程,得到迭代格式 ) (')(1n n n n x f x f x x -=+ 这就是著名的牛顿迭代公式,它相应的不动点方程为 ) (')()(x f x f x x g -=. 2. 牛顿迭代法的几何解析 在0x 处作曲线的切线,切线方程为))((')(000x x x f x f y -+=。令 0=y ,可得切线与x 轴的交点坐标) (')(0001x f x f x x -=,这就是牛顿法的迭代公式。因此,牛顿法又称“切线法”。

3.牛顿迭代法的收敛性 计算可得2)] ('[)(")()('x f x f x f x g -=,设*x 是0)(=x f 的单根,有0)(',0)(**≠=x f x f ,则 0)]('[)(")()('2**** =-=x f x f x f x g , 故在*x 附近,有1)('>clear; >>x=0.5; >>for i=1:3 >>x=x-(x^3+x^2+x-1)/(3*x^2+2*x+1) >>end 可算得迭代数列的前3项0.5455, 0.5437, 0.5437.近三次迭代,就大大超过了精度要求. 练习2用牛顿迭代法求方程)0(2>=a a x .的近似正实根,由此建立一种求平方根的计算方法. 由计算可知,迭代格式为)(21)(x a x x g += .,在实验12的练习4种已经进行了讨论. 练习3用牛顿迭代法求方程1=x xe 的正根. 牛顿迭代法的迭代函数为

基于Matlab的牛顿迭代法解非线性方程组

基于Matlab 实现牛顿迭代法解非线性方程组 已知非线性方程组如下 2211221212 10801080x x x x x x x ?-++=??+-+=?? 给定初值0(0,0)T x =,要求求解精度达到0.00001 首先建立函数F(x),方程组编程如下,将F.m 保存到工作路径中: function f=F(x) f(1)=x(1)^2-10*x(1)+x(2)^2+8; f(2)=x(1)*x(2)^2+x(1)-10*x(2)+8; f=[f(1) f(2)]; 建立函数DF(x),用于求方程组的Jacobi 矩阵,将DF.m 保存到工作路径中: function df=DF(x) df=[2*x(1)-10,2*x(2);x(2)^2+1,2*x(1)*x(2)-10]; 编程牛顿迭代法解非线性方程组,将newton.m 保存到工作路径中: clear; clc x=[0,0]'; f=F(x); df=DF(x); fprintf('%d %.7f %.7f\n',0,x(1),x(2)); N=4; for i=1:N y=df\f'; x=x-y; f=F(x); df=DF(x); fprintf('%d %.7f %.7f\n',i,x(1),x(2)); if norm(y)<0.0000001 break ; else end end

运行结果如下: 0 0.0000000 0.0000000 1 0.8000000 0.8800000 2 0.9917872 0.9917117 3 0.9999752 0.9999685 4 1.0000000 1.0000000

matlab实验十七__牛顿迭代法

实验十七牛顿迭代法 【实验目的】 1.了解牛顿迭代法的基本概念。 2.了解牛顿迭代法的收敛性和收敛速度。 3.学习、掌握MATLAB软件的有关命令。 【实验内容】 用牛顿迭代法求方程3210 x x x 10-。 ++-=的近似根,误差不超过3【实验准备】 1.牛顿迭代法原理 2.牛顿迭代法的几何解析 3.牛顿迭代法的收敛性 4.牛顿迭代法的收敛速度 5.迭代过程的加速 6.迭代的MATLAB命令 MATLAB中主要用for,while等控制流命令实现迭代。 【实验重点】 1.牛顿迭代法的算法实现 2.牛顿迭代法收敛性和收敛速度 【实验难点】 1.牛顿迭代法收敛性和收敛速度 【实验方法与步骤】 练习1用牛顿迭代法求方程3210 ++-=在x=0.5附近的近似 x x x

根,误差不超过310-。 牛顿迭代法的迭代函数为 322()1()()321 f x x x x g x x x f x x x ++-=-=-'++ 相应的MATLAB 代码为 >>clear; >>x=0.5; >>for i=1:3 >>x=x-(x^3+x^2+x-1)/(3*x^2+2*x+1) >>end 可算的迭代数列的前3项0.5455,0.5437,0.5437。经三次迭代,就大大超过了精度要求。 练习2 用牛顿迭代法求方程2(0)x a a =>的近似正实根,由此建立一种求平方根的计算方法。 由计算可知,迭代格式为1()()2a g x x x =+,在实验12的练习4中已经进行了讨论。 【练习与思考】 1.用牛顿迭代法求方程ln 1x x =的近似根。 2.为求出方程310x x --=的根,在区间[1,2]内使用迭代函数进行迭代,纪录迭代数据,问迭代是否收敛?对迭代进行加速,对比加速前的数据,比较加速效果。 3.使用在不动点*x 的泰勒公式,证明牛顿迭代法收敛原理。

matlab实现牛顿迭代法求解非线性方程组

已知非线性方程组如下 3*x1-cos(x2*x3)-1/2=0 x1^2-81*(x2+^2+sin(x3)+=0 exp(-x1*x2)+20*x3+(10*pi-3)/3=0 求解要求精度达到————————————————————————————————首先建立函数fun 储存方程组编程如下将保存到工作路径中: function f=fun(x); %定义非线性方程组如下 %变量x1 x2 x3 %函数f1 f2 f3 syms x1 x2 x3 f1=3*x1-cos(x2*x3)-1/2; f2=x1^2-81*(x2+^2+sin(x3)+; f3=exp(-x1*x2)+20*x3+(10*pi-3)/3; f=[f1 f2 f3]; ————————————————————————————————建立函数dfun 用来求方程组的雅克比矩阵将保存到工作路径中: function df=dfun(x); %用来求解方程组的雅克比矩阵储存在dfun中 f=fun(x); df=[diff(f,'x1');diff(f,'x2');diff(f,'x3')]; df=conj(df');————————————————————————————————编程牛顿法求解非线性方程组将保存到工作路径中:

function x=newton(x0,eps,N); con=0; %其中x0为迭代初值eps为精度要求N为最大迭代步数con用来记录结果是否收敛for i=1:N; f=subs(fun(x0),{'x1' 'x2' 'x3'},{x0(1) x0(2) x0(3)}); df=subs(dfun(x0),{'x1' 'x2' 'x3'},{x0(1) x0(2) x0(3)}); x=x0-f/df; for j=1: length(x0); il(i,j)=x(j); end if norm(x-x0)

MATLAB计算方法迭代法牛顿法二分法实验报告

姓名 ______________ 实验报告成绩___________________________ 评语: 指导教师(签名) ____________________ 年月日 说明:指导教师评分后,实验报告交院(系)办公室保存。 实验一方程求根 一、实验目的 用各种方法求任意实函数方程f(x) =0在自变量区间[a,b]上,或某一点附近的实 根。并比较方法的优劣。 二、实验原理 (1)、二分法 b「a 对方程f(x)"在[a,b]内求根。将所给区间二分,在分点 -2判断是否 b —a x = ------- f(x)=0;若是,则有根 2 。否则,继续判断是否f(a)?f(x)”0,若是,则令b二X, 否则令a = x。否则令a = x。重复此过程直至求出方程f(x) =0在[a,b]中的近似根为止。 (2)、迭代法 将方程f(x)等价变换为x=? ( x)形式,并建立相应的迭代公式xk1二? (X )。 (3)、牛顿法 若已知方程的一个近似根X。,则函数在点X。附近可用一阶泰勒多项式 Pl(x) "(x。厂f'(X0)(x-X0)来近似,因此方程f(x)=0可近似表示为 f (X o) f(X o厂f'(Xo)(X—X ) =0设f'(X o)",则x = X o—f'(X o)。取X作为原方程新的近似根

f (X k) X1,然后将X1作为X o代入上式。迭代公式为:X k 1 = X o _ f'(X k)。 三、实验设备:MATLAB 7.0软件 四、结果预测 (1)X ii=o.O9O33 (2)X5=0.09052(3)X2=0,09052 五、实验内容 (1)、在区间[0,1]上用二分法求方程e X 10^^0的近似根,要求误差不超过 0.5 10 彳 。 f (X k) (2)、取初值X0 ",用迭代公式I =x。- f'(Xk),求方程e x 10x-2=0的近似根。要求误差不超过0.5 10 "。 (3)、取初值X0 = 0,用牛顿迭代法求方程e一10x - 2 = 0的近似根。要求误差不超过°,5 10“。 六、实验步骤与实验程序 (1)二分法 第一步:在MATLAB 7.0软件,建立一个实现二分法的MATLAB函数文件agui_bisect.m 女口下: fun cti on x=agui_bisect(f name,a,b,e) %fname为函数名,a,b为区间端点,e为精度 fa=feval(fname,a); % 把a端点代入函数,求fa fb=feval(fname,b); % 把b端点代入函数,求fb if fa*fb>0 error(' 两端函数值为同号');

牛顿迭代法 matlab程序(解线性方程组)

牛顿迭代法matlab程序(解线性方程组) 作者:佚名来源:转载发布时间:2009-3-7 16:55:53 减小字体增大字体1.功能 本程序采用牛顿法,求实系数高次代数方程 f(x)=a0x n+a1x n-1+…+a n-1x+a n=0(a n≠0)(1) 的在初始值x0附近的一个根。 2.使用说明 (1)函数语句 Y=NEWTON_1(A,N,X0,NN,EPS1) 调用M文件newton_1.m。 (2)参数说明 A n+1元素的一维实数组,输入参数,按升幂存放方程系数。 N整变量,输入参数,方程阶数。 X0 实变量,输入参数,初始迭代值。 NN整变量,输入参数,允许的最大迭代次数。 EPS1实变量,输入参数,控制根的精度。 3.方法简介 解非线性方程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。把f(x)在x0点附近展开成泰勒级数 f(x)=f(x0)+(x-x0)fˊ(x0)+(x-x0)2+… 取其线性部分,作为非线性方程f(x)=0的近似方程,则有 f(x0)+fˊ(x0)(x-x0)=0 设fˊ(x0)≠0则其解为 x1=x0-f(x0)/fˊ(x0) 再把f(x)在x1附近展开成泰勒级数,也取其线性部分作f(x)=0的近似方程。若f(x1)≠0,则得 x2=x1-f(x1)/fˊ(x1) 这样,得到牛顿法的一个迭代序列 x n+1=x n-f(x n)/fˊ(x n) 4.newton_1.m程序 function y=newton_1(a,n,x0,nn,eps1)

x(1)=x0; b=1; i=1; while(abs(b)>eps1*x(i)) i=i+1; x(i)=x(i-1)-n_f(a,n,x(i-1))/n_df(a,n,x(i-1)); b=x(i)-x(i-1); if(i>nn)error(ˊnn is fullˊ); return; end end y=x(i); i 程序中调用的n_f.m和n_df.m文件如下: function y=n_df(a,n,x)%方程一阶导数的函数 y=0.0; for i=1:n y=y+a(i)*(n+1-i)*x^(n-i); end function y=n_df(a,n,x) y=0.0; for i=1:n y=y+a(i)*(n+1-i)*x?(n-i); end 5.程序附注 (1)程序中调用n_f.m和n_df.m文件。n_f.m是待求根的实数代数方程的函数,n_d f.m是方程一阶导数的函数。由使用者自己编写。 (2)牛顿迭代法的收敛速度:如果f(x)在零点附近存在连续的二阶微商,ξ是f(x)的一个重零点,且初始值x0充分接近于ξ,那么牛顿迭代是收敛的,其收敛速度是二阶的,即平方收敛速度。 6.例题 用牛顿法求下面方程的根

最新matlab迭代法代码

1、%用不动点迭代法求方程 x-e^x+4=0的正根与负根,误差限是10^-6% disp('不动点迭代法'); n0=100; p0=-5; for i=1:n0 p=exp(p0)-4; if abs(p-p0)<=10^(-6) if p<0 disp('|p-p0|=') disp(abs(p-p0)) disp('不动点迭代法求得方程的负根为:') disp(p); break; else disp('不动点迭代法无法求出方程的负根.') end else p0=p; end end if i==n0 disp(n0) disp('次不动点迭代后无法求出方程的负根') end p1=1.7; for i=1:n0 pp=exp(p1)-4; if abs(pp-p1)<=10^(-6) if pp>0 disp('|p-p1|=') disp(abs(pp-p1)) disp('用不动点迭代法求得方程的正根为') disp(pp); else disp('用不动点迭代法无法求出方程的正根'); end break; else p1=pp; end end if i==n0 disp(n0)

disp('次不动点迭代后无法求出方程的正根') end 2、%用牛顿法求方程 x-e^x+4=0的正根与负根,误差限是10^-6 disp('牛顿法') n0=80; p0=1; for i=1:n0 p=p0-(p0-exp(p0)+4)/(1-exp(p0)); if abs(p-p0)<=10^(-6) disp('|p-p0|=') disp(abs(p-p0)) disp('用牛顿法求得方程的正根为') disp(p); break; else p0=p; end end if i==n0 disp(n0) disp('次牛顿迭代后无法求出方程的解') end p1=-3; for i=1:n0 p=p1-(p1-exp(p1)+4)/(1-exp(p1)); if abs(p-p1)<=10^(-6) disp('|p-p1|=') disp(abs(p-p1)) disp('用牛顿法求得方程的负根为') disp(p); break; else p1=p; end end if i==n0 disp(n0) disp('次牛顿迭代后无法求出方程的解') end

牛顿迭代法解二元方程组以及误差分析 matlab实现

),....,(,.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 ),由此可得到迭代序列(,则其解可记为: 的行列式不为若系数矩阵:附近的线性化方程组为在一元方程牛顿迭代法,类似 ,的新近似值于是就得到了根,则可得解: 的行列式不为若系数矩阵),(),( ),(),( 则两式构成方程组: 令可得: 构成二元方程组,同样与若另有一方程: 阶小项,得到线性方程忽略在方程根附近取值时,当二元函数的展开为: 开类似一元函数的泰勒展??? ????-+-+=-+-+=?????=-+-+=-+-+??? ????-+-+=-+-+=????????-+-=--+-=-?????-=-+--=-+-==??-+??-+=??-+??-+=??-+??-+??-+??-+=-+ -+=++========η ξξ

插值法,迭代法matlab程序

数值分析作业 姓名王建忠 学号132080202006 学院能源与动力工程 专业机械电子工程 2013年12月16日

1.用MATLAB编程实现langrage插值多项式: syms x x0=[-2,-1,0,1]; y0=[3,1,1,6]; n=length(x0); for i=1:n a=1; for j=1:n if j~=i a=expand(a*(x-x0(j))); end end b=1; for k=1:n if k~=i b=b*(x0(i)-x0(k)); end end A(i)=expand(a/b); end L=0; for p=1:n L=L+y0(p)*A(p); end L >> Language L =x^3/2 + (5*x^2)/2 + 2*x + 1 2.牛顿插值多项式程序 function [p2,z]=newTon(x,y,t) %输入参数中x,y为元素个数相等的向量,t为待估计的点,可以为数字或向量。%输出参数中p2为所求得的牛顿插值多项式,z为利用多项式所得的t的函数值。 n=length(x); chaS(1)=y(1); for i=2:n x1=x;y1=y; x1(i+1:n)=[]; y1(i+1:n)=[]; n1=length(x1); s1=0;

for j=1:n1 t1=1; for k=1:n1 if k==j continue; else t1=t1*(x1(j)-x1(k)); end end s1=s1+y1(j)/t1; end chaS(i)=s1; end b(1,:)=[zeros(1,n-1) chaS(1)]; cl=cell(1,n-1); for i=2:n u1=1; for j=1:i-1 u1=conv(u1,[1 -x(j)]); cl{i-1}=u1; end cl{i-1}=chaS(i)*cl{i-1}; b(i,:)=[zeros(1,n-i),cl{i-1}]; end p2=b(1,:); for j=2:n p2=p2+b(j,:); end if length(t)==1 rm=0; for i=1:n rm=rm+p2(i)*t^(n-i); end z=rm; else k1=length(t); rm=zeros(1,k1); for j=1:k1 for i=1:n rm(j)=rm(j)+p2(i)*t(j)^(n-i); end z=rm; end end

经典Newton-Raphson牛顿法求解非线性方程组matlab源程序

function hom [P,iter,err]=newton('f','JF',[7.8e-001;4.9e-001;3.7e-001],0.01,0.001,1000); disp(P); disp(iter); disp(err); function Y=f(x,y,z) Y=[x^2+y^2+z^2-1; 2*x^2+y^2-4*z; 3*x^2-4*y+z^2]; function y=JF(x,y,z) f1='x^2+y^2+z^2-1'; f2='2*x^2+y^2-4*z'; f3='3*x^2-4*y+z^2'; df1x=diff(sym(f1),'x');

df1y=diff(sym(f1),'y'); df1z=diff(sym(f1),'z'); df2x=diff(sym(f2),'x'); df2y=diff(sym(f2),'y'); df2z=diff(sym(f2),'z'); df3x=diff(sym(f3),'x'); df3y=diff(sym(f3),'y'); df3z=diff(sym(f3),'z'); j=[df1x,df1y,df1z;df2x,df2y,df2z;df3x,df3y,df3z]; y=(j); function [P,iter,err]=newton(F,JF,P,tolp,tolfp,max) %输入P为初始猜测值,输出P则为近似解%JF为相应的Jacobian矩阵 %tolp为P的允许误差 %tolfp为f(P)的允许误差 %max:循环次数

Y=f(F,P(1),P(2),P(3)); for k=1:max J=f(JF,P(1),P(2),P(3)); Q=P-inv(J)*Y; Z=f(F,Q(1),Q(2),Q(3)); err=norm(Q-P); P=Q; Y=Z; iter=k; if (err function homework4 [P,iter,err]=newton('f','JF',[7.8e-001;4.9e-001;3.7e-001],0.01,0.001,1000);

用MATLAB计算椭圆周长及牛顿迭代的MATLAB实现

一、 实验方案: 用二分法和牛顿迭代法(包括弦截法)编程求方程02 sin 2 =-x x 的实根,要求误差不超过410-。输出迭代次数,初始值和根的近似值;构造不同的迭代函数,用迭代法求解,并进行比较。 编写M 文件绘制该函数图形,源程序如下: function y=EX0111 x=-1:0.1:2; y=sin(x)-(x.^2)/2; plot(x,y,'r') hold on plot(x,zeros(size(x))) hold off grid 运行后可以看出,函数的根在区间[1,1.5]。所以,分析题意,编写二分法源程序如下: function y=EX0110 syms x y ; y=sin(x)-(x.^2)/2; a=1; b=1.5; delta=0.0001; ya=subs(y,a); yb=subs(y,b); N=1+round((log(b-a)-log(delta))/log(2)); for k=1:N dx=yb*(b-a)/(yb-ya+eps); c=b-dx; ab=b-a; yc=subs(y,c); if yc==0,break ; elseif ya*yc<0 b=c; yb=yc; else a=c; ya=yc; end dd=min(abs(ab),abs(yc));

if dd=derta x0=t; k=k+1; xk(k)=t; t=x0-fun(x0)./dfun(x0); if (k-1)>n error('n is full'),end end 构造新的迭代函数为k k x x sin 21?=+,编辑源程序如下: function y=iter() syms x y ; y=sqrt(2*sin(x)); x0=1; max=20; derta=0.0001; t=[x0]; x=subs(y,x0); k=0; while abs(x-x0)>=derta t=[t,x]; x0=x; x=subs(y,x0); k=k+1; if k>max disp('迭代次数超过最大次数。 ') break end end

matlab迭代法代码

1、%用不动点迭代法求方程x-e^x+4=0的正根与负根,误差限是10^-6% disp('不动点迭代法'); n0=100; p0=-5; for i=1:n0 p=exp(p0)-4; if abs(p-p0)<=10^(-6) if p<0 disp('|p-p0|=') disp(abs(p-p0)) disp('不动点迭代法求得方程的负根为:') disp(p); break; else disp('不动点迭代法无法求出方程的负根.') end else p0=p; end end if i==n0 disp(n0) disp('次不动点迭代后无法求出方程的负根') end p1=1.7; for i=1:n0 pp=exp(p1)-4; if abs(pp-p1)<=10^(-6) if pp>0 disp('|p-p1|=') disp(abs(pp-p1)) disp('用不动点迭代法求得方程的正根为') disp(pp); else disp('用不动点迭代法无法求出方程的正根'); end break; else p1=pp; end end if i==n0 disp(n0)

disp('次不动点迭代后无法求出方程的正根') end 2、%用牛顿法求方程x-e^x+4=0的正根与负根,误差限是10^-6 disp('牛顿法') n0=80; p0=1; for i=1:n0 p=p0-(p0-exp(p0)+4)/(1-exp(p0)); if abs(p-p0)<=10^(-6) disp('|p-p0|=') disp(abs(p-p0)) disp('用牛顿法求得方程的正根为') disp(p); break; else p0=p; end end if i==n0 disp(n0) disp('次牛顿迭代后无法求出方程的解') end p1=-3; for i=1:n0 p=p1-(p1-exp(p1)+4)/(1-exp(p1)); if abs(p-p1)<=10^(-6) disp('|p-p1|=') disp(abs(p-p1)) disp('用牛顿法求得方程的负根为') disp(p); break; else p1=p; end end if i==n0 disp(n0) disp('次牛顿迭代后无法求出方程的解') end

牛顿法的MATLAB实现

牛顿法的MATLAB实现 摘要:性能学习是神经网络中的一类很重要的学习规则,其旨在找到一个最优点来提高网络的性能。牛顿法是一种基于二阶泰勒级数的算法,逐步迭代来实现进一步的极小化,最后找到最优点。本文采用MATLAB编程来实现牛顿法,并通过具体的例子进行分析计算。 关键字:牛顿法;MATLAB Realise Newton’s Method by using Matlab Abstract: Performance learning is one of important learning rules in neural network ,which aims to find an optimal point to improve the performance of neural network.Newton's method is a kind of algorithm which based on second-order Taylor series, the iteration step by step to achieve further minimization, and finally find the most advantage.In this paper,by using the matlab, Newton's method is easily to realize and it also gives a demonstration to analyse and calculation. Key words: Newton’s method; MATLAB 0 引言 神经网络作为一门新兴的学科,在短短的数十年内已经被运用于多种学科领域,大量的有关神经网络机理、模型以及算法分析等方面的文章如雨后春笋般涌现。MATLAB是一种强大的工程计算和仿真软件,其基本上可以实现神经网络的各种设计方法和算法。 牛顿法是求解优化问题最早使用的经典算法之一,其基本思想是用迭代点处的一阶导数和二阶导数对目标函数进行二次函数近似,然后把模型的极小点作为新的迭代点,并不断的重复这个过程,直至求得满足精度的近似极小点。 1 神经网络的性能优化 在学习神经网络的过程中,性能学习是一种非常重要的学习规则,其目的在于调整网络参数以优化网络性能。优化过程可以分为两步,第一步是定义“性能”的标准,即找到一个衡量网络性能的定量标准,也就是性能指数;第二步是搜索减小性能指数的参数空间。 假设最小化的性能指数是一个解析函数F(x),它的各级导数均存在。那么F(x)可表示某些指定点x?上的泰勒级数展开,如下式所示 F x=F x?+d dx F x|x=x?x?x? +1 2 d2 dx2 F x|x=x?x?x?2+? +1 n!d n dx F x|x=x?x?x?n+? (1) 神经网络的性能指数并不仅仅是一个纯量x的函数,它是所有网络参数(各个权值和偏置值)的函数,参数的数量也不是确定的。因此,需要将泰勒级数展开式扩展为多变量形式。假设有下列n元函数。 F x=F(x1,x2,?,x n)(2) 把这个函数在点x?的泰勒级数展开,可以得到如下式子:

相关文档
相关文档 最新文档