数值计算课程设计

上传人:lizhe****0001 文档编号:31283495 上传时间:2018-02-06 格式:DOC 页数:33 大小:1.12MB
返回 下载 相关 举报
数值计算课程设计_第1页
第1页 / 共33页
数值计算课程设计_第2页
第2页 / 共33页
数值计算课程设计_第3页
第3页 / 共33页
数值计算课程设计_第4页
第4页 / 共33页
数值计算课程设计_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《数值计算课程设计》由会员分享,可在线阅读,更多相关《数值计算课程设计(33页珍藏版)》请在金锄头文库上搜索。

1、数值计算课程设计11 经典四阶龙格库塔法解一阶微分方程组1.1 算法说明:4 阶龙格-库塔方法(RK4)可模拟 N=4 的泰勒方法的精度。这种算法可以描述为,自初始点 开始,利用0(,)ty12341()6khffy生成的近似序列,其中 1213243(,)(,)kkkkfthyffthf1.2 用龙格库塔法求解求解微分方程满足初值条件:yxy23406yx1.3 算法流程图:图 1-1 四阶龙格库塔法解一阶微分方程组经典四阶龙格库塔法解一阶微分方程组21.4 程序调试:组建调试,确保程序可运行时输入初值,区间,步长。1.5 程序运行运行界面及运行结果:图 1-2 四阶龙格库塔法解一阶微分方程

2、组1.6 源程序代码:#include#includeusing namespace std;#define N 10float ff(float t,float xx,float yy) xx=xx+2*yy;return xx;float gg(float t,float xx,float yy) yy=3*xx+2*yy;return yy;void rks4(float xxN,float yyN,float ttN,double a,double b) float h,p1,p2,p3,p4,q1,q2,q3,q4;xx0=6;yy0=4;int i,p;h=(b-a)/N;for(

3、p=0;p#include#includeusing namespace std;int FindMax(int p,int N,double *A)int i=0,j=0;double max=0.0;for(i=p;imax)j=i;max=fabs(Ai*(N+1)+p);return j;void ExchangeRow(int p,int j,double *A,int N)int i=0;double C=0.0;for(i=0;i=0;k-)temp=0.0;for(i=k+1;iN;A=(double*)calloc(N*(N+1),sizeof(double);coutAi;

4、system(cls);cout#include#include#define N 2#define eps 2.2204e-16using namespace std;double* MatrixMultiply(double* J,double Y);double*Inv(double*J); double norm(double Q);double* F(double X);double* JF(double X);int method(double* Y,double epsilon);int newdim(double P,double delta,double epsilon,in

