2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  1 經(jīng)典四階龍格庫(kù)塔法解一階微分方程組</p><p><b>  1.1算法說(shuō)明:</b></p><p>  4階龍格-庫(kù)塔方法(RK4)可模擬N=4的泰勒方法的精度。這種算法可以描述為,自初始點(diǎn)開始,利用</p><p>  生成的近似序列,其中</p><p>  1.2 用龍格庫(kù)塔法求解求

2、解微分方程</p><p><b>  滿足初值條件:</b></p><p>  1.3 算法流程圖:</p><p>  圖1-1 四階龍格庫(kù)塔法解一階微分方程組</p><p><b>  1.4 程序調(diào)試:</b></p><p>  組建調(diào)試,確保程序可運(yùn)行時(shí)輸入初

3、值,區(qū)間,步長(zhǎng)。</p><p>  1.5 程序運(yùn)行運(yùn)行界面及運(yùn)行結(jié)果:</p><p>  圖1-2 四階龍格庫(kù)塔法解一階微分方程組</p><p>  1.6 源程序代碼:</p><p>  #include<iostream></p><p>  #include<iomanip>&l

4、t;/p><p>  using namespace std;</p><p>  #define N 10</p><p>  float ff(float t,float xx,float yy)</p><p><b>  { </b></p><p>  xx=xx+2*yy;</p&

5、gt;<p>  return xx;</p><p><b>  }</b></p><p>  float gg(float t,float xx,float yy)</p><p><b>  { </b></p><p>  yy=3*xx+2*yy;</p>&

6、lt;p>  return yy;</p><p><b>  }</b></p><p>  void rks4(float xx[N],float yy[N],float tt[N],double a,double b)</p><p>  { float h,p1,p2,p3,p4,q1,q2,q3,q4;</p>&

7、lt;p><b>  xx[0]=6;</b></p><p><b>  yy[0]=4;</b></p><p><b>  int i,p;</b></p><p>  h=(b-a)/N;</p><p>  for(p=0;p<N;p++)</p&g

8、t;<p>  tt[p]=a+h*p;</p><p>  for(i=0;i<N;i++)</p><p>  { p1=h*ff(tt[i],xx[i],yy[i]);</p><p>  q1=h*gg(tt[i],xx[i],yy[i]);</p><p>  p2=h*ff(tt[i]+h/2,xx[i]+p1

9、/2,yy[i]+q1/2);</p><p>  q2=h*gg(tt[i]+h/2,xx[i]+p1/2,yy[i]+q1/2);</p><p>  p3=h*ff(tt[i]+h/2,xx[i]+p2/2,yy[i]+q2/2);</p><p>  q3=h*gg(tt[i]+h/2,xx[i]+p2/2,yy[i]+q2/2);</p>&

10、lt;p>  p4=h*ff(tt[i]+h,xx[i]+p3,yy[i]+q3);</p><p>  q4=h*gg(tt[i]+h,xx[i]+p3,yy[i]+q3);</p><p>  xx[i+1]=xx[i]+(p1+2*p2+2*p3+p4)/6;</p><p>  yy[i+1]=yy[i]+(q1+2*q2+2*q3+q4)/6;<

11、;/p><p><b>  }</b></p><p><b>  }</b></p><p>  int main()</p><p><b>  { </b></p><p>  float xx[N],yy[N],tt[N];</p>&

12、lt;p>  rks4(xx,yy,tt,0,0.2);</p><p>  int i,j,k;</p><p>  for(i=0;i<N;i++) </p><p>  cout<<setw(5)<<tt[i]<<" ";</p><p>  cout<<

13、;endl;</p><p>  for(j=0;j<N;j++)</p><p>  cout<<setw(5)<<xx[j]<<" ";</p><p>  cout<<endl;</p><p>  for(k=0;k<N;k++)</p>

14、<p>  cout<<setw(6)<<yy[k]<<" ";</p><p>  cout<<endl;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>

15、;  2 高斯列主元法解線性方程組 </p><p><b>  2.1 算法說(shuō)明:</b></p><p>  Gauss列主元序消元法主要根據(jù)線性方程組人以交換兩個(gè)方程的次序,方程組的同解解性不變,且解的分量次序也不變。于是,第k步在順序?qū)W消元法進(jìn)行之前,從Ak的第k’列元素a[k][k],a[k+1][k],……a[n][k]中選出絕對(duì)值最大者,并進(jìn)行記錄所在行

16、,即</p><p>  |a[i][k]|=max|a[i][k]|</p><p>  如果l不等k,則交換矩陣的第k’行與第l列所對(duì)應(yīng)的元素,然后,再進(jìn)行第k步順序消元法。</p><p>  2.2 算法流程圖:</p><p>  圖2-1 高斯列主元法解線性方程組</p><p>  2.3高斯列主元程序調(diào)

