泛函与变分初步(Euler-lagrange条件)

2023-12-02 12:08

本文主要是介绍泛函与变分初步(Euler-lagrange条件),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.前言

若偏微分方程复杂或边界条件不规则时,则方程难以求得解析解,不得不求满足近似程度要求的近似解。变分法是常用的近似方法之一,而且,变分法的原理和应用遍及物理学的各个领域。所谓变分法即为泛函的极值问题

2.泛函与泛函的极值

2.1 泛函的概念


最速落径问题,如图所示。A、B两点不在同一铅垂线,也不在同一高度。一质点在重力作用下无磨擦沿某曲线从A滑到B,求下滑的最短时间。或沿哪条曲线用时最短。
我们知道,质点下落速率与下落高度间的关系为:


所以

T称为y(x)的泛函。

y(x)可取的函数种类,称泛函的定义域,泛函是函数的函数(不指复合函数)。

一般地, C是函数的集合, B是实数(或复数)的集合,若对于C中的任一称元素y(x) ,在B中均有一元素J与之对应,则称J为y(x) 的泛函是函数。

记为:


与通常函数的定义不同,泛函的值决定于函数的取形。如上例中,T的变化决定于y(x)的变化,而非某一个自变量x的值进而某一个函数y的值。而是决定于函数集合C中的函数关系,即决定于函数的取形。
通常,泛函多以积分形式出现,如:

其中,F(x,y,y`)称为泛函的核。

2.2泛函的极值与变分

在泛函的概念下,最速落径问题归结为泛函T[y(x)]的极值问题,所谓变分法,就是求泛函的极值问题。研究泛函极值问题的方法归为两类:直接法与间接法。要讨论间接法,先讨论泛函的变分问题。
设有连续函数y(x),将其微小变形为y(x)+tn(x)。
其中t是一个小参数,tn(x)称为y(x)的变分,记为δy。
此时,函数y`(x)相应变形为:

导数的变分等于变分的导数,变分微分运算可交换次序
中F(x,y,y`)二阶可导,y``连续!如果函数y(x)存在变分δy时,泛函J的变化为:



相对于y、y’作Tayler展开,抵消t的0次项,保留t的1次项,略去t的高阶项。
可得:

上式称泛函 J [y(x)]第一次变分!!!简称变分,记为:

3.泛函极值的必要条件——欧拉方程

设泛函 J [y(x)]的极值问题有解,记为y = y(x);现在来推导此解y(x)满足的常微分方程。
设y=y(x)有变分δy=tn(x), 则

可视为t的函数。
表示为:

这样,就把原来的泛函的极值问题转变成这种普通函数的极值问题。 
令:

即:

代入上式,得:

即:

同乘t 得:

泛函取极值的必要条件是其变分为0,或者说,泛函J的极值函数y(x)必须是满足泛函的变分dJ=0的函数类。所以泛函的极值问题称为变分问题
又因为:

根据分部积分公式可以知道:

在简单变分问题中,端点是固定的:

所以可以得到:


这就是变分学中大名鼎鼎的“欧拉-朗格朗日条件”!!!
欧拉(Euler)方程是泛函有极值的必要条件。

4.经典最速落径问题求解

根据引言一节,最速路径问题用泛函描述为:

解:由于 欧拉方程变形为 :

提取公共部分,可得:

简化为:

代入原方程,得:


求出偏导数得:

通分,并取平方可得
取.y(1+y`*y`)=c1,得:

代入上式可得:

因此,我们就可以得到摆线得参数方程:

常数c1 、c2由A、B位置决定。

5.参考资料

1.钱伟长. 变分法及有限元[M]. 科学出版社, 1980.

2.郭大钧. 非线性泛函分析-第2版[M]. 山东科学技术出版社, 2001.


这篇关于泛函与变分初步(Euler-lagrange条件)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/445277

相关文章

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco

初步学习Android的感想

之前在学习java语言的时候就经常听说过Android这门语言,那时候感觉Android有些神秘感,再加上Android是用来开发移动设备的一门语言,所以一直对Android抱有一种兴奋的心情。 在我开始接触 Android之后,感觉超好玩,因为可以在自己的手机设备上开发一些我喜欢的小应用,再想想之前说学习Android应该会很难,但是如果你真的接触了,而且有JAVA的功底,我想学习Androi

使用条件变量实现线程同步:C++实战指南

使用条件变量实现线程同步:C++实战指南 在多线程编程中,线程同步是确保程序正确性和稳定性的关键。条件变量(condition variable)是一种强大的同步原语,用于在线程之间进行协调,避免数据竞争和死锁。本文将详细介绍如何在C++中使用条件变量实现线程同步,并提供完整的代码示例和详细的解释。 什么是条件变量? 条件变量是一种同步机制,允许线程在某个条件满足之前进入等待状态,并在条件满

一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)

1.没有分段的情况 原函数为一元二次凹函数(开口向下),如下: 因为要使得其存在正解,必须满足,那么。 上述函数的最优结果为:,。 对应的mathematica代码如下: Clear["Global`*"]f0[x_, a_, b_, c_, d_] := (a*x - b)*(d - c*x);(*(b c+a d)/(2 a c)*)Maximize[{f0[x, a, b,

初步了解VTK装配体

VTK还不太了解,根据资料, vtk.vtkAssembly 是 VTK库中的一个重要类,允许通过将多个vtkActor对象组合在一起来创建复杂的3D模型。 import vtkimport mathfrom vtk.util.colors import *filenames = ["cylinder.stl","sphere.stl","torus.stl"]dt = 1.0renW

notepad++ 正则表达式多条件查找替换

基础语法参考: https://www.cnblogs.com/winstonet/p/10635043.html https://www.linuxidc.com/Linux/2019-05/158701.htm   通常情况下我们查找的内容和要被替换掉的内容是一样的,我们只需要使用正则表达式精确框定查找内容,替换直接输入要替换的内容即可。 但有时会比较复杂,查找的内容,只需要替换其中

FPGA开发:条件语句 × 循环语句

条件语句 if_else语句 if_else语句,用来判断是否满足所给定的条件,根据判断的结果(真或假)决定执行给出的两种操作之一。 if(表达式)语句; 例如: if(a>b) out1=int1; if(表达式)         语句1; else         语句2; 例如: if(a>b)out1=int1;elseout1=int2; if(表达式1) 语句1; els

Kernel 中MakeFile 使用if条件编译

有时需要通过if  else来选择编译哪个驱动,单纯的obj-$(CONFIG_)就不是很方便,下面提供两种参考案例: 案例一: 来源:drivers/char/tpm/Makefileifdef CONFIG_ACPItpm-y += tpm_eventlog.o tpm_acpi.oelseifdef CONFIG_TCG_IBMVTPMtpm-y += tpm_eventlog.o

shell循环sleep while例子 条件判断

i=1# 小于5等于时候才执行while [ ${i} -le 5 ]doecho ${i}i=`expr ${i} + 1`# 休眠3秒sleep 3doneecho done 参考 http://c.biancheng.net/cpp/view/2736.html

(二)Vue.js 条件判断 20170818

条件判断 (一)v-if  使用 概念:v-if  其实说白了就是类似于java里面的判断语句,在vue.js中经常跟 template一起使用  1.jsp 代码 <template v-if="false"><label>符亮星</label><br/><label>职业爱好:编码制造方便</label></template> 设置为false时就会隐藏掉 结果图