偏微分方程数值解课程设计
- 格式:doc
- 大小:170.50 KB
- 文档页数:7
微分方程数值解法C语言-课程设计微分方程数值解法C语言由于对matlab语言不熟悉,所以还是采用C。
前面几个都比较简单,最后一个需要解非其次方程组。
采用高斯—Jordan消元法(数值分析)求逆解方程组,也再一次体会到算法本身的重要性,而不是语言。
当然,矩阵求逆的算法也在100个经典的C语言算法之列。
不过偏微分方程数值解的内容的确比较高深,我只能停留在编这种低级的东西的自娱自乐中。
不过解决计算机、数学、信计专业的课程设计还是足够了。
由于篇幅所限,只把源代码粘贴在这。
一:预报矫正格式#include <math.h>#include<iostream>#include<stdlib.h>double count_0( double xn,double yn){//矫正格式double s;s=yn+0.1*(yn/xn*0.5+xn*xn/yn*0.5);return s;}double count_1(double xn,double yn,double y0){//预报格式double s;s=yn+0.05*((yn/xn*0.5+xn*xn/yn*0.5)+(y0/xn*0.5+xn*xn/y0*0.5));return s;}void main(){//计算,步长为0.1,进行10次计算,设初始值double xn=1,yn=1;int i=1;while(i<=10){printf("%16f ,%1.16f ,%1.16f\n",xn,yn,count_1(xn,yn,count_0(xn,yn)));xn=xn+0.1;yn=count_1(xn,yn,count_0(xn,yn));i++;}}二显示差分格式#include<iostream>#include<math.h>#include<stdlib.h>main(){double a[6][11];//初始化;for(int i=0;i<=5;i++){a[0]=0;a[10]=0;}for(int j=1;j<10;j++){double p=3.14*j*0.1;a[0][j]=sin(p);}//按显示格式计算for(i=1;i<=5;i++)for(j=1;j<10;j++)a[j]=a[i-1][j-1]+a[i-1][j+1]; //输出计算好的矩阵for(i=0;i<=5;i++){for(j=0;j<11;j++)printf("%1.10f ",a[j]);printf("\n");}}三龙阁库塔格式#include <math.h>#include<iostream>#include<stdlib.h>double count_k( double xn,double yn){ double s;s=yn/xn*0.5+xn*xn/yn*0.5;return s;}void main(){//步长为0.1double xn=1,yn=1;int i=1;while(i<=11){printf("%f ,%f\n",xn,yn);double k1=count_k(xn,yn);double k2=count_k(xn+0.05,yn+0.05*k1); double k3=count_k(xn+0.05,yn+0.05*k2); double k4=count_k(xn+0.01,yn+0.1*k3); yn=yn+0.1/6*(k1+2*k2+2*k3+k4);xn=xn+0.1;i++;}}四 CRANK--NICOLSON隐式格式#include<iostream>#include<math.h>#include<stdlib.h>double Surplus(double A[],int m,int n);double * MatrixInver(double A[],int m,int n);double * MatrixOpp(double A[],int m,int n) /*矩阵求逆*/ {int i,j,x,y,k;double *SP=NULL,*AB=NULL,*B=NULL,X,*C;SP=(double *)malloc(m*n*sizeof(double));AB=(double *)malloc(m*n*sizeof(double));B=(double *)malloc(m*n*sizeof(double));X=Surplus(A,m,n);X=1/X;for(i=0;i<m;i++)for(j=0;j<n;j++){for(k=0;k<m*n;k++)B[k]=A[k];{for(x=0;x<n;x++)B[i*n+x]=0;for(y=0;y<m;y++)B[m*y+j]=0;B[i*n+j]=1;SP[i*n+j]=Surplus(B,m,n);AB[i*n+j]=X*SP[i*n+j];}}C=MatrixInver(AB,m,n);return C;}double * MatrixInver(double A[],int m,int n) /*矩阵转置*/ {int i,j;double *B=NULL;B=(double *)malloc(m*n*sizeof(double));for(i=0;i<n;i++)for(j=0;j<m;j++)B[i*m+j]=A[j*n+i];return B;}double Surplus(double A[],int m,int n) /*求矩阵行列式*/ {int i,j,k,p,r;double X,temp=1,temp1=1,s=0,s1=0;if(n==2){for(i=0;i<m;i++)for(j=0;j<n;j++)if((i+j)%2) temp1*=A[i*n+j]; else temp*=A[i*n+j];X=temp-temp1;}else{for(k=0;k<n;k++){for(i=0,j=k;i<m,j<n;i++,j++) temp*=A[i*n+j];if(m-i){for(p=m-i,r=m-1;p>0;p--,r--) temp*=A[r*n+p-1];}s+=temp;temp=1;}for(k=n-1;k>=0;k--){for(i=0,j=k;i<m,j>=0;i++,j--) temp1*=A[i*n+j];if(m-i){for(p=m-1,r=i;r<m;p--,r++) temp1*=A[r*n+p];}s1+=temp1;temp1=1;}X=s-s1;}return X;}void initmat_A(double a[][9],double r){ for(int i=0;i<9;i++)for(int j=0;j<9;j++)a[j]=0;for(i=0;i<9;i++){a=1+r;if(i!=8) a[i+1]=-0.5*r;if(i!=0) a[i-1]=-0.5*r;}}void initmat_B(double b[][9],double r){ for(int i=0;i<9;i++)for(int j=0;j<9;j++)b[j]=0;for( i=0;i<9;i++){b=1-r;if(i!=8) b[i+1]=0.5*r;if(i!=0) b[i-1]=0.5*r;}}void initmat_C(double C[][9]){ for(int i=0;i<9;i++)for(int j=0;j<9;j++)C[j]=0;}void main(){double a[100][11];for(int i=0;i<100;i++)for(int j=0;j<11;j++)a[j]=0;//初始化;for(i=0;i<100;i++){a[0]=0;a[10]=0;}for(int j=1;j<10;j++){double p=4*3.14*j*0.1;a[0][j]=sin(p);}//取h=0.1*3.14,r=0.0005,t=0.0001*3.14*3.14; //得到矩阵a和矩阵bdouble A[9][9];initmat_A(A,0.005);double B[9][9];initmat_B(B,0.005);//B矩阵与Un相乘,en是0;double C[9][9];initmat_C(C);double *A_;A_=MatrixOpp(A[0],9,9);//A矩阵求逆;//A逆*Bfor(i=0;i<9;i++)for(j=0;j<9;j++)for(int s=0;s<9;s++)C[j]+=A_[i*9+s]*B[s][j];//填写a表格for(i=0;i<100;i++){for(j=1;j<10;j++)for(int s=0;s<9;s++)a[i+1][j]+=a[s+1]*C[j-1][s];}//输出表格for(i=0;i<100;i++){for(j=0;j<11;j++)printf("%1.8f ",a[j]);printf("\n");}printf("\n"); printf("\n");//利用精确解,求出表格for(i=0;i<100;i++){for(j=0;j<11;j++)printf("%1.8f",exp(-16*0.0001*0.0005*3.14*3.14*i)*sin(4*j*0.1*3.14));printf("\n");}}。
偏微分方程第三版课程设计一、设计背景偏微分方程是应用数学中的一个重要分支,其在物理、力学、化学、工程等领域中具有重要的应用价值。
本课程设计旨在通过对偏微分方程的学习,提高学生对数学和应用数学概念的理解和解决实际问题的能力。
二、设计目标本课程设计的目标是:1.掌握偏微分方程的基本概念和解法;2.熟悉偏微分方程在各个领域中的应用;3.培养学生对数学运算和求解复杂问题的能力;4.提高学生的实践动手能力和团队协作能力。
三、设计内容1. 前置知识微积分、线性代数、常微分方程等基础数学知识。
2. 课程教学安排本课程设计分为以下几个模块:模块一:偏微分方程基本概念介绍偏微分方程的基本概念,包括一阶和二阶偏导数的定义,常见的偏微分方程类型及其求解方法等。
模块二:偏微分方程的分类和特殊方法介绍偏微分方程的分类及常见的特殊求解方法,包括分离变量法、变量代换法、特征线法等。
模块三:常见的偏微分方程问题讲解偏微分方程在物理、生物、化学、地理等领域中的应用。
以具体问题为例,讲解问题的数学建模、求解方法和结果分析。
模块四:偏微分方程数值解法介绍偏微分方程数值求解的基本原理。
探讨常用的数值方法,包括有限差分法、有限元法等。
模块五:课程项目分为小组进行实践性课程项目设计,涉及偏微分方程的建模、求解等具体内容,体现课程理论与实践的结合。
3. 教学方法本课程设计采用多种教学方法相结合,如理论讲解、实践探究、课堂演示和自主学习等。
4. 课程评估本课程设计的所有模块均包含课堂测试、实验报告、课程项目等评估方式,最终成绩由平时得分、课堂表现得分和期末综合成绩得分三部分组成。
四、总结通过本次课程设计,可以帮助学生掌握偏微分方程的基本概念和解法,提高其应用数学和解决实际问题的能力,培养其实践动手和团队协作能力,为学生的综合素养提高和进一步学习和研究搭建良好的基础。
偏微分方程课程设计1. 研究背景和目的偏微分方程是数学中的一个重要领域,和物理、工程、生物等学科密切相关。
随着科学技术的不断发展和应用需求的增加,对偏微分方程研究的需求日益增长。
本次课程设计的目的在于,让学生了解偏微分方程的基本理论和应用方法,掌握数值解偏微分方程的基本算法,能够独立完成简单的数值计算和编程实现,为将来从事科学研究和工程实践打下基础。
2. 设计内容2.1 课程要求本次课程设计以数值解偏微分方程为主题,其中包括以下内容的学习和掌握:•常用的偏微分方程及其求解方法;•常见的数值算法,包括差分法、有限元法、有限差分法等;•常用的数值计算工具和编程语言;•实际应用案例的解析和模拟。
2.2 设计步骤本次课程设计将分以下步骤进行:第一步:了解偏微分方程及其应用介绍偏微分方程的基本概念和应用领域,讲解常见偏微分方程的分类以及各自的数值求解方法。
第二步:掌握数值算法详细讲解差分法、有限元法、有限差分法等常用数值算法原理,分析其优缺点和适用条件。
第三步:熟悉数值计算工具和编程语言介绍常用的数值计算工具和编程语言,如Matlab、Python等,讲解其基本语法和使用方法,以及与数值算法的结合使用。
第四步:应用案例的解析和模拟通过一些实际应用案例,如热传导方程、波动方程、扩散方程等,对学生进行实例分析和模拟。
让学生了解在实际问题中如何应用偏微分方程和数值算法进行求解。
2.3 计算机编程实现本次课程设计将涉及到计算机编程,学生需要使用一些编程工具和语言实现偏微分方程的数值计算。
常用的编程语言包括Python、C++、Java等。
在编程实现过程中,可以涉及到常用的科学计算库和数据可视化库,如Numpy、Scipy、Matplotlib等。
3. 总结和展望本次课程设计主要是让学生了解偏微分方程的基本理论和应用方法,掌握数值解偏微分方程的基本算法,能够独立完成简单的数值计算和编程实现。
希望通过本次课程设计,能够为学生将来的科学研究和工程实践提供有力的支撑和帮助。
偏微分方程数值解讲义教学设计1. 课程简介本课程是针对大学数学及计算机专业的高年级本科生或研究生开设的,旨在介绍偏微分方程数值解方法,包括有限差分法、有限元法和谱方法等。
本课程的学习目标是掌握偏微分方程数值解的基础理论和常用方法,以及了解数值解的数学原理和应用场景,并能够扩展应用所学知识解决相关实际问题。
2. 教学内容2.1 引言•偏微分方程的概念、分类和基本理论;•数值解的概念和分类,数值解的误差理论。
2.2 有限差分法•一维抛物方程、波动方程、椭圆方程的有限差分格式;•非线性偏微分方程的数值求解;•高维问题的数值求解。
2.3 有限元法•一维线性抛物方程、波动方程、椭圆方程的有限元求解方法;•二维和三维问题的有限元求解方法;•有限元法的加权残差方法和变分原理。
2.4 谱方法•调和方程的分离变量方法和Fourier级数解法;•Laplace方程的Fourier级数解法和离散正交函数解法;•泊松方程的Fourier级数解法和离散正交函数解法。
3. 教学手段3.1 讲课本课程采用讲课和练习相结合的方式,通过讲解理论知识和数值计算实例,并基于MATLAB或Python等数值计算软件进行演示。
3.2 练习结合课程中的实例,进行数值计算作业和课程项目的设计,以提高学生的理论知识和计算能力。
4. 教材教材推荐:•Numerical Solution of Partial Differential Equations: Finite Difference Methods by G. D. Smith •Finite Element Method: A Practical Course by C. S.Chen5. 教学评估学生的教学成绩考核由以下三部分组成:•期中考试(占成绩的30%);•期末考试(占成绩的50%);•课程设计作业(占成绩的20%)。
6. 教学进度内容讲课时间引言2课时有限差分法(一)6课时有限差分法(二)6课时有限差分法(三)4课时有限元法(一)6课时有限元法(二)6课时有限元法(三)4课时谱方法6课时课程设计作业4课时或更多7. 总结本文介绍了一个偏微分方程数值解讲义的教学设计,包括课程简介、教学内容、教学手段、教材、教学评估和教学进度等方面的内容。
偏微分方程数值解法第二版教学设计课程介绍偏微分方程数值解法是应用数学中一门重要的课程,主要介绍偏微分方程的基本理论和数值解法。
本课程是第二版,主要更新了课程内容和案例实现,使学生更好地掌握偏微分方程的数值解法。
本课程适用于应用数学和工科相关专业的本科生。
教学目标1.掌握偏微分方程基本理论;2.熟练掌握偏微分方程的数值解法;3.能够应用偏微分方程数值解法解决实际问题;4.增强数学建模思维和实验能力。
教学内容本课程主要包括以下内容:偏微分方程基本理论•一维波动方程的数值解法•热传导方程的数值解法•Laplace方程的数值解法•解法的稳定性和收敛性分析偏微分方程数值解法•有限差分法•有限元法•边界元法•数值方法的误差分析应用案例实现•物理学问题数值解法•工程问题数值解法•生物学和环境学问题数值解法教学方法本课程采用翻转课堂的教学方法,即先让学生通过在线学习平台学习相应的理论基础和数值方法,然后通过课堂讨论、小组合作和案例实现活动来加深理解。
评价方式评分组成为平时成绩和期末成绩。
平时成绩包括在线学习平台作业和课堂表现等,占比30%;期末成绩包括期末论文和考试,占比70%。
参考教材1.Numerical Solution of Partial Differential Equations by theFinite Element Method, Claes Johnson, Dover Publications, 2009.2.Numerical Methods for PDEs: Finite Difference and FiniteVolume Methods, Sandip Mazumder, Springer, 2016.3.A First Course in Finite Elements, Jacob Fish, TedBelytschko, John Wiley & Sons, 2007.总结偏微分方程数值解法是应用数学和工科专业中重要的课程之一。
《偏微分方程数值解》课程教学大纲Numerical Solution of Partial Differential Equation课程代码: 课程性质:专业基础理论课/选修适用专业:信息计算开课学期:7总学时数:48总学分数:3编写年月:2003年3月修订年月:2007年7月执笔:王琦一、课程的性质和目的《偏微分方程数值解法》是计算数学专业的一门重要专业基础课。
它不仅对学生今后从事科研具有居高临下的指导作用,而且对于学习其它后继课程和解决一些实际问题都是一门重要的工具,同时对于训练思维能力起着很大作用。
本大纲是根据教育改革发展和面向二十一世纪高等数学专业课程设置和教学内容改革的要求,针对培养目标的需要进行设计的。
二、课程教学内容及学时分配第一章常微分方程初值问题10学时第二章变分原理8学时第三章椭圆型方程----有限差分法和有限元法10学时第四章离散方程的解法8学时第五章抛物型方程和双曲型方程12学时第一章常微分方程初值问题1.1 引论1.2 Euler方法和线形多步方法1.3 稳定性,收敛性和误差估计1.4 预估—校正算法1.5 Runge—Kutta方法第二章常微分方程初值问题2.1 二次函数的极值2.2 二阶椭圆边值问题2.3 Ritz方法第三章椭圆型方程----有限差分法和有限元法3.1 差分逼近的基本概念3.2 一维差分格式,矩形网和三角网差分格式3.3 极值定理3.4 解一维问题的线形元及误差估计3.5 解二维问题的矩形元和三角形元3.6 有限元方程3.7 收敛阶的估计第四章离散方程的解法4.1 离散方程的基本特征4.2 追赶法与迭代法4.3 超松弛法4.4 共轭斜量法第五章抛物型方程和双曲型方程5.1 稳定性与收敛性5.2 分离变量法5.3 差分格式的应用5.4 交替方向隐格式5.5 线形双曲型方程的差分逼近5.6 拟线形双曲型方程组5.7 基本定解问题和特征线法5.8 特征差分格式四、本课程与其它课程的联系与分工先修课程:数学分析,高等代数,常微分方程。
课程设计报告
课程:偏微分方程数值解学号:
姓名:
班级:
教师:
《偏微分方程数值解》
课程设计指导书
一.课程设计的目的
1.帮助掌握偏微分方程数值解相关知识。
2.理解偏微分方程数值解差分隐格式解决自由振动方程问题的方法。
3.锻炼编写程序代码的能力。
二.设计名称
差分法求自由振动问题的周期解。
三.设计要求
1.要求写出差分隐格式的理论方法。
2.要求编写matlab 程序,画出函数图形。
3.要求写出实验总结及心得体会。
四.设计题目
用差分法求自由振动问题的周期解:
2222000,,0|0,|sin (0,)(2,)t t u u
x t t x u u x t u t u t π==⎧∂∂-=-∞<<∞>⎪∂∂⎪
∂⎪==⎨∂⎪
=⎪⎪⎩
要求用差分隐格式求解,其中14
θ=。
五.设计细则 1.区域剖分:
构造上式的差分逼近,取空间步长h 和时间步长τ,用两族平行直线
⎩⎨
⎧===±±===Λ
Λ,2,1,0,,
,2,1,0,n n t t j jh x x n j τ 作矩形网格。
2.离散格式:
显格式:
于网点),(n j t x 用Taylor 展式,并整理方程得:
⎪⎪⎩
⎪⎪
⎨⎧--++=+-++==-+-++-121121102
10102100
)1(2)(),()()1()]()([2),(n j n j n j n j n j j j j j j j j u u r u u r u x x r x x r u x u τϕϕϕϕϕ
隐格式:
上述显格式并不是绝对稳定的差分格式,为了得到绝对稳定的差分格式,用第1-n 层、
n 层、1+n 层的中心差商的权平均去逼近xx u ,得到下列差分格式:
⎪⎪⎪⎩
⎪⎪
⎪⎨⎧+-++--++-=+-+-++==----+-++-+++-++-]22)21(2[2),
()()1()]()([2),(2
111112112111112
211102
10102100h u u u h u u u h u u u a u u u x x r x x r u x u n j n j n j n j n j n j n j n j n j n j n j n j j j j j j j j θθθττϕϕϕϕϕ其中10≤≤θ是参数。
当0=θ时就是显格式,而当4
1
=θ时可以证明该格式绝对稳定。
隐格式的矩阵形式是:
⎥⎥⎥
⎥⎥⎥⎥⎥⎥⎦⎤
⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣
⎡-+-+-+-+--+-+-+++122111121121
12222
222
2222221212121J J j n J n J n j n n z z z z z u u u u u r r r r r r r r r r r r M M M M M M M θθθθ
θθθθθ
θ
θθ
其中:
1
111111122]2()2)(21[(-----+-+-++-++--=n j n j n j n j n j n j n j n j j u u u u u u u u r z θθ
3.格式稳定性: 1)显格式: 显格式稳定的充分必要条件是:网格比1<r 。
2)隐格式:
当4
1
=
θ时隐格式绝对稳定。
4.数值例子:
可以证明 )
(),(t x e
t x u +=是波动方程222
2u u
t x
∂∂=∂∂ 的一个解析解。
那么,为了更精确的得到误差估计,在这里选取)
(),(t x e t x u +=作数值实验。
取0201x t π
≤≤≤≤,并且将时间步长10等分,空间步长100等分(即
1/10,2/100h τπ==)。
这样网格比/15
r ah π
τ==<,从稳定性分析可知,此时格式稳
定。
六.程序代码: 1.主函数:
T=1;%取时间长度为1 b=0.5;
h=2*pi/100; tao=1/10;
f=inline('0','x','t');%f=0 fx1=inline('0');
fx2=inline('sin(x)');
ft1=inline('sin(t)');%此题中取ft1=ft2=sin(t)=sin(2*pi+t) ft2=inline('sin(2*pi+t)');
[X,Y,U,Z]=chfenmethed(f,fx1,fx2,ft1,ft2,T,h,tao); mesh(X,Y,U);%绘制函数图像 shading flat;
xlabel('X','FontSize',14); ylabel('t','FontSize',14); zlabel('U','FontSize',14); title('函数'); figure;
mesh(X,Y,Z);%绘制误差图像 xlabel('X','FontSize',14); ylabel('t','FontSize',14); zlabel('Z','FontSize',14); title('误差');
2.编写差分隐格式函数:
function [X,T,U,Z]=chfenmethed(f,fx1,fx2,ft1,ft2,T,h,tao) %u_tt-u_xx=f(x,t) 0<x<2*pi,0<t<T
%u(0,t)=ft1,u(2*pi,t)=ft2,此题中ft1=ft2 %u(x,0)=fx1(x),此题中fx1=0
%u_t(x,0)=fx2(x),此题中fx2=sin(x) x=0:h:2*pi; t=0:tao:T; m=length(x); n=length(t); s=tao/h;
[X,T]=meshgrid(x,t); Z=zeros(n,m); U=zeros(n,m);
for i=2:m-1
U(1,i)=feval(fx1,x(i));
U(2,i)=U(1,i)+tao*feval(fx2,x(i))+tao^2/2*(1/h^2* ...
(feval(fx1,x(i+1))-2*feval(fx1,x(i))+feval(fx1,x(i-1))+feval(f,x(i),0))); Z(2,i)=abs(U(2,i)-f0(x(i),t(2)));
end
for j=1:n
U(j,1)=feval(ft1,t(j));
U(j,m)=feval(ft2,t(j));
end
A=-0.5*s^2*ones(1,m-2);
C=A;
B=(1+s^2)*ones(1,m-2);
UU=zeros(1,m-2);
f1=UU;
for i=3:n
for j=2:m-1
UU(j-1)=f0(x(j),t(i));
f1(j-1)=0.5*s^2*U(i-2,j-1)-(1+s^2)*U(i-2,j)...
+0.5*s^2*U(i-2,j+1)+2*U(i-1,j)...
+tao^2*feval(f,x(j),t(i-1));
end
f1(1)=f1(1)+0.5*s^2*U(i,1);
f1(end)=f1(end)+0.5*s^2*U(i,m);
U(i,2:m-1)=zgf(A,B,C,f1);
Z(i,2:m-1)=abs(U(i,2:m-1)-UU);
end
3.编写迭代函数,用以实现差分隐格式:
function x=zgf(A,B,C,f)
n=length(B);
B1=zeros(1,n-1);
Y=zeros(1,n);
x1=zeros(1,n);
B1(1)=C(1)/B(1);
for i=2:n-1
B1(i)=C(i)/(B(i)-A(i)*B1(i-1));
end
Y(1)=f(1)/B(1);
for i=2:n
Y(i)=(f(i)-A(i)*Y(i-1))/(B(i)-A(i)*B1(i-1));
end
x1(n)=Y(n);
for i=n-1:-1:1
x1(i)=Y(i)-B1(i)*x1(i+1); end
x=x1;
4.编写精确函数用以求误差:
function z=f0(x,t)%精确解函数
z=exp(x+t);
七.设计结果与分析:
最终得到的两张图像如下:
八.设计体会与建议:
设计成绩:教师签名:
年月日。