偏微分方程数值解课程设计

合集下载

偏微分方程数值解电子教案

偏微分方程数值解电子教案

第一边界条件:u( 0 ,t) μ(t) 三类边值条件: 第二边界条件:ux ( 0 ,t) ν(t) 第三边界条件:u ( 0 ,t) hu( 0 ,t) θ(t) x 端点的运动规律 端点所受外力 (Tux ) 弹性体受外力 (以x 0为例,对x l也有) 若μ(t),ν(t),θ(t)为零,称为奇次边界条 件。 若ux ( 0 ,t) 0 称自由边界条件。
方程(1)在点( x0 , y0 )处是双曲型的, 如果在点( x0 , y0 ) 处 ( x0 , y0 ) 0,其中 b 2 4ac.二阶双曲型方程的 标准型是 2u 2u h( u , u , u, , ) 2 2
方程(1)在点( x0 , y0 )处是抛物型的, 如果在点( x0 , y0 ) 处 ( x0 , y0 ) 0,二阶抛物型方程的标 准型是 2u h( u , u , u, , ) 2
t 2μ
10
以线性二阶偏微分方程为例,简单回顾一 下偏微分方程的分类。考虑二阶偏微分方程 2u 2u 2u u u a 2 b c 2 d e fu g ( x , y ), (1) x xy y x y
注意
其中系数a , b, c , d , e和f设为x和y的函数,即方程(1)是线性的。 u u 如果系数 a , b和c是x , y, u, 和 的函数,称方程(1)是拟线性的 x y
u(0 , t ) 0 两端固定, u( l , t ) 0 边值条件(边界条件) 定解条件 u( x ,0 ) ( x ) 设t 0时的位置、速度为: 初值条件(初始条件) ut ( x ,0 ) ( x )
定解问题=泛定方程+定解条件 定解问题:边值问题,初值问题(Cauchy问题或无边界问题) , 混合问题。

微分方程数值解法C语言-课程设计

微分方程数值解法C语言-课程设计

微分方程数值解法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");}}。

偏微分方程数值解法

偏微分方程数值解法
b[i].y=(i/(N+1))*(1.0/N);
}
}
void boundnote(int bd[],struct xy b[])//找出边界点
{
int i,j=1;
for(i=1;i<NG+1;i++)
{
if(b[i].x==0||b[i].x==1.0||b[i].y==0||b[i].y==1.0)
#define TSTP 0.01 //时间步长
#define TN 100 //时间迭代步数
#define J 1.0/(N*N) //雅可比行列式的绝对值
double u0(double x,double y) //初值函数u0
{
double z;
z=100*x*y*(x-1)*(y-1);
return z;
}
}
void AIJ(double **aij,double aryk[],int **a) //计算单元刚度矩阵
{
int i;
for(i=1;i<LEE+1;i++)
{
aij[i][1]=1.0/(12*N*N)+TSTP+2*TSTP*1.0/(54*N*N)*(aryk[a[i][1]]+aryk[a[i][2]]+aryk[a[i][3]]);// 1 1
//主元太小
}
//交换第ik行和第k行的元素
if(ik!=k)
{
double t;
for(i=k;i<NG+1;i++)
{
t=E[ik][i];
E[ik][i]=E[k][i];

偏微分方程第三版课程设计

偏微分方程第三版课程设计

偏微分方程第三版课程设计一、设计背景偏微分方程是应用数学中的一个重要分支,其在物理、力学、化学、工程等领域中具有重要的应用价值。

本课程设计旨在通过对偏微分方程的学习,提高学生对数学和应用数学概念的理解和解决实际问题的能力。

二、设计目标本课程设计的目标是: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.椭圆型方程的差分方法:从一个简单例子谈起; 求解矩形域上 Poisson 方程
的五点差分方法的构造;二维情形离散极值原理和最大模估计;五点差分方 法的收敛性分析;求解五点差分方法的迭代方法和快速方法;矩形域上 Poisson 方程九点差分格式构造方法;Matlab 介绍。 (A5,B2,B3,C4)
2.发展方程有限差分法的基本概念和理论:发展方程差分方法的构造;差分格
式的抽象描述;差分格式研究的基本概念:相容性,截断误差,收敛性和稳 定性;稳定性判别的 Fourier 方法,Von-Neumann 条件;两层和多层差分 格式的稳定性分析; 差分格式稳定性的其它研究方法和差分格式构造的其它 方法。(A5,B2,B3)
偏微分方程数值解课程教学大纲
课程基本信息(Course Information) 课程代码 (Course Code) *课程名称 (Course Name) 课程性质 (Course Type) 授课对象 (Audience) 授课语言 (Language of Instruction) *开课院系 (School) 先修课程 (Prerequisite) 授课教师 (Instructor) MA3152 /MA309 *学时 (Credit Hours) 64 *学分 (Credits) 4
6.有限元离散方法: 一维问题的有限元方法;子结构方法编程;理论分析(误
差估计与有限元线性代数方程组性质); 二维问题有限元方法简介。(A5, B2,B3,C4)
elliptic problems in arbitrary domains. The numerical performance of the core algorithms mentioned will be exhibited in class to illustrate their intuitive effect and practicability. With the practice as a highlight of the course, the students must accomplish several project reports. 课程教学大纲(course syllabus)

偏微分方程数值解讲义教学设计

偏微分方程数值解讲义教学设计

偏微分方程数值解讲义教学设计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.总结偏微分方程数值解法是应用数学和工科专业中重要的课程之一。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告
课程:偏微分方程数值解学号:
姓名:
班级:
教师:
《偏微分方程数值解》
课程设计指导书
一.课程设计的目的
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);
七.设计结果与分析:
最终得到的两张图像如下:
八.设计体会与建议:
设计成绩:教师签名:
年月日。

相关文档
最新文档