關(guān)于平方根和算術(shù)平方根的計(jì)算方法,計(jì)算平方根有什么公式嗎這個(gè)問(wèn)題很多朋友還不知道,今天小六來(lái)為大家解答以上的問(wèn)題,現(xiàn)在讓我們一起來(lái)看看吧!
1、平方根計(jì)算的泰勒公式展開(kāi) function mysum=sr3(x,e) %用泰勒展開(kāi)計(jì)算平方根,abs(x)<1; %精確度e默認(rèn)為1e-15; if nargin==1 e=1e-15; end m=1; %計(jì)算泰勒展開(kāi)的分子(2*k-3)!!,給m設(shè)初值 n=1; %計(jì)算階乘n!, 給 n設(shè)初值 mysum=1; %泰勒展開(kāi)多項(xiàng)式的和,設(shè)初值 k=1; while(m/(2^k*n)*x.^k)>e|x==0 j=abs(2*k-3); n=n*k; m=m*j; mysum=mysum+(-1)^(k+1)*(m/(2^k*n))*x.^k; k=k+1; end 用牛頓迭代法求平方根 用C語(yǔ)言,通過(guò)鏈表存儲(chǔ),用牛頓牛代法求平方根。
2、 這是C語(yǔ)言實(shí)訓(xùn)時(shí)的作業(yè)。
3、因此作了版面的設(shè)計(jì)。
4、使用方便! #include"math.h" #include"stdio.h" #include"conio.h" #include"stdlib.h" typedef struct lianbiao /*定義類(lèi)型:struct lianbiao */ { float x1; float x0; struct LIANBIAO *next; }LIANBIAO; /*函數(shù)原型*/ LIANBIAO *sestet(float c); /*建立鏈表*/ void displayall(LIANBIAO *psthead); /*全部顯示*/ main() { LIANBIAO *psthead=NULL; float a; do { printf("請(qǐng)輸入一個(gè)正數(shù)為a的值"); printf(""); scanf("%f",&a); }while(a<=0); psthead=sestet(a); /*返回“頭指針”*/ displayall(psthead); /*輸出全部結(jié)點(diǎn)*/ } /*建立鏈表,并進(jìn)行計(jì)算*/ LIANBIAO *sestet(float c) { LIANBIAO *psthead,*ptemp,*pprep; int s; float x0,x1,temp,h; double k; psthead=(LIANBIAO*)malloc(sizeof(LIANBIAO));/*構(gòu)造“頭結(jié)點(diǎn)”*/ printf("您希望精確值(ε)精確到小數(shù)點(diǎn)后幾位?(目前超過(guò)十位無(wú)法明確顯示)"); printf("您需要的位數(shù)是:"); scanf("%d",&s); k=1/pow(10,s); printf("你選擇的誤差值ε=%0.10lf",k); pprep=psthead; /*“前趨指針pprep”指向“頭結(jié)點(diǎn)”*/ pprep->next=NULL; /*“頭結(jié)點(diǎn)”的next成員的NULL*/ x1=c; do /*進(jìn)行迭代計(jì)算*/ { x0=(x1+c/x1)/2; h=x1-x0; /*定義x1-x0的值,即為誤差值*/ temp=x1; ptemp=(LIANBIAO*)malloc(sizeof(LIANBIAO));/*開(kāi)辟一個(gè)新的單元*/ ptemp->x1=x1; /*得到ptemp指向的結(jié)構(gòu)體中的成員x1的值*/ ptemp->x0=h; /*得到ptemp指向的結(jié)構(gòu)體中的成員x0的值,即誤差值*/ ptemp->next=pprep->next; /*“新結(jié)點(diǎn)”指向這個(gè)前趨結(jié)點(diǎn)的后續(xù)結(jié)點(diǎn)*/ pprep->next=ptemp; /*這個(gè)前趨結(jié)點(diǎn)指向“新結(jié)點(diǎn)”*/ pprep=ptemp; /*取得新的結(jié)點(diǎn)*/ x1=x0; /*x1取得平方根的值*/ }while(fabs(h)>k); printf("您輸入的是%f.此數(shù)的平方根為%f",c,x1); return psthead; /*返回指向“頭結(jié)點(diǎn)”的指針*/ } /*全部顯示*/ void displayall(LIANBIAO *psthead) { LIANBIAO *pst; /*調(diào)用鏈表里的函數(shù)*/ int m=0; pst=psthead->next; /*將psthead原來(lái)指向結(jié)點(diǎn)中的next值賦給pst*/ printf(""); printf(" 迭代過(guò)程為:"); printf(""); while(pst!=NULL) { m++; printf(" 第%d次迭代x0=%10f |誤差值為%10f",m,pst->x1,pst->x0);/*輸出迭代次數(shù),輸出pst指向的結(jié)點(diǎn)的數(shù)據(jù)*/ pst=pst->next; /*使pst指向下一個(gè)結(jié)點(diǎn)*/ } printf(""); printf("共迭代%d次",m); printf("共開(kāi)辟空間%d個(gè)",m+1); printf("利用率為%f %%",m*8*100.0/(m*12+12));。
本文分享完畢,希望對(duì)大家有所幫助。
標(biāo)簽:
免責(zé)聲明:本文由用戶上傳,如有侵權(quán)請(qǐng)聯(lián)系刪除!