5、t max1,double *err)double *Y=NULL,*J=NULL,Q2=0,*Z=NULL,*temp=NULL;double relerr=0.0;int k=0,i=0,iter=0;Y=F(P);for(k=1;kmax)数值计算课程设计13max=Qi;return max;double* F(double X) double x=X0;double y=X1;double *Z=NULL;Z=(double*)malloc(2*sizeof(double);Z0=x*x-2*x-y+0.5;Z1=x*x+4*y*y-4;return Z;double* JF(dou

6、ble X) double x=X0;double y=X1;double *W=NULL;W=(double*)malloc(4*sizeof(double);W0=2*x-2;W1=-1; W2=2*x;W3=8*y;return W;int main()double P2=0;double delta=0.0,epsilon=0.0,err=0.0; int max1=0,iter=0,i=0;coutPi;coutdeltaepsilonmax1;iter=newdim(P,delta,epsilon,max1,cout#includeusing namespace std;doubl

7、e f(double x)return x*x;int main()int M=1,n=0,p=0,K=0,i=0,j=0,J=0;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;double R3030=0;a=0;b=1;h=b-a;n=4;tol=0.000001;couttol)&(J#include#define MAX 4using namespace std;double *diff(double X,int n)int i=0;double *H=NULL;H=(double*)malloc(n-1)*

8、sizeof(double);for(i=1;i=1;k-)Mk=(Uk-1-Ck-1*Mk+1)/Bk-1;M0=3*(D0-dx0)/H0-M0/2;MN=3*(dxn-DN-1)/HN-1-MN-1/2;for(k=0;k#include#define MAX 20using namespace std;void inv(double XMAXMAX,int n,double EMAXMAX)int i=0,j=0,k=0;double temp=0.0;for(i=0;in;coutXi;coutYi;coutM;for(i=0;i=0;i-)cout=0;i-)if(i=0)cout

9、#include using namespace std;int main()double feval(double x);int k=1;double a,b,c,delta=0.00001,y1,y2,y3;数值计算课程设计27coutab;y1=feval(a);y2=feval(b);while(b-adelta|k0)a=c;y1=y3;elseb=c;y2=y3;k+;c=(a+b)/2;y3=feval(c);cout#include #define PI 3.14156float cosx(float x);float fun_cos(float x, int m);int m

10、ain()float x = PI/2;printf(cos(%f)=%ft 使用系统函数 cos 计算n,x,cos(x);/使用系统函数 cos 计算printf(cos(%f)=%ft 使用泰勒公式计算n,x,cosx(x);/使用泰勒公式计算return 0;float fun_cos(float x, int m)float ret_val;int i;if (m%2 = 0)数值计算课程设计29ret_val = 1.0;elseret_val = -1.0;for (i=1;i 2*Pi | x 0.00005 | temp_ret#includefloat f(float x)

11、float Y;Y=x*x*x+5*x*x+16*x-60;return(Y);float df(float x)float y;y=3*x*x+10*x+16;return(y);void main()int i,n=50;float p0,p1,Y,y,err=0.001,relerr=0.001,delta=0.001;printf(input the initial approximation to a zero of f:n);scanf(%f,for(i=0;i#includeusing namespace std;double feval(double n);/函数声明int m

12、ain()double P10,p0=1.9,eps,err,p,reller,tol=0.001;/赋初值 p0int k,max=10;P0=p0;for(k=1;kmax;k+)/开始迭代循环Pk=feval(Pk-1);/feval 函数功能:计算 Pk-1的函数值/函数为 g(x)=-4+4*x-0.5*x*xerr=abs(Pk-Pk-1);数值计算课程设计33reller=err/(abs(Pk)+eps);/误差与相对误差的计算p=Pk;if(errtol|rellertol) break;if(k=max)coutnofeasinalendl;/未找到根的情况elsecout

13、p=pendl;return 0;double feval(double n)double m;m=-4+4*n-0.5*n*n;return m;设计体会及今后的改进意见3411 计体会及今后的改进意见数值计算课程设计是数值计算课程的实践部分,是对所学的数值计算基本理论知识的应用,也对我们所学知识加深理解有很大帮助。根据对各种算法知识的理解,以及自己动手编程实现算法,使我对数值计算产生了更加浓厚的兴趣。本次设计将每个算法翻译为 C+语言程序,不但加强了我们对每个算法的理解,同时也加强了我们 C+语言的编程能力。并不是每一个程序都能解决一类问题,我的程序有一些只能解决一个问题,但是经过简单的修

14、改后就可以解决其他问题,关键是这次课程设计时间紧凑,没有办法做到尽善尽美,也只能简单解决一些基本问题。相信在我以后的编程实践中会逐渐熟练,并且我的调试程序的能力会更加娴熟。另外,程序编写完后的调试阶段是最困难的。因为,我的每一个程序编写完成后都会有很多问题,有一些是比较简单的语法问题,有一些是程序的逻辑问题。编写程序时我的大脑不够清晰,其实并不是算法有多么难,而是编写程序之前我没有认真的写出一个流程图,对问题理解不够清晰,导致程序调试时会有一些困难。但是,经过这次课程设计我相信我的程序设计能力又一次进步了很多。这次的课程设计,对我们数值方法的学习是一次检验,在回顾各种算法的同时,也将程序中每个语句的分析、理论知识和实践结合了起来,让我受益匪浅。数值计算课程设计35参 考 文 献【1】 美 John H.Mathews .数值方法(MATLAB 版)M(第四版).北京:电子工业出版 社.2010.4 【2】 谭浩强.C+程序设计M.北京:清华大学出版社.2004.6

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号