选择特殊符号
选择搜索类型
请输入搜索
设
用牛顿迭代法解非线性方程,是把非线性方程
已经证明,如果是连续的,并且待求的零点是孤立的,那么在零点周围存在一个区域,只要初始值位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
利用迭代算法解决问题,需要做好以下三个方面的工作:
一、确定迭代变量
在可以用迭代算法解决的问题中,至少存在一个可直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式
所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制
在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析得出可用来结束迭代过程的条件。
#include#include doublefunc(doublex)//举例函数 { returnx*x*x*x-3*x*x*x 1.5*x*x-4.0; } doublefunc1(doublex)//导函数 { return4*x*x*x-9*x*x 3*x; } intNewton(double*x,doubleprecision,intmaxcyc)//maxcyc迭代次数 { doublex1,x0; intk; x0=*x; for(k=0;k 牛顿迭代法C 代码
//此函数是用来求一元3次方程ax^3 bx^2 cx d=0的解 //比如x^3-27=0,我们就可以输入100-27,这样我们就可以得到一个解 #include#include usingnamespacestd; intmain() { doublediedai(doublea,doubleb,doublec,doubled,doublex); doublea,b,c,d; doublex=10000.0; cout<<"请依次输入方程四个系数:"; cin>>a>>b>>c>>d; x=diedai(a,b,c,d,x); cout< 0.000001) { x=x-(a*x*x*x b*x*x c*x d)/(3*a*x*x 2*b*x c); } returnx; } 求一元3次方程3个解的程序:
#include#include usingnamespacestd;vector v;//stlvector链型数组 vector ::iteratorit;//vector迭代器intx0=5;doublea,b,c,d;doubleabs(doubley){while(y<0)y=-y;returny;}doublef(doublex){returna*x*x*x b*x*x c*x d;}doublefd(doublex){return3*a*x*x 2*b*x c;}boolu;//用来判断是否重复voidnewton(inta1,intb1,intc1,intd1) { for(x0=-5000;x0<=5000;x0 )//在一个大区域中逐个点用牛顿法,可找出大多数3次方程所有根 { doublex1=x0; while(abs(f(x1))>0.001) { doublex=x1; x1=x-f(x)/fd(x); } for(it=v.begin();it!=v.end();it ) { if(abs((*it-x1))<0.01){u=1;break;} } if(u!=1&&x1<1000000000) { cout< >a>>b>>c>>d; newton(a,b,c,d); } 牛顿迭代法Python代码
Python代码以实例展示求解方程
的根。 deff(x): return(x-3)**3'''定义f(x)=(x-3)^3'''deffd(x): return3*((x-3)**2)'''定义f'(x)=3*((x-3)^2)'''defnewtonMethod(n,assum): time=n x=assum Next=0 A=f(x) B=fd(x) print('A=' str(A) ',B=' str(B) ',time=' str(time)) iff(x)==0.0: returntime,x else: Next=x-A/B print('Nextx=' str(Next)) ifabs(A-f(Next))<1e-6: print('Meetf(x)=0,x=' str(Next))'''设置迭代跳出条件,同时输出满足f(x)=0的x值''' else: returnnewtonMethod(n 1,Next)newtonMethod(0,4.0)'''设置从0开始计数,x0=4.0'''牛顿迭代法Java代码
Java实现开平方的牛顿迭代法. 求
的算术平方根就是求 的正根, 得迭代公式: . 代码中取初始值 , 误差控制在 . publicstaticdoublesqrt(doublec){if(c<0){returnDouble.NaN; } doublee=1e-15; doublex=c; doubley=(x c/x)/2; while(Math.abs(x-y)>e){ x=y; y=(x c/x)/2; } returnx; }牛顿迭代法JavaScript代码
/** *@functionnewtonMethod该函数是牛顿迭代法的js实现他可以用于求任意一元高次方程的解。(简单版) *@paramfn要求根的函数 *@paramdfn要求根的函数的导函数 *@paramx0在函数x定义域上任意取的一个x值x0 *@paramn期望迭代的次数 *@return该方程的近似解 **/functionnewtonMethod(fn,dfn,x0,n){ consty=fn(x0)//在函数有效区间内选取任意x0求出点(x0,y)其中y=fn(x0) constk=dfn(x0)//使用导函数求出过点(x0,y)的切线斜率k constb=y-k*x0//将点(x0,y)代入直线方程y=kx b求出常数b。 constx=(0-b)/k//将y=0代入直线方程y=kx b求出该方程的一次近似解x if(--n>0){ returnnewtonMethod(fn,dfn,x,n)//当n趋于无穷大时得到该方程的精确解 } returnx }//化简函数(simplify)functionNTMethod(fn=_=>_,dfn=_=>1,x0=0,n=1){ constx=x0-fn(x0)/dfn(x0) if(n===1){ returnx//返回一个关于函数fn(x)的近似解 } returnNTMethod(fn,dfn,x,--n) }// 优化函数表达方式 用户差参数代替迭代次数function NTMethod(fn = _ => _, dfn = _ => 1, x0 = 0, instrumentalError) { const x = x0 - fn(x0) / dfn(x0) if (fn(x) < instrumentalError && fn(x) > -instrumentalError) { return x } return NTMethod(fn, dfn, x, instrumentalError) }牛顿迭代法Fortran代码
program newton
implicit none real::a real::b real::fb real::counter integer::n !real,parameter::zero=0.00001 real::fx,fx1 real::df write(*,*)"enter a number:" read(*,*)a do counter=1,a-1 fx=sin(counter) fx1=sin(counter 1) if (fx*fx1 df=cos(counter) fx=sin(counter) write(*,*)"初始值取:" write(*,*)counter do n=1,25,1 b=counter-fx/df fb=sin(b) end do write(*,*)"数值解:" write(*,*)b end if end do stop end program
牛顿迭代法其他迭代算法
牛顿迭代法欧几里德算法
最经典的迭代算法是欧几里德算法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:
定理:gcd(a,b) = gcd(b,a mod b)
证明:a可以表示成a = kb r,则r = a mod b。假设d是a,b的一个公约数,则有 a%d==0,b%d==0,而r = a - kb,因此r%d==0 ,因此d是(b,a mod b)的公约数
同理,假设d 是(b,a mod b)的公约数,则 b%d==0,r%d==0 ,但是a = kb r ,因此d也是(a,b)的公约数。
因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证。
欧几里德算法就是根据这个原理来做的,欧几里德算法又叫辗转相除法,它是一个反复迭代执行,直到余数等于0停止的步骤,这实际上是一个循环结构。其算法用C语言描述为:
intGcd_2(inta,intb)/*欧几里德算法求a,b的最大公约数*/ { if(a<=0||b<=0)/*预防错误*/ return0; inttemp; while(b>0)/*b总是表示较小的那个数,若不是则交换a,b的值*/ { temp=a%b;/*迭代关系式*/ a=b; b=temp; } returna; }从上面的程序我们可以看到a,b是迭代变量,迭代关系是temp = a % b;根据迭代关系我们可以由旧值推出新值,然后循环执a = b; b = temp;直到迭代过程结束(余数为0)。在这里a好比那个胆小鬼,总是从b手中接过位置,而b则是那个努力向前冲的先锋。
牛顿迭代法斐波那契数列
还有一个很典型的例子是斐波那契(Fibonacci)数列。斐波那契数列为:0、1、1、2、3、5、8、13、21、…,即 fib⑴=0; fib⑵=1;fib(n)=fib(n-1) fib(n-2) (当n>2时)。
在n>2时,fib(n)总可以由fib(n-1)和fib(n-2)得到,由旧值递推出新值,这是一个典型的迭代关系,所以我们可以考虑迭代算法。
intFib(intn)//斐波那契(Fibonacci)数列 { if(n<1)/*预防错误*/ return0; if(n==1||n==2)/*特殊值,无需迭代*/ return1; intf1=1,f2=1,fn;/*迭代变量*/ inti; for(i=3;i<=n; i)/*用i的值来限制迭代的次数*/ { fn=f1 f2;/*迭代关系式*/ f1=f2;//f1和f2迭代前进,其中f2在f1的前面 f2=fn; } returnfn; }
多数方程不存在求根公式,因此求精确根非常困难,甚至不可解,从而寻找方程的近似根就显得特别重要。方法使用函数
公元前三世纪,古希腊的阿基米德在研究解决抛物弓形的面积、球和球冠面积、螺线下面积和旋转双曲体的体积的问题中,就隐含着近代积分学的思想.作为微分学基础的极限理论来说,早在古代以有比较清楚的论述.比如我国...
违法建筑,应该拆。
去实地考察一下啊,看下周边环境,生活设施什么的,早晚都去看一次,如果可以找已经住在里面的业主问下情况最好了。我朋友家就是在哪里,据说他们前面两栋的高楼, 房产证有点麻烦 后面的不清楚了
function y=f(x)
y=f(x);%函数f(x)的表达式
end
function z=h(x)
z=h(x);%函数h(x)的表达式,函数h(x)是函数f(x)的一阶导数
end
x=X;%迭代初值
i=0;%迭代次数计算
while i
x0=X-f(X)/h(X);%牛顿迭代格式
if abs(x0-X)>0.01;%收敛判断
X=x0;
else break
end
i=i 1;
end
fprintf(' %s%.4f %s%d','X=',X,'i=',i) %输出结果
开式蜗杆传动计算的迭代法
通过对齿形系数的曲线拟合,提出了开式蜗杆传动设计计算的简单迭代方法
基于迭代法沥青拌合楼称量系统研究
通过MTLAB软件利用数学迭代法,模拟了间歇式拌合楼骨料称量系统;通过对模拟结果分析,验证了迭代控制算法可以较为理想地优化控制系统。
非牛顿流体广泛存在于生活、生产和大自然之中。
绝大多数生物流体都属于现在所定义的非牛顿流体。人身上血液、淋巴液、囊液等多种体液,以及像细胞质那样的"半流体"都属于非牛顿流体。
高分子聚合物的浓溶液和悬浮液等一般为非牛顿流体。聚乙烯、聚丙烯酰胺、聚氯乙烯、尼龙6、PVS、赛璐珞、涤纶、橡胶溶液、各种工程塑料、化纤的熔体、溶液等,都是非牛顿流体。石油、泥浆、水煤浆、陶瓷浆、纸浆、油漆、油墨、牙膏、家蚕丝再生溶液、钻井用的洗井液和完井液、磁浆、某些感光材料的涂液、泡沫、液晶、高含沙水流、泥石流、地幔等也都是非牛顿流体。
食品工业中的番茄汁、淀粉液、蛋清、苹果浆、浓糖水、酱油、果酱、炼乳、琼脂、土豆浆、熔化巧克力、面团、米粉团、以及鱼糜、肉糜等各种糜状食品物料也都是非牛顿流体。
如果非牛顿流体被迫从一个大容器,流进一根毛细管,再从毛细管流出时,可发现射流的直径比毛细管的直径大。射流的直径与毛细管直径之比,称为模片胀大率(或称为挤出物胀大比)。对牛顿流体,它依赖于雷诺数,其值约在0.88~1.12之间。而对于高分子熔体或浓溶液,其值大得多,甚至可超过10。一般来说,模片胀大率是流动速率与毛细管长度的函数。模片胀大现象,在口模设计中十分重要。聚合物熔体从一根矩形截面的管口流出时,管截面长边处的胀大,比短边处的胀大更加显著。尤其在管截面的长边中央胀得最大。因此,如果要求生产出的产品的截面是矩形的,口模的形状就不能是矩形,而必须是四边中间都凹进去的形状。
1944年Weissenberg在英国伦敦帝国学院,公开表演了一个有趣的实验:在一只有黏弹性流体(非牛顿流体的一种)的烧杯里,旋转实验杆。对于牛顿流体,由于离心力的作用,液面将呈凹形;而对于黏弹性流体,却向杯中心流动,并沿杆向上爬,液面变成凸形,甚至在实验杆旋转速度很低时,也可以观察到这一现象。在设计混合器时,必须考虑爬杆效应的影响。同样,在设计非牛顿流体的输运泵时,也应考虑和利用这一效应。
对于牛顿流体来说,在虹吸实验时,如果将虹吸管提离液面,虹吸马上就会停止。但对高分子液体,如聚异丁烯的汽油溶液和百分之一的POX水溶液,或聚醣在水中的轻微凝肢体系等,都很容易表演无管虹吸实验。将管子慢慢地从容器拨起时,可以看到虽然管子己不再插在液体里,液体仍源源不断地从杯中抽出,继续流进管里。甚至更简单些,连虹吸管都不要,将装满该液体的烧杯微倾,使液体流下,该过程一旦开始,就不会中止,直到杯中液体都流光。这种无管虹吸的特性,是合成纤维具备可纺性的基础。
非牛顿流体显示出的另一奇妙性质,是湍流减阻。人们观察到,如果在牛顿流体中加入少量聚合物,则在给定的速率下,可以看到显著的压差降。湍流一直是困扰理论物理和流体力学界未解决的难题。然而在牛顿流体中加入少量高聚物添加剂,却出现了减阻效应。有人报告:在加入高聚物添加剂后,测得猝发周期加大了,认为是高分子链的作用。虽然湍流减阻效应的道理尚未弄得很清楚,却己有不错的应用。在消防水中添加少量聚乙烯氧化物,可使消防车龙头喷出的水的扬程提高一倍以上。应用高聚物添加剂,还能改善气蚀发生过程及其破坏作用。
非牛顿流体除具有以上几种有趣的性质外,还有其他一些受到人们重视的奇妙特性,如拔丝性(能拉伸成极细的细丝,可见"春蚕到死丝方尽"一文),剪切变稀(可见"腱鞘囊肿治愈记"一文),连滴效应(其自由射流形成的小滴之间有液流小杆相连),液流反弹等。
在自然界中的食品,不符合牛顿流体定律的流体占大多数。大量的食品,包括浓果汁、果酱、全鸡蛋、菜泥、浓牛奶以及巧克力浆等固液悬浮体都是非牛顿流体,下面的经验公式往往用来表示这些流体的剪切应力与剪切速率之间的关系:
τ=k(γ)n(1 n为流态特性指数,k为稠度系数。若为牛顿流体公式,则n=1,此时k为粘度。上式中,设ηa=k(γ)n-1,则与牛顿流体相似的非牛顿流体的状态方程可写为: τ=ηaγ(2) 此式可以得到:η与ηa表示同样物理特性,有相同的量纲,即ηa为表观粘度(apparentviscosity)。表观粘度ηa是流体内部阻力的总和。然而与η不同的是,ηa是γ的函数,与k和n有关。换句话说ηa是指非牛顿流体在某一流速的粘度。 对于很多非牛顿流体,Τ只有在大于一定值Τ0时(也就是说,流体在获得能量克服一个屈服应力值以后),流动才能发生。Bulkey与Hershel提出的表示公式如下: Τ=Τ0 k(γ)n(3) Τ0表示屈服应力(yieldstress)。由于公式中的Τ0和n范围不同,将非牛顿流动分为以下五类 :胶变性流体假塑性流动
当粘度随着剪切速率或剪切应力的增大而减少,对应于公式(1)中的0
粘度随着剪切速率的增大而增大的流动,也称为剪切增稠流动(shear thickening flow)。在公式τ=k(γ)n(1
液体只有在应力超过τ0时才开始流动。塑性流动的流动特性曲线不通过原点。宾汉流动(Binghamflow)是指当应力超过τ0时,流动特性符合牛顿流体规律的流动。而非宾汉流动是指不符合牛顿流动规律流动。把具有这两种流动特性的液体分别称为宾汉流体或非宾汉流体。食品中的浓缩肉汁就是一种典型的宾汉流体。卡松在研究了油漆流动的网架结构与剪切速率的关系后发现剪切应力和剪切速率有如下关系:
σ1/2=σ01/2 ηaε1/2
一部分非宾汉流体液态食品的流动规律符合卡松公式,如番茄酱、巧克力等。
触变性是指在振动、搅拌、摇动时,液体的流动性增加,粘性减少,静置后,过段时间发现流动又变困难的现象。也叫摇溶性流动。例如,番茄调味酱、蛋黄酱等,在容器中放置时间一长,倾倒时,就变得很难流动。但只要将容器猛烈摇动,或用力搅拌一会,它们就变得很容易流动。再长时间放置时,它们又会变得流动困难。触变性流动的发生是由于粒子之间形成的结合构造,随着剪切应力的增加而受到破坏,导致的粘性减少。但这些粒子间结合构造在停止应力作用时,恢复需要一段时间,逐渐形成。因此,剪切速率减慢时的曲线在前次增加时的曲线的下方,形成了与流动时间有关的滞变回环。材料的构造破坏的越大,体现为滞变回路包围面积越大。触变性对口感的影响体现为爽口柔和的感觉。
液体随着流动时间延长,与触变性流动相反,变得越来越粘稠的现象。胶变性流动的食品给人以粘稠的口感。当流速加大时,达到最大值后,再减低流速,减低流速时的流动曲线反而在加大流速曲线的上方。这种现象也被称为逆触变现象。这是因为流动促进了液体粒子间构造的形成。
胶变性流体是时间相关性流体,也可被当作触变型流体,但二者还是有明显的不同点,就是胶变流体静止时不会重建它的结构。由胶变性流体的流动特性曲线可见,随着剪切速率的增大(上行线)和减小(下行线)这样一个循环,形成了一个滞回环,表明了流体的粘度会随着时间的变化而发生改变,并且剪切速率减慢时的曲线在剪切速率增加时的曲线的上方,这些现象表明流体是一种胶变性流体 。
1.流体在搅拌过程中其表观粘度逐渐变大;
2.在时间为零时剪切力最小,随时间延长而逐渐延长而逐增加,并稳定在某一定值;
3.剪切速率愈大(即搅拌俞剧烈),剪切力变化愈大;
4.一旦在某个时间停止搅拌,剪切应力就又到搅拌开始时的初始值。2100433B