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