17、試:</p><p>  對(duì)所編寫的高斯列主元程序進(jìn)行編譯和鏈接,然后執(zhí)行得如下所示的窗口,我們按命令輸入增廣矩陣的行數(shù)為3,輸入3行4列的增廣矩陣運(yùn)行。</p><p>  2.4 程序運(yùn)行運(yùn)行界面及運(yùn)行結(jié)果:</p><p>  圖2-2 高斯列主元法解線性方程組</p><p>  2.5 源程序代碼:</p><

18、p>  #include<iostream></p><p>  #include<stdlib.h></p><p>  #include<cmath ></p><p>  using namespace std;</p><p>  int FindMax(int p,int N,double

19、*A)</p><p>  {int i=0,j=0;</p><p>  double max=0.0;</p><p>  for(i=p;i<N;i++)</p><p>  {if(fabs(A[i*(N+1)+p])>max)</p><p><b>  {</b></

20、p><p><b>  j=i;</b></p><p>  max=fabs(A[i*(N+1)+p]);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  return j;</b

21、></p><p><b>  }</b></p><p>  void ExchangeRow(int p,int j,double *A,int N)</p><p><b>  {</b></p><p><b>  int i=0;</b></p>

22、<p>  double C=0.0;</p><p>  for(i=0;i<N+1;i++)</p><p><b>  {</b></p><p>  C=A[p*(N+1)+i];</p><p>  A[p*(N+1)+i]=A[j*(N+1)+i];</p><p> 

23、 A[j*(N+1)+i]=C;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void uptrbk(double *A,int N)</p><p><b>  {</b></p><p>  i

24、nt p=0,k=0,q=0,j=0;</p><p>  double m=0.0;</p><p>  for(p=0;p<N-1;p++)</p><p><b>  {</b></p><p>  j=FindMax(p,N,A);</p><p>  ExchangeRow(p,j

25、,A,N);</p><p>  if(A[p*(N+1)+p]==0)</p><p><b>  {</b></p><p>  cout<<"矩陣是一個(gè)奇異矩陣。沒(méi)有唯一解。";</p><p><b>  break;</b></p><p

26、><b>  }</b></p><p>  for(k=p+1;k<N;k++)</p><p><b>  {</b></p><p>  m=A[k*(N+1)+p]/A[p*(N+1)+p];</p><p>  for(q=p;q<N+1;q++)</p>

27、<p>  A[k*(N+1)+q]=A[k*(N+1)+q]-m*A[p*(N+1)+q];</p><p><b>  }</b></p><p><b>  }</b></p><p>  cout<<endl;</p><p>  cout<<"增

28、廣矩陣高斯列主元消去后的矩陣為:"<<endl;</p><p>  for(j=0;j<N*(N+1);j++)</p><p><b>  {</b></p><p>  if(j%(N+1)==0)</p><p>  cout<<endl;</p><p

29、>  cout<<A[j];</p><p><b>  }</b></p><p><b>  }</b></p><p>  double* backsub(double *A,int N)</p><p><b>  {</b></p>&

30、lt;p>  double* X=NULL,temp=0.0;</p><p>  int k=0,i=0;</p><p>  X=(double*)malloc(N*sizeof(double));</p><p>  X[N-1]=A[(N-1)*(N+1)+N]/A[(N-1)*(N+1)+N-1];</p><p>  for

31、(k=N-2;k>=0;k--)</p><p><b>  {</b></p><p><b>  temp=0.0;</b></p><p>  for(i=k+1;i<N;i++)</p><p>  temp=temp+A[k*(N+1)+i]*X[i];</p>

32、<p>  X[k]=(A[k*(N+1)+N]-temp)/A[k*(N+1)+k];</p><p><b>  }</b></p><p><b>  return X;</b></p><p><b>  }</b></p><p>  int main()&

33、lt;/p><p><b>  {</b></p><p>  int N=0,i=0;</p><p>  double *A=NULL,*X=NULL;</p><p>  cout<<endl;</p><p>  cout<<"請(qǐng)輸入待求解方程組的增廣矩陣的行

34、數(shù):";</p><p><b>  cin>>N;</b></p><p>  A=(double*)calloc(N*(N+1),sizeof(double));</p><p>  cout<<"請(qǐng)輸入待求解方程組的增廣矩陣:"<<endl;</p><

35、p>  for(i=0;i<N*(N+1);i++)</p><p>  cin>>A[i];</p><p>  system("cls");</p><p>  cout<<"方程的增廣矩陣為:"<<endl;</p><p>  for(i=0;i&

36、lt;N*(N+1);i++)</p><p><b>  {</b></p><p>  if(i%(N+1)==0) </p><p>  cout<<endl;</p><p>  cout&l

37、t;<A[i]<<" ";</p><p><b>  }</b></p><p>  uptrbk(A,N);</p><p>  X=backsub(A,N);</p><p>  cout<<endl;</p><p>  cout<&

38、lt;"方程組的解為:"<<endl;</p><p>  for(i=0;i<N;i++)</p><p>  cout<<X[i]<<" ";</p><p><b>  free(A);</b></p><p><b>  

39、free(X);</b></p><p>  cout<<endl;</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  3 牛頓法解非線性方程組</p><p><b>  3.

40、1 算法說(shuō)明:</b></p><p><b>  設(shè)已知。</b></p><p><b>  第1步:計(jì)算函數(shù)</b></p><p>  第2步:計(jì)算雅可比矩陣</p><p>  第3步:求線性方程組</p><p><b>  的解。</

41、b></p><p><b>  第4步:計(jì)算下一點(diǎn)</b></p><p><b>  重復(fù)上述過(guò)程。</b></p><p>  3.2 用牛頓法解方程組</p><p>  3.3 算法流程圖:</p><p>  圖3-1 牛頓法解非線性方程組</p&g

42、t;<p><b>  3.4 程序調(diào)試:</b></p><p>  編譯組建并運(yùn)行程序。</p><p>  3.5 程序運(yùn)行運(yùn)行界面及運(yùn)行結(jié)果:</p><p>  圖3-2 牛頓法解非線性方程組</p><p>  3.6 源程序代碼:</p><p>  #include&

43、lt;iostream></p><p>  #include<stdlib.h></p><p>  #include<cmath ></p><p>  #define N 2</p><p>  #define eps 2.2204e-16</p><p>  using names

44、pace std;</p><p>  double* MatrixMultiply(double* J,double Y[]);</p><p>  double*Inv(double*J); double norm(double Q[]);</p><p>

45、  double* F(double X[]);</p><p>  double* JF(double X[]);</p><p>  int method(double* Y,double epsilon);</p><p>  int newdim(double P[],double delta,double epsilon,int max1,double *

46、err)</p><p>  {double *Y=NULL,*J=NULL,Q[2]={0},*Z=NULL,*temp=NULL;</p><p>  double relerr=0.0;</p><p>  int k=0,i=0,iter=0;</p><p><b>  Y=F(P);</b></p>

47、;<p>  for(k=1;k<max1;k++)</p><p><b>  {J=JF(P);</b></p><p>  temp=MatrixMultiply(Inv(J),Y);</p><p>  for(i=0;i<N;i++)</p><p>  Q[i]=P[i]-temp[

48、i];</p><p><b>  Z=F(Q);</b></p><p>  for(i=0;i<N;i++)</p><p>  temp[i]=Q[i]-P[i];</p><p>  *err=norm(temp);</p><p>  relerr=*err/(norm(Q)+ep

49、s);</p><p>  for(i=0;i<N;i++)</p><p>  P[i]=Q[i];</p><p>  for(i=0;i<N;i++)</p><p>  Y[i]=Z[i];</p><p><b>  iter=k;</b></p><p&

50、gt;  if((*err<delta)||(relerr<delta)||method(Y,epsilon))</p><p><b>  break;</b></p><p><b>  }</b></p><p>  return iter;</p><p><b>  

51、}</b></p><p>  int method(double* Y,double epsilon)</p><p><b>  {</b></p><p>  if(fabs(Y[0])<epsilon&&fabs(Y[1])<epsilon)</p><p><b&g

52、t;  return 1;</b></p><p><b>  else</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  double *MatrixMultiply(double* J,d

53、ouble Y[])</p><p><b>  {</b></p><p>  double *X=NULL;</p><p>  int i=0,j=0;</p><p>  X=(double*)malloc(N*sizeof(double));</p><p>  for(i=0;i<

54、;N;i++)</p><p><b>  X[i]=0;</b></p><p>  for(i=0;i<N;i++)</p><p>  for(j=0;j<N;j++)</p><p>  X[i]+=J[i*N+j]*Y[j];</p><p><b>  retur

55、n X;</b></p><p><b>  }</b></p><p>  double *Inv(double *J)</p><p><b>  {</b></p><p>  double X[4]={0},temp=0.0;</p><p><b&

56、gt;  int i=0;</b></p><p>  temp=1/(J[0]*J[3]-J[1]*J[2]);</p><p>  X[0]=J[3];</p><p>  X[1]=-J[1];</p><p>  X[2]=-J[2];</p><p>  X[3]=J[0];</p>

57、<p>  for(i=0;i<4;i++)</p><p>  J[i]=temp*X[i];</p><p><b>  return J;</b></p><p><b>  }</b></p><p>  double norm(double Q[])</p>

58、<p>  {double max=0.0;</p><p><b>  int i=0;</b></p><p>  for(i=0;i<N;i++)</p><p>  {if(Q[i]>max)</p><p><b>  max=Q[i];</b></p>

59、<p><b>  }</b></p><p>  return max;</p><p><b>  }</b></p><p>  double* F(double X[])</p><p>  { double x=X[0];</p><p>  do

60、uble y=X[1];</p><p>  double *Z=NULL;</p><p>  Z=(double*)malloc(2*sizeof(double));</p><p>  Z[0]=x*x-2*x-y+0.5;</p><p>  Z[1]=x*x+4*y*y-4;</p><p><b>

61、;  return Z;</b></p><p><b>  }</b></p><p>  double* JF(double X[])</p><p>  { double x=X[0];</p><p>  double y=X[1];</p><p>  double *W

62、=NULL;</p><p>  W=(double*)malloc(4*sizeof(double));</p><p>  W[0]=2*x-2;</p><p>  W[1]=-1; W[2]=2*x;</p>&l

63、t;p><b>  W[3]=8*y;</b></p><p><b>  return W;</b></p><p><b>  }</b></p><p>  int main()</p><p>  {double P[2]={0};</p><

64、p>  double delta=0.0,epsilon=0.0,err=0.0; </p><p>  int max1=0,iter=0,i=0;</p><p>  cout<<"牛頓法解非線性方程組:\nx^2-2*x-y+0.5=0\nx^2+4*y^2-4=0\n";</p><p>  cout<<&q

65、uot;輸入的初始近似值x0,y0"<<'\n';</p><p>  for(i=0;i<2;i++)</p><p>  cin>>P[i];</p><p>  cout<<endl;</p><p>  cout<<"請(qǐng)依次輸入P的誤差限,F(xiàn)(P

66、)的誤差限,最大迭代次數(shù)"<<'\n';</p><p>  cin>>delta>>epsilon>>max1;</p><p>  iter=newdim(P,delta,epsilon,max1,&err);</p><p>  cout<<"收斂到P的解為

67、:"<<'\n';</p><p>  for(i=0;i<2;i++)</p><p>  cout<<P[i]<<" ";</p><p>  cout<<endl;</p><p>  cout<<"迭代次數(shù)為:&

68、quot;<<iter;</p><p>  cout<<endl;</p><p>  cout<<"誤差為:"<<err<<endl;</p><p><b>  return 0;</b></p><p><b>  }<

69、;/b></p><p>  4 龍貝格求積分算法</p><p><b>  4.1算法說(shuō)明</b></p><p>  生成的逼近表,并以為最終解來(lái)逼近積分</p><p>  逼近存在于一個(gè)特別的下三角矩陣中,第0列元素用基于個(gè)[a,b]子區(qū)間的連續(xù)梯形方法計(jì)算,然后利用龍貝格公式計(jì)算。當(dāng)時(shí),第行的元素為&l

70、t;/p><p>  當(dāng)時(shí),程序在第行結(jié)束。</p><p><b>  4.2 求積分方程</b></p><p>  4.3 算法流程圖:</p><p>  圖4-1 龍貝格求積分算法</p><p><b>  4.4 程序調(diào)試</b></p><p&

71、gt;  編譯組建并運(yùn)行程序。</p><p>  4.5 程序運(yùn)行運(yùn)行界面及運(yùn)行結(jié)果</p><p>  圖4-2 龍貝格求積分算法</p><p><b>  4.6 源程序代碼</b></p><p>  #include<iostream></p><p>  #includ

72、e<cmath></p><p>  using namespace std;</p><p>  double f(double x)</p><p>  {returnx*x;</p><p><b>  }</b></p><p>  int main()</p>

73、<p>  {int M=1,n=0,p=0,K=0,i=0,j=0,J=0;</p><p>  double h=0.0,a=0.0,b=0.0,err=1.0,quad=0.0,s=0.0,x=0.0,tol=0.0;</p><p>  double R[30][30]={0};</p><p><b>  a=0;</b>

74、</p><p><b>  b=1;</b></p><p><b>  h=b-a;</b></p><p><b>  n=4;</b></p><p>  tol=0.000001;</p><p>  cout<<"求解函

75、數(shù)y=x*x在(0,1)上的龍貝格矩陣"<<'\n';</p><p>  cout<<"龍貝格矩陣最大行數(shù)為:"<<n<<"誤差限為:"<<tol;</p><p>  R[0][0]=h*(f(a)+f(b))/2;</p><p>  

76、while(((err>tol)&&(J<n))||(J<4))</p><p><b>  {</b></p><p><b>  J=J+1;</b></p><p><b>  h=h/2;</b></p><p><b>  

77、s=0;</b></p><p>  for(p=1;p<=M;p++) </p><p><b>  {</b></p><p>  x=a+h*(2*p-1); </p><p><b>  s=s+f(x);</b></p><p><b>

78、  }</b></p><p>  R[J][0]=R[J-1][0]/2+h*s;</p><p><b>  M=2*M;</b></p><p>  for(K=1;K<=J;K++)</p><p><b>  {</b></p><p>  R[J

79、][K]=R[J][K-1]+(R[J][K-1]-R[J-1][K-1])/(pow(4,K)-1);</p><p><b>  }</b></p><p>  err=fabs(R[J-1][J-1]-R[J][K]);</p><p><b>  }</b></p><p>  quad=R

80、[J][J];</p><p>  cout<<'\n';</p><p>  cout<<"龍貝格矩陣為:"<<endl;</p><p>  for(i=0;i<(J+1);i++)</p><p><b>  {</b></p>

81、;<p>  for(j=0;j<(J+1);j++)</p><p><b>  {</b></p><p>  cout<<R[i][j];</p><p><b>  }</b></p><p>  cout<<endl;</p>&l

82、t;p><b>  }</b></p><p>  cout<<endl;</p><p>  cout<<"積分值為:"<<quad<<endl;</p><p>  cout<<"誤差估計(jì)為"<<err<<end

83、l;</p><p>  cout<<"使用過(guò)的最小步長(zhǎng):"<<h<<endl;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  5 三次樣條插值算法(壓緊樣條)用C++語(yǔ)言進(jìn)

84、行編程計(jì)算依據(jù)計(jì)算結(jié)果,用Matlab畫圖并觀察三次樣條插值效果</p><p><b>  5.1 算法說(shuō)明</b></p><p>  (i)如果導(dǎo)數(shù)已知,這是“最佳選擇”)三次緊壓樣條,確定,</p><p>  (ii)natural三次樣條(一條“松弛曲線”)</p><p><b>  ,</

85、b></p><p>  (iii)外掛到端點(diǎn)</p><p>  (iv) 是靠近端點(diǎn)的常量</p><p><b>  ,</b></p><p>  (v)在每個(gè)端點(diǎn)處指定</p><p><b>  ,</b></p><p><b

86、>  5.2 程序調(diào)試:</b></p><p>  編譯組建并運(yùn)行程序。</p><p>  5.3 程序運(yùn)行運(yùn)行界面及運(yùn)行結(jié)果:</p><p>  圖5-1 樣條插值算法 </p><p>  借助Matlab繪制出以上三次壓緊樣條的函數(shù)圖像如

87、下所示</p><p>  表5-1 三次壓緊樣條的函數(shù)圖像</p><p>  5.4 源程序代碼:</p><p>  #include<iostream></p><p>  #include<stdlib.h></p><p>  #define MAX 4</p><

88、;p>  using namespace std;</p><p>  double *diff(double X[],int n)</p><p><b>  {int i=0;</b></p><p>  double *H=NULL;</p><p>  H=(double*)malloc((n-1)*siz

89、eof(double));</p><p>  for(i=1;i<=n-1;i++)</p><p>  {H[i-1]=X[i]-X[i-1];</p><p><b>  }</b></p><p><b>  return H;</b></p><p><

90、b>  }</b></p><p>  double *divide(double Y[],int N,double H[])</p><p><b>  {</b></p><p><b>  int i=0;</b></p><p>  double *D=NULL;</

91、p><p>  D=(double*)malloc(N*sizeof(double));</p><p>  for(i=0;i<N;i++)</p><p><b>  {</b></p><p>  D[i]=Y[i]/H[i];</p><p><b>  }</b>

92、</p><p><b>  return D;</b></p><p><b>  }</b></p><p>  int main()</p><p><b>  {</b></p><p>  double X[MAX]={2,4,3,1},Y[M

93、AX]={1,2.5,3.4,4.2},S[MAX][MAX]={0},temp=0.0,M[MAX]={0};</p><p>  int N=MAX-1,i=0,k=0;</p><p>  double A[MAX-1-2]={0},B[MAX-1-1]={0},C[MAX-1-1]={0};</p><p>  double dx0=0.2,dxn=1.0;

94、</p><p>  double *H=NULL,*D=NULL,*U=NULL;</p><p>  cout<<"求解經(jīng)過(guò)點(diǎn)(0,0.0),(1,0.5),(2,2.0)和(3,1.5)"<<'\n'<<"而且一階導(dǎo)數(shù)邊界條件S'(0)=0.2和S'(3)=-1的三次壓緊樣條曲線&quo

95、t;<<endl;</p><p>  H=diff(X,MAX);</p><p>  D=divide(diff(Y,MAX),N,H);</p><p>  for(i=1;i<N-2;i++)</p><p>  A[i]=H[i+1];</p><p>  for(i=0;i<N-1;

96、i++)</p><p>  B[i]=2*(H[i]+H[i+1]);</p><p>  for(i=1;i<N-1;i++)</p><p>  C[i]=H[i+1];</p><p>  U=diff(D,N);</p><p>  for(i=0;i<N;i++)</p><

97、p>  U[i]=U[i]*6;</p><p>  B[0]=B[0]-H[0]/2;</p><p>  U[0]=U[0]-3*(D[0]-dx0);</p><p>  B[N-2]=B[N-2]-H[N-1]/2;</p><p>  U[N-2]=U[N-2]-3*(dxn-D[N-1]);</p><p

98、>  for(k=2;k<=N-1;k++)</p><p><b>  {</b></p><p>  temp=A[k-2]/B[k-2];</p><p>  B[k-1]=B[k-1]-temp*C[k-2];</p><p>  U[k-1]=U[k-1]-temp*U[k-2];</p>

99、;<p><b>  }</b></p><p>  M[N-1]=U[N-2]/B[N-2];</p><p>  for(k=N-2;k>=1;k--)</p><p>  M[k]=(U[k-1]-C[k-1]*M[k+1])/B[k-1];</p><p>  M[0]=3*(D[0]-dx0

100、)/H[0]-M[0]/2;</p><p>  M[N]=3*(dxn-D[N-1])/H[N-1]-M[N-1]/2;</p><p>  for(k=0;k<=N-1;k++)</p><p><b>  {</b></p><p>  S[k][0]=(M[k+1]-M[k])/(6*H[k]);</

101、p><p>  S[k][1]=M[k]/2;</p><p>  S[k][2]=D[k]-H[k]*(2*M[k]+M[k+1])/6;</p><p>  S[k][3]=Y[k];</p><p><b>  }</b></p><p>  cout<<"求得的三次壓緊樣

102、條曲線的矩陣S為:"<<'\n';</p><p>  for(i=0;i<MAX-1;i++)</p><p>  {for(k=0;k<MAX;k++)</p><p><b>  {</b></p><p>  cout<<S[i][k];</p&

103、gt;<p><b>  }</b></p><p>  cout<<endl; </p><p><b>  }</b></p><p>  cout<<endl;&

104、lt;/p><p>  for(i=0;i<N;i++) </p><p>  cout<<"在區(qū)間(0,1)上的樣條為:"<<"y="<<S[i][0]<<"x^3+"<<S[i][1]<<"x^2+"<<S[i][2]&l

105、t;<"x+"<<S[i][3]<<endl;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  6 M次多項(xiàng)式曲線擬合,據(jù)計(jì)算結(jié)果,用Matlab畫圖并觀察擬合效果</p><p>

106、<b>  6.1算法說(shuō)明:</b></p><p>  設(shè)有N個(gè)點(diǎn),橫坐標(biāo)是確定的。最小二乘拋物線的系數(shù)表示為</p><p>  求解A,B和C的線性方程組為</p><p>  6.2 待擬合多項(xiàng)式曲線的四個(gè)點(diǎn)為:</p><p> ?。?,4) (2,3) (3,2) (4,1)</p><p

107、>  6.3 算法流程圖:</p><p>  圖6-1 M次多項(xiàng)式曲線擬合</p><p><b>  6.4 程序調(diào)試:</b></p><p>  編譯組建并運(yùn)行程序。</p><p>  6.5 程序運(yùn)行運(yùn)行界面及運(yùn)行結(jié)果:</p><p><b>  圖6-2 曲線擬合&

108、lt;/b></p><p>  6.6 源程序代碼:</p><p>  #include<iostream></p><p>  #include<cmath></p><p>  #define MAX 20</p><p>  using namespace std;</p&

109、gt;<p>  void inv(double X[MAX][MAX],int n,double E[MAX][MAX])</p><p>  {int i=0,j=0,k=0;</p><p>  double temp=0.0;</p><p>  for(i=0;i<MAX;i++)</p><p><b&g

110、t;  {</b></p><p>  for(j=0;j<MAX;j++)</p><p><b>  if(i==j)</b></p><p>  E[i][j]=1;</p><p><b>  }</b></p><p>  for(i=0;i<

111、;n-1;i++)</p><p><b>  {</b></p><p>  temp=X[i][i];</p><p>  for(j=0;j<n;j++)</p><p><b>  {</b></p><p>  X[i][j]=X[i][j]/temp;<

112、;/p><p>  E[i][j]=E[i][j]/temp;</p><p><b>  }</b></p><p>  for(k=0;k<n;k++)</p><p><b>  {</b></p><p><b>  if(k==i)</b>&

113、lt;/p><p><b>  continue;</b></p><p>  temp=-X[i][i]*X[k][i];</p><p>  for(j=0;j<n;j++)</p><p><b>  {</b></p><p>  X[k][j]=X[k][j]+t

114、emp*X[i][j];</p><p>  E[k][j]=E[k][j]+temp*E[i][j];</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b

115、>  }</b></p><p>  int main()</p><p><b>  {</b></p><p>  int n=0,M=0,i=0,j=0,k=0;</p><p>  double X[MAX]={0},Y[MAX]={0},F[MAX][MAX]={0},B[MAX]={0};&

116、lt;/p><p>  double A[MAX][MAX]={0},BF[MAX][MAX]={0},E[MAX][MAX]={0},C[MAX]={0};</p><p>  cout<<" M次多項(xiàng)式曲線擬合"<<endl<<"請(qǐng)先輸入待擬合的點(diǎn)的個(gè)數(shù):"<<endl;<

117、/p><p><b>  cin>>n;</b></p><p>  cout<<endl;</p><p>  cout<<"請(qǐng)輸入"<<n<<"個(gè)點(diǎn)的X坐標(biāo)序列:"<<endl;</p><p>  for(i

118、=0;i<n;i++)</p><p>  cin>>X[i];</p><p>  cout<<endl;</p><p>  cout<<"請(qǐng)輸入"<<n<<"個(gè)點(diǎn)的Y坐標(biāo)序列:"<<endl;</p><p>  for

119、(i=0;i<n;i++)</p><p>  cin>>Y[i];</p><p>  cout<<"請(qǐng)輸入需要擬合的次數(shù):";</p><p><b>  cin>>M;</b></p><p>  for(i=0;i<n;i++)</p>

120、;<p>  for(k=1;k<=M+1;k++)</p><p>  F[i][k-1]=pow(X[i],k-1);</p><p>  for(i=0;i<n;i++)</p><p><b>  {</b></p><p>  for(j=0;j<M+1;j++)</p&g

121、t;<p><b>  {</b></p><p>  BF[j][i]=F[i][j];</p><p><b>  }</b></p><p><b>  } </b></p><p>  for(i=0;i<M+1;i++)</p>&l

122、t;p>  for(j=0;j<M+1;j++)</p><p>  for(k=0;k<n;k++)</p><p>  A[i][j]+=BF[i][k]*F[k][j];</p><p>  for(i=0;i<M+1;i++)</p><p>  for(j=0;j<n;j++)</p>&

123、lt;p>  B[i]+=BF[i][j]*Y[j];</p><p>  inv(A,n,E);</p><p>  for(i=0;i<M+1;i++)</p><p>  for(j=0;j<n;j++)</p><p>  C[i]+=E[i][j]*B[j];</p><p>  cout&

124、lt;<endl;</p><p>  cout<<"擬合后的"<<M<<"次多項(xiàng)式系數(shù)為,冪次由高到低:"<<endl;</p><p>  for(i=M;i>=0;i--)</p><p><b>  {</b></p>&l

125、t;p>  cout<<C[i];</p><p><b>  }</b></p><p>  cout<<endl;</p><p>  cout<<"擬合后的"<<M<<"次多項(xiàng)式為:"<<endl;</p>

126、<p>  cout<<"P(x)=";</p><p>  for(i=M;i>=0;i--)</p><p><b>  {</b></p><p><b>  if(i==0)</b></p><p>  cout<<C[i];&

127、lt;/p><p><b>  else</b></p><p>  cout<<C[i]<<"*x^"<<"i";</p><p><b>  }</b></p><p><b>  return 0;</b&

128、gt;</p><p><b>  }</b></p><p>  7 二分法解非線性方程f(x)=0</p><p><b>  7.1 算法說(shuō)明:</b></p><p>  開發(fā)第一個(gè)分類試射法萊尋找連續(xù)函數(shù)的零點(diǎn),起始區(qū)間必須滿足f(a)與f(b)的符號(hào)相反的條件。由于連續(xù)函數(shù)y=f(x)的

129、圖形無(wú)間斷,所以它會(huì)在零點(diǎn)x=r處跨過(guò)x軸,且r在區(qū)間內(nèi)。通過(guò)二分法可將區(qū)間內(nèi)的斷點(diǎn)逐步逼近零點(diǎn),知道得到一個(gè)任意小的包含零點(diǎn)的間隔。</p><p>  7.2 求f(x)==0的解,初始區(qū)間為[-2,0],精確到0.0001。</p><p>  7.3 算法流程圖:</p><p>  圖7-1 二分法解非線性方程</p><p>&l

130、t;b>  7.4 程序調(diào)試:</b></p><p>  編譯組建并運(yùn)行程序。</p><p>  7.5 程序運(yùn)行運(yùn)行界面及運(yùn)行結(jié)果:</p><p>  圖7-2 二分法解非線性方程</p><p>  7.6 源程序代碼:</p><p>  #include <iostream>

131、</p><p>  #include <cmath></p><p>  using namespace std;</p><p>  int main()</p><p>  {double feval(double x);</p><p><b>  int k=1;</b>&l

132、t;/p><p>  double a,b,c,delta=0.00001,y1,y2,y3;</p><p>  cout<< "input a,b:";</p><p>  cin>>a>>b;</p><p>  y1=feval(a);</p><p>  y

133、2=feval(b);</p><p>  while(b-a>delta||k<20)</p><p><b>  {</b></p><p>  c=(a+b)/2;</p><p>  y3=feval(c);</p><p><b>  if(y3==0)</b

134、></p><p><b>  {</b></p><p><b>  a=c;</b></p><p><b>  b=c;</b></p><p><b>  }</b></p><p>  else if(y1*y3&g

135、t;0)</p><p><b>  {</b></p><p><b>  a=c;</b></p><p><b>  y1=y3;</b></p><p><b>  }</b></p><p><b>  else

136、</b></p><p><b>  {</b></p><p><b>  b=c;</b></p><p><b>  y2=y3;</b></p><p><b>  }</b></p><p><b>

137、  k++;</b></p><p><b>  }</b></p><p>  c=(a+b)/2;</p><p>  y3=feval(c);</p><p>  cout<<"the solution is:"<<c<<endl;</p&g

138、t;<p><b>  return 0;</b></p><p><b>  }</b></p><p>  double feval(double x)</p><p><b>  {</b></p><p><b>  double f;</

139、b></p><p>  f=x*x-2*x+1;</p><p>  return(f);</p><p><b>  }</b></p><p><b>  8.泰勒多項(xiàng)式逼近</b></p><p><b>  8.1算法說(shuō)明:</b><

140、;/p><p>  設(shè),而是固定值。如果,則有,其中為用來(lái)近似f(x)的多項(xiàng)式:,誤差項(xiàng)形如,c為x和之間的某個(gè)值c=c(x)。</p><p>  8.2 運(yùn)行程序,無(wú)需任何輸入,程序直接輸出cos(x)的值,并將泰勒多項(xiàng)式逼近方法和系統(tǒng)自帶函數(shù)計(jì)算的cos(x)值進(jìn)行比較。</p><p><b>  8.3 程序調(diào)試:</b></p&g

141、t;<p>  編譯組建并運(yùn)行程序。</p><p>  8.4 程序運(yùn)行運(yùn)行界面及運(yùn)行結(jié)果:</p><p>  圖8-1 泰勒多項(xiàng)式逼近</p><p>  8.5 源程序代碼:</p><p>  #include <iostream></p><p>  #include <cm

142、ath></p><p>  #define PI 3.14156</p><p>  float cosx(float x);</p><p>  float fun_cos(float x, int m);</p><p>  int main()</p><p>  {float x = PI/2;<

143、/p><p>  printf("cos(%f)=%f\t使用系統(tǒng)函數(shù)cos計(jì)算\n",x,cos(x));//使用系統(tǒng)函數(shù)cos計(jì)算</p><p>  printf("cos(%f)=%f\t使用泰勒公式計(jì)算\n",x,cosx(x));//使用泰勒公式計(jì)算</p><p><b>  return 0;</b

144、></p><p><b>  }</b></p><p>  float fun_cos(float x, int m)</p><p>  {float ret_val;</p><p><b>  int i;</b></p><p>  if (m%2 == 0

145、)</p><p>  {ret_val = 1.0;}</p><p><b>  else</b></p><p>  {ret_val = -1.0;}</p><p>  for (i=1;i<=2*m;i++)</p><p>  {ret_val = ret_val * x/i;

146、}</p><p>  return ret_val;</p><p><b>  }</b></p><p>  float cosx(float x)</p><p><b>  {</b></p><p>  float ret_val = 1.0;</p>

147、<p>  float temp_ret;</p><p>  int m = 1;</p><p>  float Pi = 3.1415926;</p><p>  if (x > 2*Pi || x < -2*Pi)</p><p>  {x = x-((int)(x/(2*Pi)))*(2*Pi);}<

148、/p><p><b>  do</b></p><p><b>  {</b></p><p>  temp_ret = fun_cos(x,m++);</p><p>  ret_val += temp_ret;</p><p><b>  }</b>&l

149、t;/p><p>  while (temp_ret>0.00005 || temp_ret<-0.00005);</p><p>  return ret_val;</p><p><b>  }</b></p><p>  9 牛頓-拉夫森迭代法解非線性方程f(x)=0 </p><p&g

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論