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