VB编程根号怎么打 用数值逼近法求解根号N,精确到小数点后四位

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
(用解析法设计程序.doc 15页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
(用解析法设计程序
你可能关注的文档:
··········
··········
一、?????? 教学目标
1、??????????? 知识与技能
知识目标:
1.对“算法”的概念作进一步的了解。
2.了解解析算法的特点。
3.通过实例的学习,掌握解析算法的各环节。
4.掌握运用各学科知识解决实际问题的方法。
5.掌握从解决问题的解析式到设计相应程序的窗体和程序代码的方法。
6.通过实践掌握用解析算法编写程序代码的一些技巧。
7.能关注使用解析算法解决问题的意义。
8.在综合应用各种知识解决问题时提高自己的整体素质。
9.能运用学过的窗体和控件的基本知识是进行可视化编程。善于通过交流设计出简洁好用的界面。
能够用解析法分析简单问题,设计算法,编写程序求解问题。
2、??????????? 方法与过程
以学生生活中最熟悉的测量物体、楼房的高度入手,引出有关测量的话题。通过测量不可到达底部的物体的高度的问题,导出了解析算法的基本概念,然后通过计算电阻和计算小球弹跳路程的两个例题,叙述了解析算法应用的两个重要手段:通过列出方程(或方程组)然后求解和用重复结构对解析式进行计算。进一步提高学生对解析算法和可以通过多种方法设计程序的理解。
3、??????????? 情感态度和价值观
结合高中生想象具有较强的随意性、更富于现实性的身心发展特点,综合反映出提升学生在各个领域的计算机应用水平,提高学生交流和讨论,自己总结获得新的知识能力,培养学生正确寻找解决问题的方法和正确的学习方法。
二、?????? 重点难点
1、??????????? 教学重点
(1)? 理解解析法的基本概念。要培养学生善于综合运用数学、物理、化学等各学科的知识和思考方法,寻找问题中各要素之间的关系,导出解决问题的解析式或列出相关的方程,然后设计程序求解。
(2)? 根据算法写出程序代码并且调试程序求得问题的正确解答的能力。当算法确定之后,应当能够熟练地根据算法写出程序代码,并且通过调试程序发现并改正错误,得出正确的解答。
(3)? 根据问题的特点,找到系统提供的资源(如各种数据类型、内部函数等等),简化问题的求解过程。
2、??????????? 教学难点
(1)? 解析式的导出或方程(组)的列出并求解。这些工作要求对问题所涉及的领域有比较深的认识,它的困难是外在的,是由问题的性质决定的。
(2)? 算法的合理设计。不论是使用重复结构还是寻找的运算顺序,对于经验不足的初学者是有困难的,特别是计算过程中可能会遇到计算误差的积累影响运行结果的情况,需要有较多的编程经验才能加以解决。
(3)? VB的数据类型。
三、?????? 教学环境
1、??????????? 教材处理
教材选自《广东省普通高中信息技术选修一:算法与程序设计》第四章第一节,本节从古埃及测量金字塔高度故事引入,引出有关测量的话题。通过一道测量不可到达底部的物体的高度的问题,导出了解析算法的基本概念,然后通过计算小球弹跳路程的计算,和电阻计算两个例题,叙述了解析算法应用的两个重要手段:用重复结构对解析式进行计算和通过列出方程(或方程组)然后求解。在此基础上教材安排了两个实践探究活动,进一步提高学生对解析算法的理解。
教材经处理后,以学生生活中最熟悉的测量物体、楼房的高度入手,引出有关测量的话题。通过一道测量不可到达底部的物体的高度的问题,导出了解析算法的基本概念,然后通过计算电阻和计算小球弹跳路程的两个例题,叙述了解析算法应用的两个重要手段:通过列出方程(或方程组)然后求解和用重复结构对解析式进行计算。进一步提高学生对解析算法和可以通过多种方法设计程序的理解。
教学方法是以实现“教—引—放—收”的教学过程,体现“问题情景式任务驱动”的教学方法。任务驱动强调让学生在密切联系学习、生活和社会实际的有意义的“任务”情景中,通过完成任务来学习知识、获得技能、形成能力、内化伦理。
采用任务驱动、讲解、分析归纳、探究、实践操作和学生自主学习相结合的学习方法。
2、??????????? 预备知识
学生已掌握了用计算机解决问题的过程,掌握了VB界面设计的相关内容,掌握了程序设计的基础。
3、??????????? 硬件要求
建议本节课在计算机机房或多媒体电脑教室中完成,最好有广播教学系统或投影仪,为拓展学习,学生机应允许上互联网。
??????????? 所需软件
学生机要安装VB6.0或以上版本。
5、??????????? 所需课时
2课时(90分钟)
四、?????? 教学过程
同学们,我想所有的同学都会测量物体和楼房的垂直高度,但如下的问题会测量吗?
4.1.1????? 用解析法求解问题的基本过程
1、测量高度问题的求解
4.1: 如图4-1所示,MN是竖直于地面的物体,其底部N不可到达。为了测量MN的高度,在地面上选取一条与MN在同一平面的水平线线段A
正在加载中,请稍后...数值逼近C程序
已有 783 次阅读
|个人分类:|系统分类:|
C语言中数组、指针、函数都是初学者不易掌握和应用的内容,数值分析中的函数逼近问题,也是较抽象的内容,这些内容对理工科学生来说都是应该必学必会的。用C语言编写数值分析中的算法,即有利于学生巩固计算机语言及数值分析知识,也有利于学生提高分析解决问题的能力,从而深入、形象地理解这两门课程内容,掌握算法的精髓。本文重点介绍了用C语言编写曲线拟合的最小二乘法程序,其中用到了“函数指针数组”。这个程序能使学生更好地理解基函数、最佳平方逼近、法方程等概念,同时程序中也涉及到线性方程组求解、文件读写、数组参数传递、绘图等。最后也给出对同一组数据进行分段线性插值、拉格朗日插值、三次样条插值、三角插值等的图像,这样有利于比较各种数值逼近方法,促进对知识的掌握及对算法综合运用。 函数的最佳平方逼近及曲线拟合的最小二乘法原理在此不多阐述,简单来说就是由一类基函数的线性组合来逼近某一函数,或者说在简单的基函数张成的函数空间中找一函数,在最佳平方意义上逼近所研究函数。其原理在几何上也有直观的意义,即等价于“垂线段最短”,如图:这也是求解“法方程”这一词的意义吧,法方程可由“多元函数求极值必要条件”导出,解超定线性方程组Ax=b也是这原理,可归结为解法方程A’Ax=A’b。 程序中定义了几个基函数,为了程序的通用性,定义了“函数指针数组”,即:double (*pF[3])(double x)={fi0,fi1,fi2}; 这是我写这篇博文要强调的,这里定义的pF是一个“函数指针数组”,fi0,fi1…是已定义的基函数。pF和[]、*紧邻,[]优先级高,首先说明pF是个数组,加*说明是“指针数组”,括号后又有(double x)说明是指向函数的,这函数该有一个double型的参数(不写x也可),函数的返回类型也是double型。 以下是程序,有点长,“一肩担尽古今愁”,这是期末复习时演示的一个程序,可以复习练习很多内容。(也没写太多的注释,如真需要可另解释)#include &stdafx.h&#include &windows.h&#include &conio.h&#include &stdlib.h&#include &math.h&#include &malloc.h&#define PI 3.typedef struct{ &double R; &double I;}COMPLEX;int LUp(double *A,double *x,double *b,intn){ & & & inti,r,k; &for(i=1;i&n;i++) & & & A[i*n+0]=A[i*n+0]/A[0*n+0];for(r=1;r&n;r++) & & & &{ & & &for(i=r;i&n;i++) & & & & & & & & & & &{ & & &s=0; & & & & & & & & & & & & & & for(k=0;k&r;k++) & & & & & & & & & & & & & & & & & &s+=A[r*n+k]*A[k*n+i]; & & & & & & & & & & & & & & A[r*n+i]=A[r*n+i]-s; & & & & & & & & & & &} & & & & & & & &for(i=r+1;i&n;i++) & & & & & & & & & & &{ & & &s=0; & & & & & & & & & & & & & & for(k=0;k&r;k++) & & & & & & & & & & & & & & & & & &s+=A[i*n+k]*A[k*n+r]; & & & & & & & & & & & & & & A[i*n+r]=(A[i*n+r]-s)/A[r*n+r]; & & & & & & & & & & &} & & & & s=0; & & & & for(k=0;k&=r-1;k++) & & & & & & & &s+=A[r*n+k]*b[k]; & & & & b[r]=b[r]-s; & & & &} & x[n-1]=b[n-1]/A[(n-1)*n+n-1]; & for(i=n-2;i&=0;i--) & & & &{s=0; & & & & for(k=i+1;k&n;k++) & & & & & & & &s+=A[i*n+k]*x[k]; & & & & x[i]=(b[i]-s)/A[i*n+i]; & & & &}return0;}void zhuiganfa(int N,double a[],doubleb[],double c[],double f[],double X[]){ double *bt=new double[N]; &double *y=new double[N]; & &bt[0]=c[0]/b[0]; &for(i=1;i&=N-2;i++) & & & & bt[i]=c[i]/(b[i]-a[i]*bt[i-1]); &y[0]=f[0]/b[0]; &for(i=1;i&=N-1;i++) & & & & y[i]=(f[i]-a[i]*y[i-1])/(b[i]-a[i]*bt[i-1]); & X[N-1]=y[N-1]; & for(i=N-2;i&=0;i--) & & & &X[i]=y[i]-bt[i]*X[i+1]; & &delete [] bt,y;}double spline(int n,double x[],doubley[],double bj0,double bjn ,double xx ){double tf1,tf2;double S; double *a=new double[n]; double *b=new double[n]; double *c=new double[n]; double *d=new double[n]; double *h=new double[n]; double *M=new double[n]; & for(j=0;j&=n-2;j++) & & & & & & &h[j]=x[j+1]-x[j]; & & & for(j=1;j&=n-2;j++)
& & & &a[j]=(h[j-1])/(h[j-1] + &h[j]); & & &a[n-1]=1; & & &for(j=0;j&n;j++) & & & &b[j]=2; & & &for(j=1;j&=n-2;j++) & & & &c[j]=(h[j])/(h[j-1] +h[j]); & & & & &c[0]=1; & & & &for(j=1;j&=n-2;j++) & & & &{ & tf1= (y[j+1]-y[j])/(h[j]); &
& & & & & &tf2= (y[j]-y[j-1])/(h[j-1]); & & & & & & & &d[j]=6*( tf1 - tf2 &)/( h[j-1] + h[j] ); & & & &} & & & & & &d[0]=6*((y[1]-y[0])/(h[0]) -bj0 )/(h[0]); & & & & & & & d[n-1]=6*(bjn-(y[n-1]-y[n-2])/(h[n-2]))/(h[n-2]); & & &zhuiganfa(n,a,b, c,d,M);
& & for(j=0;j&=n-2;j++) & & & & & & &{if(xx&=x[j]&&xx&x[j+1]) & & & & & & & & & &{S=M[j]*(x[j+1]-xx)*(x[j+1]-xx)*(x[j+1]-xx)/(6* (h[j]) &) & & & & & & & & & & &+M[j+1]*(xx-x[j])*(xx-x[j])*(xx-x[j]) / (6* (h[j]) ) & & & & & & & & & & & & & &+( &y[j]- M[j]* &(h[j])*(h[j]) /6 & ) * &((x[j+1]-xx) &/(h[j]) ) & & & & & & & & & & & & & &+( &y[j+1]- M[j+1]* &(h[j])*(h[j]) /6 & ) * ( (xx-x[j]) &/(h[j]) ); & & & & & & & & & & } & & & & & & &}
& & &delete [] a,b,c,d,h,M; & return S;}double lagrange_line(double x[],doubley[],int n,double xx){ & double yy=0; & & & & & & & &for(k=0;k&n-1;k++) & & & & & & & & & &{if(xx&=x[k]&&xx&=x[k+1])
& & & & & & & & & & & & & {yy=y[k]*(x[k+1]-xx)/(x[k+1]-x[k])+y[k+1]*(xx-x[k])/(x[k+1]-x[k]); & & & & & & & & & & & & & & & & & & & & & & & & & & & &} & & & & & & & & & & } &}double lagrange(double x[],double y[],intn,double xx){ &double yy=0,Lk; & int j,k; & & &for(k=0;k&n;k++){ & & & & & & &Lk=1; & & & & & & &for(j=0;j&n;j++){ & & & & & & & & &if(j!=k)Lk*=(xx-x[j])/(x[k]-x[j]); & & & & & & &} & & & yy+=y[k]*Lk; & & &} & & &}int readdata(double x[],double y[]){ &FILE * &if((fp=fopen(&.txt&,&r&))==NULL) & & & & {printf(&cannot open file\n&); & & & & exit(0) ;} &int i=0; &while(!feof(fp)) &{ & fscanf(fp,&%lf,%lf\n&,&x[i],&y[i]); & & & &i++; & } &fclose(fp); &}int drawfunction(double a,double b,doubleya,double yb,double (*f)(double ),char *win,int red){//a,b为x的区间,ya,yb为估计的y的区间 & & &getch(); & & &HWND hWnd=FindWindow(NULL,win); & HDC hDC=GetDC(hWnd); & int i,n=800,iX,iY; & &double wx0=50,wx1=600,wy0=50,wy1=500; & double x,y; & & &for(i=0;i&n;i++){ & & & & & & &x=a+i*(b-a)/n; & & & & & & &y=f(a+i*(b-a)/n); & & & iX=(int)(wx0+ (x-a)* (wx1-wx0)/(b-a) ); & & & & & & iY=600-(int)(wy0+(y-ya)*(wy1-wy0)/(yb-ya) ); & & & & & & &SetPixel(hDC,iX,iY,RGB(red,0,255) ); & & &} & & &getch(); & & &return 0;}double mySpline(double t){ & & &int N=16,n; & & &double *x=new double [N]; & & &double *y=new double [N]; & double bj0=3.0,bjn=-0.1; & n=readdata(x,y); & & &if(t&x[0]||t&x[n-1]) & & & & & & &return 0; & & &else
& { & & &bj0=(y[1]-y[0])/(x[1]-x[0]); & & & &bjn=(y[n-1]-y[n-2])/(x[n-1]-x[n-2]); & & &return spline(n,x, y, bj0, bjn ,t); & }}double myLagrange_line(double t){ & & &int N=16,n; & & &double *x=new double [N]; & & &double *y=new double [N]; & n=readdata(x,y); & & &if(t&x[0]||t&x[n-1]) & & & & & & &return 0; & & &else
& & &return lagrange_line(x, y,n,t);}double mylagrange(double t){ & & &int N=16,n; & & &double *x=new double [N]; & & &double *y=new double [N]; & & &n=readdata(x,y); & & &if(t&x[0]||t&x[n-1]) & & & & & & &return 0; & & &else
& & &return lagrange(x, y,n,t);} double fi0(double t){ & return 1;}double fi1(double t){ &}double fi2(double t){ & return t*t;}double myLS_1p(double t){ &int N=16,n; & double *x=new double [N]; & double *y=new double [N]; & n=readdata(x,y); & int p=2; & double (*pF[2])(double t);
pF[0]=fi0;//指向基函数 pF[1]=fi1;doubleG[2][2]={0},b[2]={0};doublea[2];inti,r,c;for(i=0;i&n;i++){ & & & &for(r=0;r&p;r++) & & & &{ & & &for(c=0;c&p;c++) & & & & & & & & & &G[r][c]+=pF[r](x[i])*pF[c](x[i]); & & & & & &b[r]+=pF[r](x[i])*y[i]; & & & &}} &LUp(G[0],a,b,p);doubles=0;for(i=0;i&p;i++){ & s+=a[i]*pF[i](t);}}double myLS_2p(double t){ & int N=16,n; & double *x=new double [N]; & double *y=new double [N]; & n=readdata(x,y); & int p=3; & double (*pF[3])(double x)={fi0,fi1,fi2}; doubleG[3][3]={0},b[3]={0};doublea[3];inti,r,c;for(i=0;i&n;i++){ & & & &for(r=0;r&p;r++) & & & &{ & & &for(c=0;c&p;c++) & & & & & & & & & &G[r][c]+=pF[r](x[i])*pF[c](x[i]); & & & & & &b[r]+=pF[r](x[i])*y[i]; & & & &}} LUp(G[0],a,b,p);doubles=0;for(i=0;i&p;i++){ & s+=a[i]*pF[i](t);}}double f0(double t){ & return 1;}double f1(double t){ & return cos(t);}double f2(double t){ & return sin(t);}double f3(double t){ & return cos(2*t);}double f4(double t){ & return sin(2*t);}double f5(double t){ & return cos(3*t);}double f6(double t){ & return sin(3*t);}double f7(double t){ & return cos(4*t);} double myLS_sincos(double t){ & int N=16,n; & double *x=new double [N]; & double *y=new double [N]; & n=readdata(x,y);
& int p=8; & double (*pF[8])(double x);
pF[0]=f0; pF[1]=f1; & &pF[2]=f2; & &pF[3]=f3; & & pF[4]=f4; & &pF[5]=f5; & & pF[6]=f6; & &pF[7]=f7;doubleG[8][8]={0},b[8]={0};doublea[8];inti,r,c;for(i=0;i&n;i++){ & & & &for(r=0;r&p;r++) & & & &{ & & &for(c=0;c&p;c++) & & & & & & & & & &G[r][c]+=pF[r](x[i])*pF[c](x[i]); & & & & & &b[r]+=pF[r](x[i])*y[i]; & & & &}}LUp(G[0],a,b,p);doubles=0;for(i=0;i&p;i++){ & s+=a[i]*pF[i](t);}}////fftCOMPLEX add(COMPLEX a,COMPLEX b){ & COMPLEX & &c.R=a.R+b.R; & & c.I=a.I+b.I; & & & &}COMPLEX sub(COMPLEX a,COMPLEX b){ & COMPLEX & &c.R=a.R-b.R; & & c.I=a.I-b.I;}COMPLEX mul(COMPLEX a,COMPLEX b){ & COMPLEX & &c.R=a.R*b.R-a.I*b.I; & &c.I=a.R*b.I+b.R*a.I;}int nx(int k,int p){ & int q,t=0;for(q=0;q&p;q++) &
& & & & & & & if((1&&q)&k) & & & & & & & & & & & & &t+=1&&(p-q-1);}void kj_FFT(COMPLEX *T,COMPLEX *F,int p){ & & &
&intN,q,k,r,j,i,t; COMPLEX *A1,*A2, *W; & N=1&&p; & A1=(COMPLEX *)malloc(sizeof(COMPLEX)*N); & A2=(COMPLEX *)malloc(sizeof(COMPLEX)*N); & &W=(COMPLEX *)malloc(sizeof(COMPLEX)*N/2); &for(i=0;i&N;i++) & & A1[i]=T[i]; &for(i=0;i&N/2;i++) & & & &{ &a=-i*2*PI/N; & & & & & & W[i].R=cos(a); &
& & & & & W[i].I=sin(a); & & & &} &for(q=0;q&p;q++) & {for(k=0;k&1&&q;k++) & & & & & { r=1&&(p-q-1); & & & & & & & & for(j=0;j&r;j++)
& & & & & & & & & & &{t=k*( 1&&(p-q) &); & & & & & & & & & & & &A2[j+t] =add(A1[j+t], mul(A1[j+t+r],W[ nx((j+t)&&(p-q-1),p)]) ); & & & & & & & & & & & &A2[j+t+r]=sub(A1[j+t], mul(A1[j+t+r],W[nx((j+t)&&(p-q-1),p)]) );
& & & & & & & & & & & } & & & & & } & & & &for(i=0;i&N;i++) & & & & & & & A1[i]=A2[i]; & } &for(i=0;i&N;i++) &{ & & F[i].R=A2[nx(i,p)].R/N;
& & &F[i].I=A2[nx(i,p)].I/N; & }}double myFFTsincos(double t){ & & &int N=16,n,p=4,j,k; & & &double *x=new double [N]; & & &double *y=new double [N]; & & &n=readdata(x,y); & COMPLEX *pT,*pF; & & &pT=(COMPLEX *)malloc(sizeof(COMPLEX)*n); & & &pF=(COMPLEX *)malloc(sizeof(COMPLEX)*n); & for(j=0;j&n;j++) & { &pT[j].R=y[j];
& & & & & pT[j].I=0.; & } & &kj_FFT(pT,pF,p); & & & & & & & for(k=0;k&=n/2;k++) & & & & & & & { & pF[k].R=pF[k].R*2; & & & & & & & & & & &pF[k].I=pF[k].I*2; & & & & & & & } & & &if(t&x[0]||t&x[n-1]) & & & & & & &return 0; & & &else
& & &{ & & &double s, & & & & & & & tt=2*PI*(t-x[0])/(x[n-1]-x[0]); & & & & & & & s=pF[0].R/2; & & & & & & & for(j=1;j&=n/2-1;j++) & & & & & & & {s+=pF[j].R*cos(j*tt)-pF[j].I*sin(j*tt); & & & & & & & } & & & & & & & & s=s+1/2*pF[n/2].R*cos(n/2*tt); & & & & & & & & }}int main(int argc, char* argv[]){ & & double xa=0,xb=3.75,ya=-0.2,yb=2; &drawfunction(xa,xb,ya,yb,mySpline,argv[0],0); & & &drawfunction(xa,xb,ya,yb,myLagrange_line,argv[0],50); &drawfunction(xa,xb,ya,yb,myLS_1p,argv[0],150); &drawfunction(xa,xb,ya,yb,myLS_2p,argv[0],200); &drawfunction(xa,xb,ya,yb,myLS_sincos,argv[0],250); &drawfunction(xa,xb,ya,yb,myFFTsincos,argv[0],0); & & &return 0;}
下图是两组数据的运行结果。
转载本文请联系原作者获取授权,同时请注明本文来自康建科学网博客。链接地址:
上一篇:下一篇:
当前推荐数:2
推荐到博客首页
评论 ( 个评论)
扫一扫,分享此博文
作者的精选博文
作者的其他最新博文
热门博文导读
Powered by
Copyright &用解析法设计程序_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
用解析法设计程序
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
还剩12页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
数值逼近实验题目及报告要求
下载积分:918
内容提示:数值逼近实验题目及报告要求
文档格式:DOC|
浏览次数:69|
上传日期: 13:44:58|
文档星级:
全文阅读已结束,如果下载本文需要使用
 918 积分
下载此文档
该用户还上传了这些文档
数值逼近实验题目及报告要求
关注微信公众号用解析法设计程序_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
用解析法设计程序
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
还剩18页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 根号3 的文章

 

随机推荐