中文名 | 牛頓迭代法 | 外文名 | Newton's method |
---|---|---|---|
別????名 | 牛頓-拉夫遜(拉弗森)方法 | 提出時(shí)間 | 17世紀(jì) |
設(shè)
用牛頓迭代法解非線性方程,是把非線性方程
已經(jīng)證明,如果是連續(xù)的,并且待求的零點(diǎn)是孤立的,那么在零點(diǎn)周圍存在一個(gè)區(qū)域,只要初始值位于這個(gè)鄰近區(qū)域內(nèi),那么牛頓法必定收斂。 并且,如果不為0, 那么牛頓法將具有平方收斂的性能. 粗略的說,這意味著每迭代一次,牛頓法結(jié)果的有效數(shù)字將增加一倍。
迭代法也稱輾轉(zhuǎn)法,是一種不斷用變量的舊值遞推新值的過程,跟迭代法相對(duì)應(yīng)的是直接法(或者稱為一次解法),即一次性解決問題。迭代算法是用計(jì)算機(jī)解決問題的一種基本方法。它利用計(jì)算機(jī)運(yùn)算速度快、適合做重復(fù)性操作的特點(diǎn),讓計(jì)算機(jī)對(duì)一組指令(或一定步驟)重復(fù)執(zhí)行,在每次執(zhí)行這組指令(或這些步驟)時(shí),都從變量的原值推出它的一個(gè)新值。
利用迭代算法解決問題,需要做好以下三個(gè)方面的工作:
一、確定迭代變量
在可以用迭代算法解決的問題中,至少存在一個(gè)可直接或間接地不斷由舊值遞推出新值的變量,這個(gè)變量就是迭代變量。
二、建立迭代關(guān)系式
所謂迭代關(guān)系式,指如何從變量的前一個(gè)值推出其下一個(gè)值的公式(或關(guān)系)。迭代關(guān)系式的建立是解決迭代問題的關(guān)鍵,通??梢允褂眠f推或倒推的方法來完成。
三、對(duì)迭代過程進(jìn)行控制
在什么時(shí)候結(jié)束迭代過程?這是編寫迭代程序必須考慮的問題。不能讓迭代過程無休止地執(zhí)行下去。迭代過程的控制通??煞譃閮煞N情況:一種是所需的迭代次數(shù)是個(gè)確定的值,可以計(jì)算出來;另一種是所需的迭代次數(shù)無法確定。對(duì)于前一種情況,可以構(gòu)建一個(gè)固定次數(shù)的循環(huán)來實(shí)現(xiàn)對(duì)迭代過程的控制;對(duì)于后一種情況,需要進(jìn)一步分析得出可用來結(jié)束迭代過程的條件。
#include#include doublefunc(doublex)//舉例函數(shù) { returnx*x*x*x-3*x*x*x 1.5*x*x-4.0; } doublefunc1(doublex)//導(dǎo)函數(shù) { return4*x*x*x-9*x*x 3*x; } intNewton(double*x,doubleprecision,intmaxcyc)//maxcyc迭代次數(shù) { doublex1,x0; intk; x0=*x; for(k=0;k 牛頓迭代法C 代碼
//此函數(shù)是用來求一元3次方程ax^3 bx^2 cx d=0的解 //比如x^3-27=0,我們就可以輸入100-27,這樣我們就可以得到一個(gè)解 #include#include usingnamespacestd; intmain() { doublediedai(doublea,doubleb,doublec,doubled,doublex); doublea,b,c,d; doublex=10000.0; cout<<"請(qǐng)依次輸入方程四個(gè)系數(shù):"; 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個(gè)解的程序:
#include#include usingnamespacestd;vector v;//stlvector鏈型數(shù)組 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;//用來判斷是否重復(fù)voidnewton(inta1,intb1,intc1,intd1) { for(x0=-5000;x0<=5000;x0 )//在一個(gè)大區(qū)域中逐個(gè)點(diǎn)用牛頓法,可找出大多數(shù)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代碼以實(shí)例展示求解方程
的根。 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))'''設(shè)置迭代跳出條件,同時(shí)輸出滿足f(x)=0的x值''' else: returnnewtonMethod(n 1,Next)newtonMethod(0,4.0)'''設(shè)置從0開始計(jì)數(shù),x0=4.0'''牛頓迭代法Java代碼
Java實(shí)現(xiàn)開平方的牛頓迭代法. 求
的算術(shù)平方根就是求 的正根, 得迭代公式: . 代碼中取初始值 , 誤差控制在 . 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該函數(shù)是牛頓迭代法的js實(shí)現(xiàn)他可以用于求任意一元高次方程的解。(簡單版) *@paramfn要求根的函數(shù) *@paramdfn要求根的函數(shù)的導(dǎo)函數(shù) *@paramx0在函數(shù)x定義域上任意取的一個(gè)x值x0 *@paramn期望迭代的次數(shù) *@return該方程的近似解 **/functionnewtonMethod(fn,dfn,x0,n){ consty=fn(x0)//在函數(shù)有效區(qū)間內(nèi)選取任意x0求出點(diǎn)(x0,y)其中y=fn(x0) constk=dfn(x0)//使用導(dǎo)函數(shù)求出過點(diǎn)(x0,y)的切線斜率k constb=y-k*x0//將點(diǎn)(x0,y)代入直線方程y=kx b求出常數(shù)b。 constx=(0-b)/k//將y=0代入直線方程y=kx b求出該方程的一次近似解x if(--n>0){ returnnewtonMethod(fn,dfn,x,n)//當(dāng)n趨于無窮大時(shí)得到該方程的精確解 } returnx }//化簡函數(shù)(simplify)functionNTMethod(fn=_=>_,dfn=_=>1,x0=0,n=1){ constx=x0-fn(x0)/dfn(x0) if(n===1){ returnx//返回一個(gè)關(guān)于函數(shù)fn(x)的近似解 } returnNTMethod(fn,dfn,x,--n) }// 優(yōu)化函數(shù)表達(dá)方式 用戶差參數(shù)代替迭代次數(shù)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(*,*)"數(shù)值解:" write(*,*)b end if end do stop end program
牛頓迭代法其他迭代算法
牛頓迭代法歐幾里德算法
最經(jīng)典的迭代算法是歐幾里德算法,用于計(jì)算兩個(gè)整數(shù)a,b的最大公約數(shù)。其計(jì)算原理依賴于下面的定理:
定理:gcd(a,b) = gcd(b,a mod b)
證明:a可以表示成a = kb r,則r = a mod b。假設(shè)d是a,b的一個(gè)公約數(shù),則有 a%d==0,b%d==0,而r = a - kb,因此r%d==0 ,因此d是(b,a mod b)的公約數(shù)
同理,假設(shè)d 是(b,a mod b)的公約數(shù),則 b%d==0,r%d==0 ,但是a = kb r ,因此d也是(a,b)的公約數(shù)。
因此(a,b)和(b,a mod b)的公約數(shù)是一樣的,其最大公約數(shù)也必然相等,得證。
歐幾里德算法就是根據(jù)這個(gè)原理來做的,歐幾里德算法又叫輾轉(zhuǎn)相除法,它是一個(gè)反復(fù)迭代執(zhí)行,直到余數(shù)等于0停止的步驟,這實(shí)際上是一個(gè)循環(huán)結(jié)構(gòu)。其算法用C語言描述為:
intGcd_2(inta,intb)/*歐幾里德算法求a,b的最大公約數(shù)*/ { if(a<=0||b<=0)/*預(yù)防錯(cuò)誤*/ return0; inttemp; while(b>0)/*b總是表示較小的那個(gè)數(shù),若不是則交換a,b的值*/ { temp=a%b;/*迭代關(guān)系式*/ a=b; b=temp; } returna; }從上面的程序我們可以看到a,b是迭代變量,迭代關(guān)系是temp = a % b;根據(jù)迭代關(guān)系我們可以由舊值推出新值,然后循環(huán)執(zhí)a = b; b = temp;直到迭代過程結(jié)束(余數(shù)為0)。在這里a好比那個(gè)膽小鬼,總是從b手中接過位置,而b則是那個(gè)努力向前沖的先鋒。
牛頓迭代法斐波那契數(shù)列
還有一個(gè)很典型的例子是斐波那契(Fibonacci)數(shù)列。斐波那契數(shù)列為:0、1、1、2、3、5、8、13、21、…,即 fib⑴=0; fib⑵=1;fib(n)=fib(n-1) fib(n-2) (當(dāng)n>2時(shí))。
在n>2時(shí),fib(n)總可以由fib(n-1)和fib(n-2)得到,由舊值遞推出新值,這是一個(gè)典型的迭代關(guān)系,所以我們可以考慮迭代算法。
intFib(intn)//斐波那契(Fibonacci)數(shù)列 { if(n<1)/*預(yù)防錯(cuò)誤*/ return0; if(n==1||n==2)/*特殊值,無需迭代*/ return1; intf1=1,f2=1,fn;/*迭代變量*/ inti; for(i=3;i<=n; i)/*用i的值來限制迭代的次數(shù)*/ { fn=f1 f2;/*迭代關(guān)系式*/ f1=f2;//f1和f2迭代前進(jìn),其中f2在f1的前面 f2=fn; } returnfn; }
多數(shù)方程不存在求根公式,因此求精確根非常困難,甚至不可解,從而尋找方程的近似根就顯得特別重要。方法使用函數(shù)
科學(xué)家牛頓的資料牛頓與微積分的開創(chuàng)工作
公元前三世紀(jì),古希臘的阿基米德在研究解決拋物弓形的面積、球和球冠面積、螺線下面積和旋轉(zhuǎn)雙曲體的體積的問題中,就隱含著近代積分學(xué)的思想.作為微分學(xué)基礎(chǔ)的極限理論來說,早在古代以有比較清楚的論述.比如我國...
違法建筑,應(yīng)該拆。
去實(shí)地考察一下啊,看下周邊環(huán)境,生活設(shè)施什么的,早晚都去看一次,如果可以找已經(jīng)住在里面的業(yè)主問下情況最好了。我朋友家就是在哪里,據(jù)說他們前面兩棟的高樓, 房產(chǎn)證有點(diǎn)麻煩 后面的不清楚了
function y=f(x)
y=f(x);%函數(shù)f(x)的表達(dá)式
end
function z=h(x)
z=h(x);%函數(shù)h(x)的表達(dá)式,函數(shù)h(x)是函數(shù)f(x)的一階導(dǎo)數(shù)
end
x=X;%迭代初值
i=0;%迭代次數(shù)計(jì)算
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) %輸出結(jié)果
格式:pdf
大?。?span id="wwyokai" class="single-tag-height">292KB
頁數(shù): 未知
評(píng)分: 4.7
通過對(duì)齒形系數(shù)的曲線擬合,提出了開式蝸桿傳動(dòng)設(shè)計(jì)計(jì)算的簡單迭代方法
格式:pdf
大?。?span id="oms6g4y" class="single-tag-height">292KB
頁數(shù): 3頁
評(píng)分: 4.7
通過MTLAB軟件利用數(shù)學(xué)迭代法,模擬了間歇式拌合樓骨料稱量系統(tǒng);通過對(duì)模擬結(jié)果分析,驗(yàn)證了迭代控制算法可以較為理想地優(yōu)化控制系統(tǒng)。
非牛頓流體廣泛存在于生活、生產(chǎn)和大自然之中。
絕大多數(shù)生物流體都屬于現(xiàn)在所定義的非牛頓流體。人身上血液、淋巴液、囊液等多種體液,以及像細(xì)胞質(zhì)那樣的"半流體"都屬于非牛頓流體。
高分子聚合物的濃溶液和懸浮液等一般為非牛頓流體。聚乙烯、聚丙烯酰胺、聚氯乙烯、尼龍6、PVS、賽璐珞、滌綸、橡膠溶液、各種工程塑料、化纖的熔體、溶液等,都是非牛頓流體。石油、泥漿、水煤漿、陶瓷漿、紙漿、油漆、油墨、牙膏、家蠶絲再生溶液、鉆井用的洗井液和完井液、磁漿、某些感光材料的涂液、泡沫、液晶、高含沙水流、泥石流、地幔等也都是非牛頓流體。
食品工業(yè)中的番茄汁、淀粉液、蛋清、蘋果漿、濃糖水、醬油、果醬、煉乳、瓊脂、土豆?jié){、熔化巧克力、面團(tuán)、米粉團(tuán)、以及魚糜、肉糜等各種糜狀食品物料也都是非牛頓流體。
非牛頓流體特性
如果非牛頓流體被迫從一個(gè)大容器,流進(jìn)一根毛細(xì)管,再從毛細(xì)管流出時(shí),可發(fā)現(xiàn)射流的直徑比毛細(xì)管的直徑大。射流的直徑與毛細(xì)管直徑之比,稱為模片脹大率(或稱為擠出物脹大比)。對(duì)牛頓流體,它依賴于雷諾數(shù),其值約在0.88~1.12之間。而對(duì)于高分子熔體或濃溶液,其值大得多,甚至可超過10。一般來說,模片脹大率是流動(dòng)速率與毛細(xì)管長度的函數(shù)。模片脹大現(xiàn)象,在口模設(shè)計(jì)中十分重要。聚合物熔體從一根矩形截面的管口流出時(shí),管截面長邊處的脹大,比短邊處的脹大更加顯著。尤其在管截面的長邊中央脹得最大。因此,如果要求生產(chǎn)出的產(chǎn)品的截面是矩形的,口模的形狀就不能是矩形,而必須是四邊中間都凹進(jìn)去的形狀。
1944年Weissenberg在英國倫敦帝國學(xué)院,公開表演了一個(gè)有趣的實(shí)驗(yàn):在一只有黏彈性流體(非牛頓流體的一種)的燒杯里,旋轉(zhuǎn)實(shí)驗(yàn)桿。對(duì)于牛頓流體,由于離心力的作用,液面將呈凹形;而對(duì)于黏彈性流體,卻向杯中心流動(dòng),并沿桿向上爬,液面變成凸形,甚至在實(shí)驗(yàn)桿旋轉(zhuǎn)速度很低時(shí),也可以觀察到這一現(xiàn)象。在設(shè)計(jì)混合器時(shí),必須考慮爬桿效應(yīng)的影響。同樣,在設(shè)計(jì)非牛頓流體的輸運(yùn)泵時(shí),也應(yīng)考慮和利用這一效應(yīng)。
對(duì)于牛頓流體來說,在虹吸實(shí)驗(yàn)時(shí),如果將虹吸管提離液面,虹吸馬上就會(huì)停止。但對(duì)高分子液體,如聚異丁烯的汽油溶液和百分之一的POX水溶液,或聚醣在水中的輕微凝肢體系等,都很容易表演無管虹吸實(shí)驗(yàn)。將管子慢慢地從容器撥起時(shí),可以看到雖然管子己不再插在液體里,液體仍源源不斷地從杯中抽出,繼續(xù)流進(jìn)管里。甚至更簡單些,連虹吸管都不要,將裝滿該液體的燒杯微傾,使液體流下,該過程一旦開始,就不會(huì)中止,直到杯中液體都流光。這種無管虹吸的特性,是合成纖維具備可紡性的基礎(chǔ)。
非牛頓流體顯示出的另一奇妙性質(zhì),是湍流減阻。人們觀察到,如果在牛頓流體中加入少量聚合物,則在給定的速率下,可以看到顯著的壓差降。湍流一直是困擾理論物理和流體力學(xué)界未解決的難題。然而在牛頓流體中加入少量高聚物添加劑,卻出現(xiàn)了減阻效應(yīng)。有人報(bào)告:在加入高聚物添加劑后,測得猝發(fā)周期加大了,認(rèn)為是高分子鏈的作用。雖然湍流減阻效應(yīng)的道理尚未弄得很清楚,卻己有不錯(cuò)的應(yīng)用。在消防水中添加少量聚乙烯氧化物,可使消防車龍頭噴出的水的揚(yáng)程提高一倍以上。應(yīng)用高聚物添加劑,還能改善氣蝕發(fā)生過程及其破壞作用。
非牛頓流體除具有以上幾種有趣的性質(zhì)外,還有其他一些受到人們重視的奇妙特性,如拔絲性(能拉伸成極細(xì)的細(xì)絲,可見"春蠶到死絲方盡"一文),剪切變稀(可見"腱鞘囊腫治愈記"一文),連滴效應(yīng)(其自由射流形成的小滴之間有液流小桿相連),液流反彈等。
在自然界中的食品,不符合牛頓流體定律的流體占大多數(shù)。大量的食品,包括濃果汁、果醬、全雞蛋、菜泥、濃牛奶以及巧克力漿等固液懸浮體都是非牛頓流體,下面的經(jīng)驗(yàn)公式往往用來表示這些流體的剪切應(yīng)力與剪切速率之間的關(guān)系:
τ=k(γ)n(1
n為流態(tài)特性指數(shù),k為稠度系數(shù)。若為牛頓流體公式,則n=1,此時(shí)k為粘度。上式中,設(shè)ηa=k(γ)n-1,則與牛頓流體相似的非牛頓流體的狀態(tài)方程可寫為:
τ=ηaγ(2)
此式可以得到:η與ηa表示同樣物理特性,有相同的量綱,即ηa為表觀粘度(apparentviscosity)。表觀粘度ηa是流體內(nèi)部阻力的總和。然而與η不同的是,ηa是γ的函數(shù),與k和n有關(guān)。換句話說ηa是指非牛頓流體在某一流速的粘度。
對(duì)于很多非牛頓流體,Τ只有在大于一定值Τ0時(shí)(也就是說,流體在獲得能量克服一個(gè)屈服應(yīng)力值以后),流動(dòng)才能發(fā)生。Bulkey與Hershel提出的表示公式如下:
Τ=Τ0 k(γ)n(3)
Τ0表示屈服應(yīng)力(yieldstress)。由于公式中的Τ0和n范圍不同,將非牛頓流動(dòng)分為以下五類 :
當(dāng)粘度隨著剪切速率或剪切應(yīng)力的增大而減少,對(duì)應(yīng)于公式(1)中的0
粘度隨著剪切速率的增大而增大的流動(dòng),也稱為剪切增稠流動(dòng)(shear thickening flow)。在公式τ=k(γ)n(1
液體只有在應(yīng)力超過τ0時(shí)才開始流動(dòng)。塑性流動(dòng)的流動(dòng)特性曲線不通過原點(diǎn)。賓漢流動(dòng)(Binghamflow)是指當(dāng)應(yīng)力超過τ0時(shí),流動(dòng)特性符合牛頓流體規(guī)律的流動(dòng)。而非賓漢流動(dòng)是指不符合牛頓流動(dòng)規(guī)律流動(dòng)。把具有這兩種流動(dòng)特性的液體分別稱為賓漢流體或非賓漢流體。食品中的濃縮肉汁就是一種典型的賓漢流體。卡松在研究了油漆流動(dòng)的網(wǎng)架結(jié)構(gòu)與剪切速率的關(guān)系后發(fā)現(xiàn)剪切應(yīng)力和剪切速率有如下關(guān)系:
σ1/2=σ01/2 ηaε1/2
一部分非賓漢流體液態(tài)食品的流動(dòng)規(guī)律符合卡松公式,如番茄醬、巧克力等。
觸變性是指在振動(dòng)、攪拌、搖動(dòng)時(shí),液體的流動(dòng)性增加,粘性減少,靜置后,過段時(shí)間發(fā)現(xiàn)流動(dòng)又變困難的現(xiàn)象。也叫搖溶性流動(dòng)。例如,番茄調(diào)味醬、蛋黃醬等,在容器中放置時(shí)間一長,傾倒時(shí),就變得很難流動(dòng)。但只要將容器猛烈搖動(dòng),或用力攪拌一會(huì),它們就變得很容易流動(dòng)。再長時(shí)間放置時(shí),它們又會(huì)變得流動(dòng)困難。觸變性流動(dòng)的發(fā)生是由于粒子之間形成的結(jié)合構(gòu)造,隨著剪切應(yīng)力的增加而受到破壞,導(dǎo)致的粘性減少。但這些粒子間結(jié)合構(gòu)造在停止應(yīng)力作用時(shí),恢復(fù)需要一段時(shí)間,逐漸形成。因此,剪切速率減慢時(shí)的曲線在前次增加時(shí)的曲線的下方,形成了與流動(dòng)時(shí)間有關(guān)的滯變回環(huán)。材料的構(gòu)造破壞的越大,體現(xiàn)為滯變回路包圍面積越大。觸變性對(duì)口感的影響體現(xiàn)為爽口柔和的感覺。
液體隨著流動(dòng)時(shí)間延長,與觸變性流動(dòng)相反,變得越來越粘稠的現(xiàn)象。膠變性流動(dòng)的食品給人以粘稠的口感。當(dāng)流速加大時(shí),達(dá)到最大值后,再減低流速,減低流速時(shí)的流動(dòng)曲線反而在加大流速曲線的上方。這種現(xiàn)象也被稱為逆觸變現(xiàn)象。這是因?yàn)榱鲃?dòng)促進(jìn)了液體粒子間構(gòu)造的形成。
膠變性流體是時(shí)間相關(guān)性流體,也可被當(dāng)作觸變型流體,但二者還是有明顯的不同點(diǎn),就是膠變流體靜止時(shí)不會(huì)重建它的結(jié)構(gòu)。由膠變性流體的流動(dòng)特性曲線可見,隨著剪切速率的增大(上行線)和減小(下行線)這樣一個(gè)循環(huán),形成了一個(gè)滯回環(huán),表明了流體的粘度會(huì)隨著時(shí)間的變化而發(fā)生改變,并且剪切速率減慢時(shí)的曲線在剪切速率增加時(shí)的曲線的上方,這些現(xiàn)象表明流體是一種膠變性流體 。
1.流體在攪拌過程中其表觀粘度逐漸變大;
2.在時(shí)間為零時(shí)剪切力最小,隨時(shí)間延長而逐漸延長而逐增加,并穩(wěn)定在某一定值;
3.剪切速率愈大(即攪拌俞劇烈),剪切力變化愈大;
4.一旦在某個(gè)時(shí)間停止攪拌,剪切應(yīng)力就又到攪拌開始時(shí)的初始值。2100433B