欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      計(jì)算方法上機(jī)1舍入誤差與數(shù)值穩(wěn)定性[精選五篇]

      時(shí)間:2019-05-12 04:37:04下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫(xiě)寫(xiě)幫文庫(kù)小編為你整理了多篇相關(guān)的《計(jì)算方法上機(jī)1舍入誤差與數(shù)值穩(wěn)定性》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫(xiě)寫(xiě)幫文庫(kù)還可以找到更多《計(jì)算方法上機(jī)1舍入誤差與數(shù)值穩(wěn)定性》。

      第一篇:計(jì)算方法上機(jī)1舍入誤差與數(shù)值穩(wěn)定性

      計(jì)算方法與實(shí)習(xí)實(shí)驗(yàn)報(bào)告

      實(shí)驗(yàn)報(bào)告名稱(chēng) 舍入誤差和數(shù)值穩(wěn)定性

      班級(jí):

      學(xué)號(hào):

      姓名: 成績(jī):

      1實(shí)驗(yàn)?zāi)康?/p>

      1)通過(guò)上機(jī)編程,復(fù)習(xí)鞏固以前所學(xué)程序設(shè)計(jì)語(yǔ)言及上機(jī)操作指令; 2)通過(guò)上機(jī)計(jì)算,了解舍入誤差所引起的數(shù)值不穩(wěn)定性。實(shí)驗(yàn)內(nèi)容

      對(duì)n=0,1,2,3,......,40計(jì)算定積分

      ?x^n/(x?5)dx013實(shí)驗(yàn)步驟

      算法一 利用遞推公式

      yn=1/n-5yn-1 n=1,2,3,...,40 1取y0= 1(/x?5)dx?ln6?ln5?0.182322 0算法二 利用遞推公式

      yn-1=1/5n-1/5yn n=40,39.....,1

      注意到 1111/246=1/6*x^40dx ??x^40/(x?5)??1/5*x^40dx?1/205000

      取y40?1/2*(1/205+1/246)?0.0044715 ????4 程序設(shè)計(jì)

      算法一的c語(yǔ)言程序: /*數(shù)值不穩(wěn)定算法*/ #include #include void main(){ double y0=log(6.0/5.0),y1;int n=1;計(jì)算方法與實(shí)習(xí)實(shí)驗(yàn)報(bào)告

      printf(“y[0]=%-20f”,y0);while(1){

      y1=1.0/n-5*y0;

      printf(“y[%d]=%-20f”,n,y1);

      if(n>=40)break;

      y0=y1;

      n++;

      if(n%3==0)printf(“n”);} } 算法二的c語(yǔ)言程序 #include #include void main(){ double y0=(1/205.0+1/246.0)/2,y1;int n=40;printf(“y[40]=%-20f”,y0);while(1){

      y1=1/(5.0*n)-y0/5.0;

      printf(“y[%d]=%-20f”,n-1,y1);

      if(n<=1)break;

      y0=y1;

      n--;

      if(n%3==0)printf(“n”);} }

      5實(shí)驗(yàn)結(jié)果及分析

      算法1的輸出結(jié)果: 計(jì)算方法與實(shí)習(xí)實(shí)驗(yàn)報(bào)告

      算法2的輸出結(jié)果:

      實(shí)驗(yàn)分析:從計(jì)算結(jié)果可以看出,算法一是數(shù)值不穩(wěn)定的,而算法二是數(shù)值穩(wěn)定的。

      6總結(jié)

      通過(guò)這次上機(jī),學(xué)習(xí)了解了舍入誤差在不同算法時(shí)對(duì)結(jié)果的影響不同,穩(wěn)定的算法才能獲得正確的結(jié)果。

      計(jì)算方法與實(shí)習(xí)實(shí)驗(yàn)報(bào)告

      7參考資料

      【1】孫志忠,吳宏偉,袁慰平,聞?wù)鸪?,?jì)算方法與實(shí)習(xí).第四版.南京:東南大學(xué)出版社 【2】譚浩強(qiáng).C程序設(shè)計(jì).第四版.北京:清華大學(xué)出版社

      第二篇:計(jì)算方法與實(shí)習(xí)上機(jī)報(bào)告

      計(jì)算方法與實(shí)習(xí)

      ——上機(jī)報(bào)告

      學(xué)院:電子工程學(xué)院

      2015.1.4

      學(xué)號(hào):***

      姓名: 劉

      習(xí)題一: 舍入誤差及穩(wěn)定性

      一、實(shí)驗(yàn)?zāi)康?/p>

      (1)通過(guò)上機(jī)編程,復(fù)習(xí)鞏固以前所學(xué)程序設(shè)計(jì)語(yǔ)言及上機(jī)操作指令;(2)通過(guò)上機(jī)計(jì)算,了解舍入誤差所引起的數(shù)值不穩(wěn)定性

      二、實(shí)驗(yàn)內(nèi)容

      ?

      21、用兩種不同的順序計(jì)算?n,分析其誤差的變化

      n?1100002、已知連分?jǐn)?shù)f?b0?a1,利用下面的算法計(jì)算f:

      b1?a2/?b2?a3/(...?an/bn)?ai?

      1(i?n?1,n?2,..., 0f?d0 di?1寫(xiě)一程序,讀入n,b0,b1,...,bn,a1,...,an,計(jì)算并打印f dn?bn,di?bi?

      3、給出一個(gè)有效的算法和一個(gè)無(wú)效的算法計(jì)算積分

      xnyn??dx

      (n?0,1,..., 104x?1N11?311?

      4、設(shè)SN??2,已知其精確值為????

      2?2NN?1?j?2j?1(1)編制按從大到小的順序計(jì)算SN的程序 1(2)編制按從小到大的順序計(jì)算SN的程序

      (3)按兩種順序分別計(jì)算S1000,S10000,S30000,并指出有效位數(shù)

      三、實(shí)驗(yàn)步驟、程序設(shè)計(jì)、實(shí)驗(yàn)結(jié)果及分析

      ?

      21、用兩種不同的順序計(jì)算?n,分析其誤差的變化

      n?110000(1)實(shí)驗(yàn)步驟:

      分別從1~10000和從10000~1兩種順序進(jìn)行計(jì)算,應(yīng)包含的頭文件有stdio.h和math.h(2)程序設(shè)計(jì): a.順序計(jì)算

      #include #include void main(){ double sum=0;int n=1;while(1){

      sum=sum+(1/pow(n,2));

      if(n%1000==0)printf(“sun[%d]=%-30f”,n,sum);

      if(n>=10000)break;

      n++;} printf(“sum[%d]=%fn”,n,sum);} b.逆序計(jì)算

      #include #include void main(){ double sum=0;int n=10000;

      while(n!=0){

      sum=sum+(1/pow(n,2));

      if(n%200==0)

      printf(“sum[%d]=%-10f”,n,sum);

      if(n<1)break;

      n--;} printf(“sum[%d]=%fn”,n,sum);}

      (3)實(shí)驗(yàn)結(jié)果及分析: 程序運(yùn)行結(jié)果: a.順序計(jì)算

      b.逆序計(jì)算

      結(jié)果分析:兩種不同順序計(jì)算結(jié)果是一樣的,順序計(jì)算誤差從一開(kāi)始就很小,而逆序計(jì)算誤差最開(kāi)始十分大,后來(lái)結(jié)果正確。

      2、已知連分?jǐn)?shù)f?b0?(1)實(shí)驗(yàn)步驟: 利用 dn?bn,di?bi?a1,計(jì)算f:

      b1?a2/?b2?a3/(...?an/bn)?ai?1,0

      (i?n?1,n?2,...,f?d0,計(jì)算f

      di?1(2)程序設(shè)計(jì) #include #include void main(){ int i=0,n;float a[100],b[100],c[100];printf(“please input n=”);scanf(“%d”,&n);

      printf(“nplease input a[0] to a[n-1]:n”);for(i=1;i

      printf(“a[%d]=”,i);

      scanf(“%f”,&a[i]);}

      printf(“nplease input b[0] to b[n-1]:n”);for(i=0;i

      printf(“b[%d]=”,i);

      scanf(“%f”,&b[i]);}

      d[n]=b[n];for(i=n-1;i>=0;i--)

      c[i]=b[i]+a[i+1]/c[i+1];printf(“nf=%fn”,c[0]);}(3)實(shí)驗(yàn)結(jié)果 程序運(yùn)行結(jié)果:

      3、給出一個(gè)有效的算法和一個(gè)無(wú)效的算法計(jì)算積分

      xnyn??dx

      (n?0,1,..., 104x?11(1)實(shí)驗(yàn)步驟

      利用C語(yǔ)言編寫(xiě)程序,分別使用數(shù)值穩(wěn)定的和數(shù)值不穩(wěn)定的計(jì)算公式所建立的遞推公式進(jìn)行計(jì)算。

      (2)程序設(shè)計(jì) #include #include main(){ double y_0=(1/4.0)*log(5),y_1;double y_2=(1.0/55.0+1.0/11.0)/2,y_3;int n=1,m=10;printf(“有效算法輸出結(jié)果:n”);printf(“y[0]=%-20f”,y_0);while(1){

      y_1=1.0/(4*n)+y_0/(-4.0);

      printf(“y[%d]=%-20f”,n,y_1);

      if(n>=10)break;

      y_0=y_1;

      n++;

      if(n%3==0)printf(“n”);} printf(“n無(wú)效算法的輸出結(jié)果:n”);printf(“y[10]=%-20f”,y_2);while(1){

      y_3=1.0/n-4.0*y_2;

      printf(“y[%d]=%-20f”,m-1,y_3);

      if(m<=1)break;

      y_2=y_3;

      m--;

      if(m%2==0)printf(“n”);} }(3)實(shí)驗(yàn)結(jié)果及分析 程序運(yùn)行結(jié)果:

      結(jié)果分析:無(wú)效算法數(shù)值不穩(wěn)定,誤差造成的影響特別大

      4、設(shè)SN?

      ?j?2N11?311?,已知其精確值為????

      2?2NN?1?j2?1(1)實(shí)驗(yàn)步驟

      先編程按從大到小的順序計(jì)算SN的程序,再編程按從小到大的順序計(jì)算SN的程序,然后按兩種順序分別計(jì)算S1000,S10000,S30000。(2)程序設(shè)計(jì) #include main(){

      int N;double SN[30000];SN[30000]=(3.0/2.0-1.0/30000.0-1/30001.0)/2.0;

      for(N=30000;N>=2;N--)

      SN[N-1]=SN[N]-1.0/(N*N-1);printf(“從大到小順序計(jì)算nSN[1000]=%fnSN[10000]=%fnSN[30000]=%fn”,SN[1000],SN[10000],SN[30000]);

      SN[2]=(3.0/2-1.0/2.0-1/3.0)/2.0;for(N=3;N<=30000;N++)

      SN[N]=SN[N-1]+1.0/(N*N-1);printf(“從小到大順序計(jì)算nSN[1000]=%fnSN[10000]=%fnSN[30000]=%fn”,SN[1000],SN[10000],SN[30000]);}(3)實(shí)驗(yàn)結(jié)果及分析 程序運(yùn)行結(jié)果:

      結(jié)果分析:不同順序計(jì)算所得結(jié)果是一樣的。

      四、總結(jié)

      通過(guò)這次上機(jī),學(xué)習(xí)了解了舍入誤差在不同算法時(shí)對(duì)結(jié)果的影響不同,穩(wěn)定的算法才能獲得正確的結(jié)果。

      習(xí)題二:

      一、實(shí)驗(yàn)?zāi)康?/p>

      (1)通過(guò)對(duì)二分法與牛頓迭代法做編程練習(xí)和上機(jī)運(yùn)算,進(jìn)一步體會(huì)二分法和牛頓法的不同。

      (2)編寫(xiě)割線(xiàn)迭代法的程序,求非線(xiàn)性方程的解,并與牛頓迭代法作比較。

      二、實(shí)驗(yàn)內(nèi)容

      1、用牛頓法求下列方程的根(1)x?e?0

      (2)xe?1?0(3)lgx?x?2?0

      2、編寫(xiě)割線(xiàn)法程序求解第一問(wèn)的方程

      三、實(shí)驗(yàn)步驟、程序設(shè)計(jì)、實(shí)驗(yàn)結(jié)果及分析

      1、牛頓法(1)實(shí)驗(yàn)步驟

      通過(guò)定義牛頓法求方程的子函數(shù),用main函數(shù)調(diào)用子函數(shù)求根(2)程序設(shè)計(jì) #include #include typedef float(*p)(float);

      float ff1(float x){

      return x*x-exp(x);} x2xfloat ff2(float x){

      return x*exp(x)-1;} float ff3(float x){

      return log(x)+x-2;} float

      answer(float(*p)(float)){

      int k=2;

      float m=1,n=-1,x2,a,b,c;

      if(p==ff3)n=2;

      printf(“x[0] = %.4f, x[1] = %.4f, ”,m,n);

      while(1)

      {

      if(fabs(m-n)<1e-4)break;

      a=p(n)*(n-m);

      b=p(n)-p(m);

      c=a/b;

      x2=n-c;

      m = n;

      n = x2;

      printf(“x[%d] = %.4f, ”,k,x2);

      k++;

      if(k%3==0)printf(“n”);

      }

      if(k%3!=0)printf(“n”);

      printf(“iteration times: %d, roots: %.4fn ”,k-2,n);return 0;} main(){ printf(“x*x-exp(x),n”);answer(ff1);printf(“x*exp(x)-1,n”);answer(ff2);printf(“l(fā)g(x)+x-2,n”);answer(ff3);return 0;}(3)實(shí)驗(yàn)結(jié)果及分析

      2、割線(xiàn)法(1)程序設(shè)計(jì) #include #include float gexian(float,float);float f(float);main(){

      int i,j;

      float x1=2.2;

      float x2=2,x3;

      scanf(“%d”,&i);

      if(i==1)printf(“%f”,x1);

      else if(i==2)printf(“%f”,x2);

      else

      {

      for(j=3;j<=i;j++)

      {

      x3=gexian(x1,x2);

      x1=x2;

      x2=x3;

      }

      printf(“%f”,gexian(x1,x2));

      } } float f(float x){ return(x*x-exp(x));}

      float gexian(float x1,float x2){ return(x2-(f(x2)/(f(x2)-f(x1)))*(x2-x1));}(3)實(shí)驗(yàn)結(jié)果及分析

      四、總結(jié)

      了解和學(xué)習(xí)了二分法和牛頓迭代法的思想以及程序設(shè)計(jì)的方法,比較了迭代法和牛頓法的特點(diǎn):牛頓法收斂速度較快,但對(duì)初值選取要求較高;割線(xiàn)法計(jì)算量少。

      習(xí)題三: 線(xiàn)性方程組數(shù)值解法

      一、實(shí)驗(yàn)?zāi)康?/p>

      (1)熟悉求解線(xiàn)性方程組的有關(guān)理論和方法;

      (2)會(huì)編制列主元消去法,LU分解法,雅可比及高斯-賽德?tīng)柕ǖ某绦?;?)通過(guò)實(shí)際計(jì)算,進(jìn)一步了解各種方法的優(yōu)缺點(diǎn),選擇合適的數(shù)值方法。

      二、實(shí)驗(yàn)內(nèi)容

      1、用列主元消去法解方程組

      2、用LU分解法解方程組

      三、實(shí)驗(yàn)步驟、程序設(shè)計(jì)、實(shí)驗(yàn)結(jié)果及分析

      1、用列主元消去法解方程組(1)程序設(shè)計(jì) #include #include void ColPivot(float*,int,float[]);void ColPivot(float*c,int n,float x[]){ int i,j,t,k;float p;for(i=0;i<=n-2;i++){

      k=i;

      for(j=i+1;j<=n-1;j++)

      if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))

      k=j;

      if(k!=i)

      for(j=i;j<=n;j++)

      {

      p=*(c+i*(n+1)+j);

      *(c+i*(n+1)+j)=*(c+k*(n+1)+j);

      *(c+k*(n+1)+j)=p;

      }

      for(j=i+1;j<=n-1;j++)

      {

      p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));

      for(t=i;t<=n;t++)

      *(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));

      } } for(i=n-1;i>=0;i--){

      for(j=n-1;j>=i+1;j--)

      (*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));

      x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));} } void main(){ int i;float x[4];float c[4][5]={1,1,0,3,4,2,1,-1,1,1,3,-1,-1,3,-3,-1,2,3,-1,4};

      ColPivot(c[0],4,x);for(i=0;i<=3;i++)

      printf(“x[%d]=%fn”,i,x[i]);}(2)實(shí)驗(yàn)結(jié)果及分析

      (1)題

      (2)題

      2、用LU分解法解方程組(1)程序設(shè)計(jì) #include void main(){ float x[4];int i;float a[4][5]={48,-24,0,-12,4,-24,24,12,12,4,0,6,20,2,-2,-6,6,2,16,-2 };void DirectLU(float*,int,float[]);DirectLU(a[0],4,x);for(i=0;i<=3;i++)printf(“x[%d]=%fn”,i,x[i]);} void DirectLU(float*u,int n,float x[]){ int i,r,k;for(r=0;r<=n-1;r++){

      for(i=r;r<=n;i++)

      for(k=0;k<=r-1;k++)

      *(u+r*(n+1)+i)-=*(u+r*(n+1)+k)*(*(u+k*(n+1)+i));

      for(i=r+1;i<=n-1;i++)

      {

      for(k=0;k<=r-1;k++)

      *(u+i*(n+1)+r)-=*(u+i*(n+1)+k)*(*(u+k*(n+1)+r));

      *(u+i*(n+1)+r)/=*(u+r*(n+1)+r);

      }

      } for(i=n-1;i>=0;i--){

      for(r=n-1;r>=i+1;r--)

      *(u+i*(n+1)+n)-=*(u+i*(n+1)+r)*x[r];

      x[i]=*(u+i*(n+1)+n)/(*(u+i*(n+1)+i));} }

      四、總結(jié)

      掌握了用列主元消去法和LU分解法求解方程組程序編寫(xiě)的技巧。

      習(xí)題四: 插值法

      一、實(shí)驗(yàn)?zāi)康?/p>

      (1)熟悉拉格朗日插值法多項(xiàng)式和牛頓插值多項(xiàng)式,注意其不同點(diǎn);(2)掌握三次樣條插值解決一些實(shí)際問(wèn)題。

      二、實(shí)驗(yàn)內(nèi)容

      1、按所給數(shù)據(jù)做二次插值,并求給定點(diǎn)的函數(shù)值

      2、按所給數(shù)據(jù)做五次插值,并求給定點(diǎn)的函數(shù)值

      3、牛頓前插公式計(jì)算函數(shù)值

      三、實(shí)驗(yàn)步驟、程序設(shè)計(jì)、實(shí)驗(yàn)結(jié)果及分析

      1、二次插值(1)程序設(shè)計(jì) #include float Lagrange(float x[],float y[],float xx,int n)

      //n為(n+1)次插值; { int i,j;float *a,yy=0;

      a=new float[n];for(i=0;i<=n-1;i++){

      a[i]=y[i];

      for(j=0;j<=n-1;j++)

      if(j!=i)a[i]*=(xx-x[j])/(x[i]-x[j]);

      yy+=a[i];} delete a;return yy;} void main(){ float x[5]={-3.0,-1.0,1.0,2.0,3.0};float y[5]={1.0,1.5,2.0,2.0,1.0};float xx1=-2,xx2=0,xx3=2.75,yy1,yy2,yy3;yy1=Lagrange(x,y,xx1,3);yy2=Lagrange(x,y,xx2,3);yy3=Lagrange(x,y,xx3,3);printf(“x1=%-20f,y1=%fn”,xx1,yy1);printf(“x2=%-20f,y2=%fn”,xx2,yy2);printf(“x3=%-20f,y3=%fn”,xx3,yy3);}(2)實(shí)驗(yàn)結(jié)果

      2、五次插值(1)程序設(shè)計(jì) #include float Lagrange(float x[],float y[],float xx,int n)

      //n為(n+1)次插值; { int i,j;float *a,yy=0;

      a=new float[n];for(i=0;i<=n-1;i++){

      a[i]=y[i];

      for(j=0;j<=n-1;j++)

      if(j!=i)a[i]*=(xx-x[j])/(x[i]-x[j]);

      yy+=a[i];} delete a;return yy;} void main(){ float x[6]={0.30,0.42,0.50,0.58,0.66,0.72};float y[6]={1.04403,1.08462,1.11803,1.15603,1.19817,1.23223};float xx1=0.46,xx2=0.55,xx3=0.60,yy1,yy2,yy3;yy1=Lagrange(x,y,xx1,6);yy2=Lagrange(x,y,xx2,6);

      yy3=Lagrange(x,y,xx3,6);printf(“x1=%-20f,y1=%fn”,xx1,yy1);printf(“x2=%-20f,y2=%fn”,xx2,yy2);printf(“x3=%-20f,y3=%fn”,xx3,yy3);}

      (2)實(shí)驗(yàn)結(jié)果

      3、牛頓前插公式計(jì)算函數(shù)值(1)程序設(shè)計(jì) #include #define N 3 void Difference(float y[],float f[4][4],int n){

      int k,i;f[0][0]=y[0];f[1][0]=y[1];f[2][0]=y[2];f[3][0]=y[3];for(k=1;k<=n;k++)

      for(i=0;i<=(N-k);i++)

      f[i][k]=f[i+1][k-1]-f[i][k-1];return;} void main(){ int i,k=1;float a,b=1,m=21.4,t=1.4,f[4][4]={0};float x[5]={20,21,22,23,24};float y[5]={1.30103,1.32222,1.34242,1.36173,1.38021};Difference(y,f,N);a=f[0][0];for(i=1;i<=N;i++){

      k=k*i;

      b=b*(t-i+1);

      a=a+b*f[0][i]/k;} printf(“x(k)n”);for(i=0;i<=4;i++)

      printf(“%-20f”,x[i]);printf(“ny(k)n”);

      for(i=0;i<=4;i++)

      printf(“%-20f”,y[i]);for(k=1;k<=3;k++){

      printf(“nF(%d)n ”,k);

      for(i=0;i<=(3-k);i++)

      {

      printf(“%-20f”,f[i][k]);

      } } printf(“n”);printf(“f(%f)=%-20f”,m,a);printf(“n”);}(2)實(shí)驗(yàn)結(jié)果

      四、總結(jié)

      學(xué)習(xí)了插值法,學(xué)會(huì)了利用插值法編程求多項(xiàng)式的解,可以求解很多問(wèn)題,讓求解多項(xiàng)式解變得非常簡(jiǎn)單。

      習(xí)題五: 曲線(xiàn)擬合

      一、實(shí)驗(yàn)?zāi)康?/p>

      (1)了解最小二乘法的基本原理,通過(guò)計(jì)算機(jī)解決實(shí)際問(wèn)題;(2)了解超定方程組的最小二乘解法。

      二、實(shí)驗(yàn)內(nèi)容

      1、分別用拋物線(xiàn)y?a?bx?cx2和指數(shù)曲線(xiàn)y?aebx擬合所給數(shù)據(jù),并比較這兩個(gè)擬合函數(shù)的優(yōu)劣。

      2、按所給實(shí)驗(yàn)數(shù)據(jù),用形如y?a?bx的拋物線(xiàn)進(jìn)行最小二乘擬合。

      三、程序設(shè)計(jì)、結(jié)果分析

      1、分別用拋物線(xiàn)y?a?bx?cx和指數(shù)曲線(xiàn)y?ae擬合所給數(shù)據(jù) a.拋物線(xiàn)

      (1)程序設(shè)計(jì): #include #include void main(){ int i;float a[3];float x[15]={1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8};

      2bx2 float y[15]={33.4,79.50,122.65,159.05,189.15,214.15,238.65,252.50,267.55,280.50,296.65,301.40,310.40,318.15,325.15};void Approx(float[],float[],int,int,float[]);Approx(x,y,15,2,a);for(i=0;i<=2;i++)

      printf(“a[%d]=%fn”,i,a[i]);} void Approx(float x[],float y[],int m,int n,float a[]){ int i,j,t;float *c=new float[(n+1)*(n+2)];float power(int,float);void ColPivot(float *,int,float[]);for(i=0;i<=n;i++){

      for(j=0;j<=n;j++)

      {

      *(c+i*(n+2)+j)=0;

      for(t=0;t<=m-1;t++)

      *(c+i*(n+2)+j)+=power(i+j,x[t]);

      }

      *(c+i*(n+2)+n+1)=0;

      for(j=0;j<=m-1;j++)

      *(c+i*(n+2)+n+1)+=y[j]*power(i,x[j]);} ColPivot(c,n+1,a);delete c;}

      void ColPivot(float *c,int n,float x[]){ int i,j,t,k;float p;for(i=0;i<=n-2;i++){

      k=i;

      for(j=i+1;j<=n-1;j++)

      if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))

      k=j;

      if(k!=i)

      for(j=i;j<=n;j++)

      {

      p=*(c+i*(n+1)+j);

      *(c+i*(n+1)+j)=*(c+k*(n+1)+j);

      *(c+k*(n+1)+j)=p;

      }

      for(j=i+1;j<=n-1;j++)

      {

      p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));

      for(t=i;t<=n;t++)*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));

      } } for(i=n-1;i>=0;i--){

      for(j=n-1;j>=i+1;j--)

      (*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));

      x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));} }

      float power(int i,float v){ float a=1;while(i--)a*=v;return a;}(2)實(shí)驗(yàn)結(jié)果

      2、最小二乘擬合(1)程序設(shè)計(jì) #include #include void main(){ int i,n;float a[2];float x[15]={1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8},z[15];float y[15]={33.4,79.50,122.65,159.05,189.15,214.15,238.65,252.50,267.55,280.50,296.65,301.40,310.40,318.15,325.15};for(n=0;n<=14;n++)

      //增加了數(shù)組z;

      {z[n]=log(y[n]/x[n]);} void Approx(float[],float[],int,int,float[]);Approx(x,z,15,1,a);

      //變成一次擬合;

      //for(i=0;i<=1;i++)

      //printf(“a[%d]=%fn”,i,a[i]);printf(“a=exp(a[0])=%fn”,exp(a[0]));printf(“b=-a[1]=%fn”,-a[1]);} void Approx(float x[],float y[],int m,int n,float a[]){ int i,j,t;float *c=new float[(n+1)*(n+2)];float power(int,float);void ColPivot(float *,int,float[]);for(i=0;i<=n;i++){

      for(j=0;j<=n;j++)

      {

      *(c+i*(n+2)+j)=0;

      for(t=0;t<=m-1;t++)

      *(c+i*(n+2)+j)+=power(i+j,x[t]);

      }

      *(c+i*(n+2)+n+1)=0;

      for(j=0;j<=m-1;j++)

      *(c+i*(n+2)+n+1)+=y[j]*power(i,x[j]);} ColPivot(c,n+1,a);delete c;}

      void ColPivot(float *c,int n,float x[]){ int i,j,t,k;float p;for(i=0;i<=n-2;i++){

      k=i;

      for(j=i+1;j<=n-1;j++)

      if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))

      k=j;

      if(k!=i)

      for(j=i;j<=n;j++)

      {

      p=*(c+i*(n+1)+j);

      *(c+i*(n+1)+j)=*(c+k*(n+1)+j);

      *(c+k*(n+1)+j)=p;

      }

      for(j=i+1;j<=n-1;j++)

      {

      p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));

      for(t=i;t<=n;t++)*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));

      } } for(i=n-1;i>=0;i--){

      for(j=n-1;j>=i+1;j--)

      (*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));

      x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));} }

      float power(int i,float v){ float a=1;while(i--)a*=v;return a;}(2)實(shí)驗(yàn)結(jié)果

      四、總結(jié)

      通過(guò)曲線(xiàn)擬合,最小二乘法的基本原理的學(xué)習(xí),我學(xué)會(huì)了利用計(jì)算機(jī)解決現(xiàn)實(shí)實(shí)際問(wèn)題中的曲線(xiàn)擬合。

      習(xí)題六: 數(shù)值積分

      一、實(shí)驗(yàn)?zāi)康?/p>

      (1)通過(guò)實(shí)際計(jì)算體會(huì)各種方法的精確度;(2)會(huì)編寫(xiě)用龍貝格算法求定積分的程序。

      二、實(shí)驗(yàn)內(nèi)容

      編寫(xiě)復(fù)化柯特斯求積分公式,并計(jì)算例題1例題2,觀(guān)察n為多少時(shí)有6位有效數(shù)字。

      三、程序設(shè)計(jì)、實(shí)驗(yàn)結(jié)果及分析(1)程序設(shè)計(jì) #include #include float Cotes(float(*f)(float),float a,float b,int n){ int k;float c,c1=0,c2,c3,c4;float h=(b-a)/n;c2=(*f)(a+h/4);c3=(*f)(a+h/2);c4=(*f)(a+3*h/4);for(k=1;k<=n-1;k++){

      c1+=(*f)(a+k*h);

      c2+=(*f)(a+k*h+h/4);

      c3+=(*f)(a+k*h+h/2);

      c4+=(*f)(a+k*h+3*h/4);} c=h/90*(7*((*f)(a)+(*f)(b))+14*c1+32*c2+12*c3+32*c4);return c;} float f(float x){ return 1/sqrt(1+x*x*x);} void main(){ int i,n=4;float c;for(i=0;i<=4;i++){

      c=Cotes(f,0,1,n);

      printf(“C(%d)=%fn”,n,c);

      n*=2;} } #include #include float Cotes(float(*f)(float),float a,float b,int n){ int k;float c,c1=0,c2,c3,c4;float h=(b-a)/n;c2=(*f)(a+h/4);c3=(*f)(a+h/2);c4=(*f)(a+3*h/4);for(k=1;k<=n-1;k++){

      c1+=(*f)(a+k*h);

      c2+=(*f)(a+k*h+h/4);

      c3+=(*f)(a+k*h+h/2);

      c4+=(*f)(a+k*h+3*h/4);} c=h/90*(7*((*f)(a)+(*f)(b))+14*c1+32*c2+12*c3+32*c4);return c;} float f(float x){ // return 1/sqrt(1+x*x*x);

      if(x==0)return 1;

      else return sin(x)/x;} void main(){ int i,n=4;float c;for(i=0;i<=4;i++){ // c=Cotes(f,0,1,n);

      c=Cotes(f,0,5,n);

      printf(“C(%d)=%fn”,n,c);

      n*=2;} }

      (2)實(shí)驗(yàn)結(jié)果及分析

      四、總結(jié)

      學(xué)習(xí)了復(fù)化辛卜生公式,自適應(yīng)梯形公式,龍貝格算法,運(yùn)用求解定積分并控制精度的方法。

      習(xí)題七: 常微分方程數(shù)值解法

      一、實(shí)驗(yàn)?zāi)康?/p>

      (1)熟悉求解常微分方程初值問(wèn)題的有關(guān)方法和理論,主要是改進(jìn)歐拉公式,四階龍格-庫(kù)塔法和阿當(dāng)姆斯方法;

      (2)編制上述方法計(jì)算機(jī)程序,包括求解微分方程組的計(jì)算程序;(3)針對(duì)實(shí)習(xí)題編制程序,并上機(jī)計(jì)算其所需要的結(jié)果;

      (4)體會(huì)各種解法的功能,優(yōu)缺點(diǎn)及適用場(chǎng)合,會(huì)選取適當(dāng)?shù)那蠼夥椒ā?/p>

      二、實(shí)驗(yàn)內(nèi)容

      1、分別用改進(jìn)歐拉法與四階龍格-庫(kù)塔公式(取h?0.1)求解下列微分方程初值問(wèn)題

      2、用四階龍格-庫(kù)塔公式(取h?0.1)解下列微分方程組初值問(wèn)題

      三、實(shí)驗(yàn)步驟、程序設(shè)計(jì)、實(shí)驗(yàn)結(jié)果及分析

      1、分別用改進(jìn)歐拉法與四階龍格-庫(kù)塔公式(取h?0.1)求解下列微分方程初值問(wèn)題 a.改進(jìn)歐拉法(1)程序設(shè)計(jì) #include void ModEuler(float(*f)(float,float),float x0,float y0,float xn,int n){ int i;float yp,yc,x=x0,y=y0,h=(xn-x0)/n;printf(“x[0]=%fty[0]=%fn”,x,y);for(i=1;i<=n;i++){

      yp=y+h*(*f)(x,y);

      x=x0+i*h;

      yc=y+h*(*f)(x,yp);

      y=(yp+yc)/2;

      printf(“x[%d]=%fty[%d]=%fn”,i,x,i,y);} } float f(float x,float y){ //return x*x+y*y;

      //題(1)

      //return 1/(1+y*y);

      //題(2)

      return y-2*x/y;

      //題(3)} void main(){ float xn=1.0,x0=0,y0=1;

      ModEuler(f,x0,y0,xn,10);}

      (2)實(shí)驗(yàn)結(jié)果及分析(1)

      (2)

      (3)

      b.四階龍格-庫(kù)塔公式(1)程序設(shè)計(jì) #include void Runge_Kutta(float(*f)(float x,float y),float a,float b,float y0,int N){ float x=a,y=y0,K1,K2,K3,K4;float h=(b-a)/N;int i;printf(“x[0]=%fty[0]=%fn”,x,y);for(i=1;i<=N;i++){

      K1=(*f)(x,y);

      K2=(*f)(x+h/2,y+h*K1/2);

      K3=(*f)(x+h/2,y+h*K2/2);

      K4=(*f)(x+h,y+h*K3);

      y=y+h*(K1+2*K2+2*K3+K4)/6;

      x=a+i*h;

      printf(“x[%d]=%fty[%d]=%fn”,i,x,i,y);} } float f(float x,float y){ //return x*x+y*y;

      //題(1)

      //return 1/(1+y*y);

      //題(2)

      return y-2*x/y;

      //題(3)} void main(){ float a=0,b=1.0,y0=1;Runge_Kutta(f,a,b,y0,10);}(2)實(shí)驗(yàn)結(jié)果(1)

      (2)

      (3)

      2、四階龍格-庫(kù)塔公式解微分方程組初值問(wèn)題(1)程序設(shè)計(jì) #include void Runge_Kutta(float(*f)(float x,float y,float z),float(*g)(float x,float y,float z),float a,float b,float y0,float g0,int N){ float x=a,y=y0,z=g0,K1,K2,K3,K4,l1,l2,l3,l4;float h=(b-a)/N;int i;printf(“x[0]=%fty1[0]=%fty2[0]=%fn”,x,y,z);for(i=1;i<=N;i++){

      K1=(*f)(x,y,z);l1=(*g)(x,y,z);

      K2=(*f)(x+h/2,y+h*K1/2,z+h*l1/2);l2=(*g)(x+h/2,y+h*K1/2,z+h*l1/2);

      K3=(*f)(x+h/2,y+h*K2/2,z+h*l2/2);l3=(*g)(x+h/2,y+h*K2/2,z+h*l2/2);

      K4=(*f)(x+h,y+h*K3,z+h*l3);l4=(*g)(x+h,y+h*K3,z+h*l3);

      y=y+h*(K1+2*K2+2*K3+K4)/6;

      z=z+h*(l1+2*l2+2*l3+l4)/6;

      x=a+i*h;

      printf(“x[%d]=%fty[%d]=%ftz[%d]=%fn”,i,x,i,y,i,z);} } float f(float x,float y,float z){

      return 120-2*y+2*z;

      } float g(float x,float y,float z){

      return 2*y-5*z;

      } void main(){ float a=0,b=1.0,y0=0,g0=0;Runge_Kutta(f,g,a,b,y0,g0,10);}

      (2)實(shí)驗(yàn)結(jié)果

      四、總結(jié)

      通過(guò)這次學(xué)習(xí),我掌握了根據(jù)不同場(chǎng)合選擇不同方法計(jì)算求解問(wèn)題的方法,主要學(xué)習(xí)了改進(jìn)歐拉法和四階龍格-庫(kù)塔法求解微分方程的求解問(wèn)題方法。

      計(jì)算方法上機(jī)匯總:

      通過(guò)對(duì)這門(mén)課的學(xué)習(xí),我們學(xué)習(xí)了很多計(jì)算方程、曲線(xiàn)擬合、求解微分方程的方法。而實(shí)習(xí)

      課讓我們將所學(xué)的原理應(yīng)用到實(shí)踐中去,上機(jī)編寫(xiě)程序的過(guò)程中我們不斷的運(yùn)用已學(xué)知識(shí),掌握了求解各種實(shí)際問(wèn)題的方法,并且體會(huì)了不同的方法的不同結(jié)果,從而在不同的場(chǎng)合,要用合適的計(jì)算方法來(lái)求解問(wèn)題。我們求解的問(wèn)題包括誤差分析,線(xiàn)性方程組的求解,微分方程的求解等問(wèn)題。在選擇合適的計(jì)算方法的時(shí)候要考慮方法的收斂性,穩(wěn)定性,以及哪種方法計(jì)算速度快,最終結(jié)果誤差小。這門(mén)課與計(jì)算機(jī)密切結(jié)合并且實(shí)用性極強(qiáng),能夠?qū)⑺鶎W(xué)的知識(shí)在實(shí)踐中得到應(yīng)用,加強(qiáng)了我對(duì)專(zhuān)業(yè)學(xué)習(xí)的信心。

      參考文獻(xiàn):

      【1】孫志忠.計(jì)算方法典型例題分析.第二版.北京:科學(xué)出版社,2005 【2】孫志忠,袁慰平,計(jì)算方法與實(shí)習(xí).第二版.南京:東南大學(xué)出版社,2011 【3】譚浩強(qiáng).C程序設(shè)計(jì).第四版.北京:清華大學(xué)出版社,2010 ◆ 《數(shù)值計(jì)算方法》 合肥工業(yè)大學(xué)數(shù)學(xué)與信息科學(xué)系 編 合肥工業(yè)大學(xué)出版社 ◆ 《計(jì)算方法》 鄧建中等編,西安交大出版社,1985。

      ◆ 《數(shù)值計(jì)算和C程序集》蔣長(zhǎng)錦編著,中國(guó)科學(xué)技術(shù)大學(xué)出版社,1998?!?《計(jì)算方法引論》徐萃薇編,高等教育出版社,1999。

      ◆ 黃友謙,程詩(shī)杰,陳浙鵬,《數(shù)值試驗(yàn)》,北京:高等教育出版社,1989

      ◆ 蔡大用,《數(shù)值分析與實(shí)驗(yàn)學(xué)習(xí)指導(dǎo)》,北京:清華大學(xué)出版社與施普林格出版社,2001 ◆ 肖筱南,《值計(jì)算方法與上機(jī)實(shí)習(xí)指導(dǎo)》,北京:北京大學(xué)出版社,2004

      A.Quarteroni, R.Sacco, F.Saleri,《Numerical Mathematics》, New York:Springer-Verlag, 2000

      下載計(jì)算方法上機(jī)1舍入誤差與數(shù)值穩(wěn)定性[精選五篇]word格式文檔
      下載計(jì)算方法上機(jī)1舍入誤差與數(shù)值穩(wěn)定性[精選五篇].doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