精华内容
下载资源
问答
  • 应用Haper-Brown 假定,将原属于梯形肋片第三类边界条件的换热问题,转化为第二类边界条件的换热问题即绝热边界问题求解.根据Frobenius 方法对所求得的控制微分方程式进行解析解,并用四阶Runge-Kutta 方法结合Newton-...
  • 利有Laplace算子的特征函数法,研究一类广泛的非...该方程包含了从浅水波运动中提出的BBM方程及其多维推广以及一系列重要的数学物理方程作为特殊情况,证明了在第三类边界条件下,方程的初边值问题的解的有限时间爆破。
  • 实验二 类边界条件三次样条差值多项式实验二 类边界条件三次样条差值多项式实验二 类边界条件三次样条差值多项式实验二 类边界条件三次样条差值多项式
  • 类边界条件三次样条插值多项式,计算机数值方法实验,包含实验原理、目的内容、源程序代码、运行结果截图....
  • 自己写的实现次样条插值函数,采用的是类边界条件,即已知首尾的一节导数,获得样条插值,同时提供了梯度下降法寻找最优解的样例。
  • 数学物理方法课程类边界条件主体温度分布详细求解 并含有类边界条件下温度分布的matlab求解(本来应为一类的)
  • 研究具体的物理系统,需要考虑研究对象所处的特定的“环境”,而周围环境的影响体现在边界上的物理状况,即边界...第三类边界条件,规定了所研究的物理量及其外法向导数的线性组合在边界上的数值。(未完待续……)...

          研究具体的物理系统,需要考虑研究对象所处的特定的“环境”,而周围环境的影响体现在边界上的物理状况,即边界条件

          常见的线性边界条件,数学上分为三类:第一类边界条件,直接规定了所研究的物理量在边界上的数值;第二类边界条件,规定了所研究的物理量在边界外法线方向上导数的数值;第三类边界条件,规定了所研究的物理量及其外法向导数的线性组合在边界上的数值。

    (未完待续……)

    展开全文
  • 对于如下模型:采用如下离散格式:对于边界条件的处理:计算结果:1. 2. 选取几个面的切片图:

    对于如下模型:

    采用如下离散格式:


    对于边界条件的处理:


    计算结果:

    1. 


    2. 选取几个面的切片图:



    展开全文
  • 案例:已知如下数据,且端点约束条件为 和 ,求函数值 和 。 x -1.00 -0.54 0.13 1.12 1.89 2.06 2.54 2.82 3.50 -2.46 -5.26 -1.87 0.05 1.65 2.69 4.5...

    目录

    1.理论铺垫

    2.计算步骤

    3.MATLAB代码


    案例:已知如下数据,且端点约束条件为f^{'}(-1)=5f^{'}(3.50)=29.16,求函数值f(-0.02)

    展开全文
  • 实现次样条函数插值(边界条件或自然样条),可直接运行
  • 2010年十月写的旧代码。 类边界条件是给定边界温度。 二类是对流边界。 区域都是如下形状的: -------------------------------- | | | ---------------------- | | | |

    2010年十月写的旧代码。

    第一类边界条件是给定边界温度。

    第二类是对流边界。

    区域都是如下形状的:

    --------------------------------

    |                                        |

    |           ----------------------

    |          |     

    |         |

    |         |

    |         |

    --------


    用C++纯属蛋疼。


    第一类边界条件:

    /*
     * 等温边界
     */
    #include<iostream>
    #include<cmath>
    using namespace std;
    const double out_temp=30.0;//外边界温度
    const double in_temp=0.0;//内边界温度
    const double accuracy=0.00000001;//精度
    const double lambda=0.53;//导热系数
    
    const int width=15;//上部点阵宽度
    const int width_bottom=4;//下部点阵宽度
    const int height=4;//上部点阵高度
    const int height_bottom=7;//下部点阵高度
    /*
    //另一组参数
    const int width=16;
    const int width_bottom=6;
    const int height=6;
    const int height_bottom=6;
    */
    //总共点数
    const int num_of_points=width*height+width_bottom*height_bottom;
    //单个点
    class point
    {
    		public:
    				double temp;//温度
    				int up;//数组下标
    				int down;
    				int left;
    				int right;
    
    				point(){
    						temp=0.0;//初始化成0摄氏度
    						up=down=right=left=0;
    				}
    };
    
    ostream & operator<<(ostream & src_stream,const point & src){
    		src_stream<<"temp="<<src.temp;
    		src_stream<<" up="<<src.up<<" down="<<src.down;
    		src_stream<<" left="<<src.left<<" right="<<src.right;
    		return src_stream;
    }
    
    void print_grid(point * points){//输出网格各点的温度
    		cout<<endl;
    		for(int position=0;position>=0;position=points[position].down){
    				for(int tmp=position;tmp>=0;tmp=points[tmp].right){
    						cout.width(10);
    						cout<<points[tmp].temp;
    				}
    				cout<<endl<<endl<<endl<<endl;
    		}
    }
    
    double calc_direction(point * points,int direction,double &opposit_weight){
    		//计算给定方向邻点的温度和反方向的权重。
    		switch (direction) {
    				case -1:
    						return out_temp;
    						break;
    				case -2:
    						return in_temp;
    						break;
    				case -3:
    						opposit_weight*=2;
    						return 0.0;
    						break;
    				default:
    						return points[direction].temp;
    		}
    }
    
    void compu_point(point * points,int now){
    		//根据周围四个点算出指定点的温度
    		double left_temp;
    		double right_temp;
    		double up_temp;
    		double down_temp;
    		double up_wight=0.25;//上方权重,默认0.25
    		double down_wight=0.25;
    		double left_wight=0.25;
    		double right_wight=0.25;
    		left_temp=calc_direction(points,points[now].left,right_wight);
    		right_temp=calc_direction(points,points[now].right,left_wight);
    		up_temp=calc_direction(points,points[now].up,down_wight);
    		down_temp=calc_direction(points,points[now].down,up_wight);
    		points[now].temp=left_temp*left_wight+right_temp*right_wight+up_temp*up_wight+down_temp*down_wight;
    }
    
    void rec_walk(point * points){
    		// "左=>右"里嵌"上=>下"遍历计算
    		for(int position=0;position>=0;position=points[position].right)
    				for(int tmp=position;tmp>=0;tmp=points[tmp].down)
    						compu_point(points,tmp);
    }
    
    void heat_rate(point * points){
    		//计算导热量
    		double out_sum=0.0;
    		double in_sum=0.0;
    		//外边界
    		int pos=0;
    		double tmp=0.0;
    		for(;points[pos].right>=0;pos=points[pos].right){
    				tmp=out_temp - points[pos].temp ;
    				if(points[pos].right<=0)
    						out_sum += 0.5*tmp;
    				else
    						out_sum+=tmp;
    		}
    		for(pos=points[0].down;points[pos].down>=0;pos=points[pos].down){
    				tmp=out_temp - points[pos].temp ;
    				if(points[pos].down<=0)
    						out_sum += 0.5*tmp;
    				else
    						out_sum+=tmp;
    		}
    		//内边界
    		for(pos=num_of_points-1;points[pos].right<0;pos=points[pos].up){
    				tmp = points[pos].temp - in_temp ;
    				if(points[pos].down<=0)
    						in_sum += 0.5*tmp;
    				else
    						in_sum +=tmp;
    		}
    		for(pos=points[pos].right;points[pos].right>=0;pos=points[pos].right){
    				tmp = points[pos].temp - in_temp;
    				if(points[pos].right<=0)
    						in_sum += 0.5*tmp;
    				else
    						in_sum += tmp;
    		}
    		out_sum*=lambda;
    		in_sum*=lambda;
    		cout<<"外边界导热量="<<out_sum;
    		cout<<"\n内边界导热量="<<in_sum;
    		cout<<"\n误差="<<(in_sum-out_sum)/in_sum*100<<"%"<<endl;
    }
    
    void init_grid(point * points){
    		//初始化网格
    		int position=0;
    		//初始化最上面的边
    		for(int i=0;i<width;i++){
    				points[i].up=-1;//-1表示外边界,-2内边界,-3表示绝热
    				points[i].left=i-1;
    				points[i].right=i+1;
    				points[i].down=i+width;
    				position=i;
    		}
    		points[0].left=-1;//等温
    		points[width-1].right=-3;//绝热
    
    		//上面区域
    		for(int i=1;i<height;i++){
    				for(int j=0;j<width;j++){
    						points[i*width+j].up   =i*width+j-width;
    						points[i*width+j].left =i*width+j-1;
    						points[i*width+j].right=i*width+j+1;
    						points[i*width+j].down =i*width+j+width;
    						position=i*width+j;
    				}
    				points[i*width+0].left=-1;
    				points[i*width+width-1].right=-3;
    		}
    
    		position-=width;
    		position++;
    		for(int j=width_bottom;j<width;j++){
    				points[position+j].down =-2;//内边界
    		}
    		position+=width;
    
    		//下面区域
    		for(int i=0;i<height_bottom;i++){
    				for(int j=0;j<width_bottom;j++){
    						if(i)
    								points[position+i*width_bottom+j].up=position+i*width_bottom+j-width_bottom;
    						else
    								points[position+i*width_bottom+j].up=position+i*width_bottom+j-width;
    
    						points[position+i*width_bottom+j].left=position+i*width_bottom+j-1;
    						points[position+i*width_bottom+j].right=position+i*width_bottom+j+1;
    						points[position+i*width_bottom+j].down=position+i*width_bottom+j+width_bottom;
    				}
    				points[position+i*width_bottom+0].left=-1;
    				points[position+i*width_bottom+width_bottom-1].right=-2;
    		}
    
    		//下边界
    		position+=width_bottom*height_bottom;
    		position-=width_bottom;
    		for(int j=0;j<width_bottom;j++){
    				points[position+j].down=-3;
    		}
    		position+=width_bottom;
    }
    
    int main(){
    		point * points=new point[num_of_points];
    		init_grid(points);
    		//初始化完。输出看看。
    		//for(int i=0;i<num_of_points;i++)
    		//		cout<<i<<" => "<<points[i]<<'\n';
    		cout<<"初始温度分布(最外层和最内层没有显示):\n";
    		print_grid(points);
    		//开始迭代计算
    		double diff=out_temp;
    		int times=0;
    		for(;diff>out_temp*accuracy;times++){
    				//"上=>下" 里嵌 "左=>右"遍历计算
    				diff=0.0;
    				for(int now=0;now<num_of_points;now++){
    						double tmp=points[now].temp;
    						compu_point(points,now);
    						tmp=abs(tmp-points[now].temp);
    						diff = diff>tmp?diff:tmp;
    				}
    		}
    		cout<<"\n迭代计算"<<times<<"次得到的温度分布(最外层和最内层没有显示):\n";
    		print_grid(points);
    		heat_rate(points);
    		delete [] points;
    		return 0;
    }


    第二类边界条件:

    /*
     * 对流边界
     */
    #include<iostream>
    #include<cmath>
    using namespace std;
    const double out_temp=30.0;//外边界温度
    const double out_h=10.0;//外边界对流换热系数
    const double in_temp=10.0;//内边界温度
    const double in_h=4.0;//内边界对流换热系数
    const double accuracy=0.00000001;//精度
    const double lambda=0.53;//导热系数
    
    const int width=15;//上部点阵宽度
    const int width_bottom=4;//下部点阵宽度
    const int height=4;//上部点阵高度
    const int height_bottom=7;//下部点阵高度
    
    const double delta_x=3.0/(2*width+1);
    const double out_Bi=out_h*delta_x/lambda;//外表面网格Bi数
    const double in_Bi = in_h*delta_x/lambda;//内表面网格Bi数
    /*
    //另一组参数
    const int width=150;
    const int width_bottom=40;
    const int height=40;
    const int height_bottom=70;
    */
    //总共点数
    const int num_of_points=width*height+width_bottom*height_bottom;
    //单个点
    class point
    {
    		public:
    				double temp;//温度
    				int up;//数组下标
    				int down;
    				int left;
    				int right;
    
    				point(){
    						temp=0.0;//初始化成0摄氏度
    						up=down=right=left=0;
    				}
    };
    
    ostream & operator<<(ostream & src_stream,const point & src){
    		src_stream<<"temp="<<src.temp;
    		src_stream<<" up="<<src.up<<" down="<<src.down;
    		src_stream<<" left="<<src.left<<" right="<<src.right;
    		return src_stream;
    }
    
    void print_grid(point * points){//输出网格各点的温度
    		cout<<endl;
    		for(int position=0;position>=0;position=points[position].down){
    				for(int tmp=position;tmp>=0;tmp=points[tmp].right){
    						cout.width(10);
    						cout<<points[tmp].temp;
    				}
    				cout<<endl<<endl<<endl<<endl;
    		}
    }
    
    void dump_all(point * points){//便于调试
    		for(int i=0;i<num_of_points;i++)
    				cout<<i<<" => "<<points[i]<<'\n';
    }
    
    double calc_direction(point * points,int direction,double &opposit_weight,double &this_weight){
    		//计算给定方向邻点的温度和反方向的权重。
    		switch (direction) {
    				case -1://外边界
    						this_weight*=out_Bi;
    						return out_temp;
    						break;
    				case -2://内边界
    						this_weight*=in_Bi;
    						return in_temp;
    						break;
    				case -3://绝热
    						this_weight=0.0;
    						opposit_weight*=2;
    						return 0.0;
    						break;
    				default:
    						return points[direction].temp;
    		}
    }
    
    void compu_point(point * points,int now){
    		//根据周围四个点算出指定点的温度
    		double left_temp;
    		double right_temp;
    		double up_temp;
    		double down_temp;
    		double up_wight=1;//上方权重
    		double down_wight=1;
    		double left_wight=1;
    		double right_wight=1;
    		left_temp=calc_direction(points,points[now].left,right_wight,left_wight);
    		right_temp=calc_direction(points,points[now].right,left_wight,right_wight);
    		up_temp=calc_direction(points,points[now].up,down_wight,up_wight);
    		down_temp=calc_direction(points,points[now].down,up_wight,down_wight);
    		double Bi_sum=up_wight+down_wight+right_wight+left_wight;
    		points[now].temp=(left_temp*left_wight+right_temp*right_wight+up_temp*up_wight+down_temp*down_wight)/Bi_sum;
    }
    
    void rec_walk(point * points){
    		// "左=>右"里嵌"上=>下"遍历计算
    		for(int position=0;position>=0;position=points[position].right)
    				for(int tmp=position;tmp>=0;tmp=points[tmp].down)
    						compu_point(points,tmp);
    }
    
    void heat_rate(point * points){
    		//计算导热量
    		double out_sum=0.0;
    		double in_sum=0.0;
    		//外边界
    		int pos=0;
    		double tmp=0.0;
    		for(;points[pos].right>=0;pos=points[pos].right){
    				tmp=out_temp - points[pos].temp ;
    				if(points[pos].right<=0)
    						out_sum += 0.5*tmp;
    				else
    						out_sum+=tmp;
    		}
    		for(pos=points[0].down;points[pos].down>=0;pos=points[pos].down){
    				tmp=out_temp - points[pos].temp ;
    				if(points[pos].down<=0)
    						out_sum += 0.5*tmp;
    				else
    						out_sum+=tmp;
    		}
    		//内边界
    		for(pos=num_of_points-1;points[pos].right<0;pos=points[pos].up){
    				tmp = points[pos].temp - in_temp ;
    				if(points[pos].down<=0)
    						in_sum += 0.5*tmp;
    				else
    						in_sum +=tmp;
    		}
    		for(pos=points[pos].right;points[pos].right>=0;pos=points[pos].right){
    				tmp = points[pos].temp - in_temp;
    				if(points[pos].right<=0)
    						in_sum += 0.5*tmp;
    				else
    						in_sum += tmp;
    		}
    		out_sum*=out_h*delta_x;
    		in_sum *=in_h *delta_x;
    		cout<<"外边界导热量="<<out_sum;
    		cout<<"\n内边界导热量="<<in_sum;
    		cout<<"\n误差="<<(in_sum-out_sum)/in_sum*100<<"%"<<endl;
    }
    
    void init_grid(point * points){
    		//初始化网格
    		int position=0;
    		//初始化最上面的边
    		for(int i=0;i<width;i++){
    				points[i].up=-1;//-1表示外边界,-2内边界,-3表示绝热
    				points[i].left=i-1;
    				points[i].right=i+1;
    				points[i].down=i+width;
    				position=i;
    		}
    		points[0].left=-1;//对流
    		points[width-1].right=-3;//绝热
    
    		//上面区域
    		for(int i=1;i<height;i++){
    				for(int j=0;j<width;j++){
    						points[i*width+j].up   =i*width+j-width;
    						points[i*width+j].left =i*width+j-1;
    						points[i*width+j].right=i*width+j+1;
    						points[i*width+j].down =i*width+j+width;
    						position=i*width+j;
    				}
    				points[i*width+0].left=-1;
    				points[i*width+width-1].right=-3;
    		}
    
    		position-=width;
    		position++;
    		for(int j=width_bottom;j<width;j++){
    				points[position+j].down =-2;//内边界
    		}
    		position+=width;
    
    		//下面区域
    		for(int i=0;i<height_bottom;i++){
    				for(int j=0;j<width_bottom;j++){
    						if(i)
    								points[position+i*width_bottom+j].up=position+i*width_bottom+j-width_bottom;
    						else
    								points[position+i*width_bottom+j].up=position+i*width_bottom+j-width;
    
    						points[position+i*width_bottom+j].left=position+i*width_bottom+j-1;
    						points[position+i*width_bottom+j].right=position+i*width_bottom+j+1;
    						points[position+i*width_bottom+j].down=position+i*width_bottom+j+width_bottom;
    				}
    				points[position+i*width_bottom+0].left=-1;
    				points[position+i*width_bottom+width_bottom-1].right=-2;
    		}
    
    		//下边界
    		position+=width_bottom*height_bottom;
    		position-=width_bottom;
    		for(int j=0;j<width_bottom;j++){
    				points[position+j].down=-3;
    		}
    		position+=width_bottom;
    }
    
    int main(){
    		point * points=new point[num_of_points];
    		init_grid(points);
    		//dump_all(points);
    		cout<<"初始温度分布(最外层和最内层没有显示):\n";
    		print_grid(points);
    		//开始迭代计算
    		double diff=out_temp;
    		int times=0;
    		for(;diff>out_temp*accuracy;times++){
    				//"上=>下" 里嵌 "左=>右"遍历计算
    				diff=0.0;
    				for(int now=0;now<num_of_points;now++){
    						double tmp=points[now].temp;
    						compu_point(points,now);
    						tmp=abs(tmp-points[now].temp);
    						diff = diff>tmp?diff:tmp;
    				}
    		}
    		cout<<"\n迭代计算"<<times<<"次得到的温度分布(最外层和最内层没有显示):\n";
    		print_grid(points);
    		heat_rate(points);
    		delete [] points;
    		return 0;
    }



    再见,我想我可以离开了。

    展开全文
  • PAGE PAGE #/ 4 一边界条件源代码 function y=yt1(x0,y0,f_0,f_n,x) (1) %类边界条件次样条插值 %xi 所求点 %yi 所求点函数值 %x已知插值点 %y已知插值点函数值 %f_0 左端点一次导数值 %f_n 右端点一次导...
  • 在matlab中实现次样条插值,在周期边界条件下,以龙格函数为例。
  • 对格子Boltzmann方法求解含第三类边界条件的扩散方程进行了理论和数值研究,构造了一种新的基于bounce-back的边界处理数值格式,用来处理复杂边界问题。借助渐近分析,证明了新方法的数值相容性。用数值算例从不同角度...
  • 二、三类边界条件对无网格对称粒子法求解瞬态热传导问题的计算精度和稳定性有重要影响。提出一种有效的方法来处理这两类边界条件。该方法采用统一表达式描述两类边界条件,并将边界粒子分为光滑域内的边界粒子和非...
  • comsol的边界条件

    千次阅读 2019-06-22 20:06:22
    对有限元计算,无论是ansys,abaqus,msc还是comsol等,归结为一句话就是解微分方程。...对一般的微分方程,求其定解,必须引入条件,这个条件大概分两—初始条件和边界条件,如果方程要求未知量y(x)...
  • comsol有限元仿真分析法中的边界条件:什么是边界条件 ...对一般的微分方程,求其定解,必须引入条件,这个条件大概分两—初始条件和边界条件,如果方程要求未知量y(x)及其导数y′(x)在自变量的同一点x=x0取
  • numan边界条件

    千次阅读 2013-09-02 09:54:56
     在数学中,狄利克雷边界条件(Dirichlet boundary condition)也被称为常微分方程或偏微分方程的“类边界条件”,指定微分方程的解在边界处的值。求出这样的方程的解的问题被称为狄利克雷问题。  在常微分...
  • PDE中的边界条件

    千次阅读 2019-09-25 14:00:44
    边界条件:就是微分方程的解在边界满足的条件 简单总结: 狄利克雷边界条件:在边界该微分方程的解是一个常数,y=C/A 诺伊曼边界条件:给出了微分方程解的导函数的值,y’=C/B ...
  • 傅里叶定律(热传导定律) q= -λ ∂T/∂t 表示单位时间内通过单位面积的热量的大小,时温度...第三类边界条件:已知边界气流温度及对流换热系数 非稳态热传导方程:左边体现温度随时间变化,右边体现了物体内...
  • 插值条件 #次样条插值法 import matplotlib.pyplot as plt import numpy as np from sympy import * #插值条件函数 def one(x, y, a, b, n): h = np.zeros(n) u = np.zeros(n-1) ...
  • 基于不同边界条件(第一类、第二类、第三类)的 Green函数,均可推导出求解中子扩散方程的Green函数节块法为了完善Green函数节块法的形式,该文推导并实现了第一类边界条件的Green函数节块法分析表明:这3类Green函数节...
  • 本文通过适当的保形映射来改变求解域的边界条件,从而使变换域上的边界值问题易于求解或已知,从而可以得出拉普拉斯方程的第三类边界值。容易解决; 它的电位分布是已知的。 此外,使用MATLAB软件绘制了电场线和等...
  • 边界条件: 电磁场的分析计算通常归纳为求微分方程的解。对于偏微分方程使其解成为唯一的辅助条件可分为两种:一是表达场的边界所处的物理情况,称为边界条件,二是确定场的初始状态,...这称为类边界条件,当...
  • 在有限元仿真运算时,经常碰到的是对PDE方程的求解,...为了确定方程的解,就必须提供足够的初始条件和边界条件。 (1)初值条件 如果方程要求未知量y(x)及其导数y'(x)在自变量的同一点x=x0取给定的值,即y(x0)=y...
  •   根据上篇文章链接:  数值分析(二) 次样条插值法matlab程序 其中只提及到了自然边界条件情况下的matlab代码,本篇文章将来填补上篇文章的其他内容给出完整的次样条插值函数matlab代码。    注意:上篇...
  • 已更新完毕,本部分为原文八章和九章,初始设置问题以及边界条件定义两部分的翻译及讲解,边界条件定义部分,手册中写的很明白,但在不同的其他模型中使用并不完全相同,使用的时候不要教条。
  • 在有限元仿真运算时,经常碰到的是对PDE方程的求解...为了确定方程的解,就必须提供足够的初始条件和边界条件。 (1)初值条件如果方程要求未知量y(x)及其导数y'(x)在自变量的同一点x=x0取给定的值,即y(x0)=y0,y'...
  • 实现次样条插值,给定从Xo到Xn的点,再给定边界条件,运用数学方法求出该次样条函数。其中,边界条件有两种,一种:给定边界的一阶导数;二种:给定边界的二阶导数。 二:实验工具 MATLAB .实验思路 实验...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 109,376
精华内容 43,750
关键字:

第三类边界条件