fealpy icon indicating copy to clipboard operation
fealpy copied to clipboard

插值函数

Open Smile-In-Heart opened this issue 3 years ago • 19 comments

魏老师,通过有限元数值解插值全域函数,只要给出一个点的位置,就可以知道插值全域函数值,您开发的包里面的这个封装函数是如何实现的,能仔细讲解一下吗?

Smile-In-Heart avatar Mar 19 '21 01:03 Smile-In-Heart

我不太理解你的问题,能说的理详细一点吗?     ------------------ Original ------------------ From: @.>; Date:  Fri, Mar 19, 2021 09:57 AM To: @.>; Cc: @.***>; Subject:  [weihuayi/fealpy] 插值函数 (#33)

 

魏老师,通过有限元数值解插值全域函数,只要给出一个点的位置,就可以知道插值全域函数值,您开发的包里面的这个封装函数是如何实现的,能仔细讲解一下吗?

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe.

weihuayi avatar Mar 20 '21 01:03 weihuayi

魏老师,我在求一个非线性方程需要迭代求解,首通过有限元求解方程得到数值离散解uh,然后非线性项的变量是关于p,而p=2|u|^2,因此我需要把离散解插值回计算区域的函数,这样只需要给出函数点,就可以直接得到p的值,好像您开发包里面有关于数值解构造函数的,所以想问问您实现的具体细节?

Smile-In-Heart avatar Mar 20 '21 04:03 Smile-In-Heart

p 属于什么空间?     ------------------ Original ------------------ From: @.>; Date:  Sat, Mar 20, 2021 12:23 PM To: @.>; Cc: @.>; @.>; Subject:  Re: [weihuayi/fealpy] 插值函数 (#33)

 

魏老师,我在求一个非线性方程需要迭代求解,首通过有限元求解方程得到数值离散解uh,然后非线性项的变量是关于p,而p=2|u|^2,因此我需要把离散解插值回计算区域的函数,这样只需要给出函数点,就可以直接得到p的值,好像您开发包里面有关于数值解构造函数的,所以想问问您实现的具体细节?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

weihuayi avatar Mar 20 '21 13:03 weihuayi

P跟u在一个空间,,可以这样理解 image,但是我不想进行这样二重循环,我想直接先求基础全域插值函数,在进行平方。

Smile-In-Heart avatar Mar 20 '21 14:03 Smile-In-Heart

p 和 u 全部是分片线性连续空间吗? 如果都是, 你可以 p[:] = 2*u**2.

weihuayi avatar Mar 22 '21 00:03 weihuayi

这就是一个插值的操作, 当然你也可以做投影. 无论是插值还是投影, 目前这种做法都会存在误差的. 我建议下次你问关于编程的问题,最好提供一段最小的测试代码, 方便大家直接理解你的意思并提供帮助.

weihuayi avatar Mar 22 '21 00:03 weihuayi

如果直接p[:]=2*u**2,不包含交叉项,例如u1u2, u1u3这些项,会不会导致误差太大,非线性迭代不收敛

Smile-In-Heart avatar Mar 22 '21 07:03 Smile-In-Heart

这是一个线性插值, 这个逼近阶是 h^2 的, 就看你非线迭代的要求是什么?  

我的问题是  p 这个中间变量是必须的吗? 它如果只是你双线性形的系数, 你根本不需要插值. 只接当成系数用就可以.

比如  (p*u, v) 这样的项,  你就把 p 当成一个系数函数即可, 根本不需要做插值. 

from fealpy.decorator import barycentric


@barycentric # 声明定义的函数传入的参数是重心坐标 
def p(bc):
     return 2*u(bc)**2

    ------------------ Original ------------------ From: @.>; Date:  Mon, Mar 22, 2021 03:53 PM To: @.>; Cc: @.>; @.>; Subject:  Re: [weihuayi/fealpy] 插值函数 (#33)

 

如果直接p[:]=2*u**2,不包含交叉项,例如u1u2, u1u3这些项,会不会导致误差太大,非线性迭代不收敛

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

weihuayi avatar Mar 22 '21 08:03 weihuayi

前面邮件回复的, 格式有点乱了

from fealpy.decorator import barycentric
@barycentric # 声明定义的函数传入的参数是重心坐标
def p(bc):
    return 2*u(bc)**2

weihuayi avatar Mar 22 '21 08:03 weihuayi

谢谢魏老师,我还有个关于WG的问题,就是我看程序包里面都是关于其刚度矩阵的组装,没有WG的质量矩阵组装,质量矩阵组装只有单元内函数积分块有值,其他例如单元函数和边界函数,边界函数之间的积分值为0吗?

Smile-In-Heart avatar Mar 24 '21 01:03 Smile-In-Heart

质量应该是只有单元内部有啊.     ------------------ Original ------------------ From: @.>; Date:  Wed, Mar 24, 2021 09:47 AM To: @.>; Cc: @.>; @.>; Subject:  Re: [weihuayi/fealpy] 插值函数 (#33)

 

谢谢魏老师,我还有个关于WG的问题,就是我看程序包里面都是关于其刚度矩阵的组装,没有WG的质量矩阵组装,质量矩阵组装只有单元内函数积分块有值,其他例如单元函数和边界函数,边界函数之间的积分值为0吗?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

weihuayi avatar Mar 24 '21 02:03 weihuayi

魏老师,WG针对于自由度,我看您写的Ndof=NT+NE,但是其他是这么写的Ndof=3*NT+NE,其中3代表一个单元内部有三个基函数,是因为您这个解是在节点和边上的系数,其它的是内部和边上的系数

Smile-In-Heart avatar Mar 24 '21 02:03 Smile-In-Heart

WG最低阶可以是内部P^0边上也是P^0。

scaomath avatar Mar 24 '21 03:03 scaomath

你看的是哪一段代码? 把相应的文件告诉我, 我不确定你看的是哪一个文件.      ------------------ Original ------------------ From: @.>; Date:  Wed, Mar 24, 2021 10:49 AM To: @.>; Cc: @.>; @.>; Subject:  Re: [weihuayi/fealpy] 插值函数 (#33)

 

魏老师,WG针对于自由度,我看您写的Ndof=NT+NE,但是其他是这么写的Ndof=3*NT+NE,其中3代表一个单元内部有三个基函数,是因为您这个解是在节点和边上的系数,其它的是内部和边上的系数

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

weihuayi avatar Mar 24 '21 06:03 weihuayi

我看的是您和陈龙老师开发的Matllab版的 image

Smile-In-Heart avatar Mar 25 '21 02:03 Smile-In-Heart

@Smile-In-Heart 这个就是我刚才说的P^0-P^0的WG,最低阶,陈老师应该没有更新函数的文档。刚才我更新了,请从https://github.com/lyc102/ifem去pull最新版的ifem。单元里面u_0就是一个常数,stiffness算出来就是函数里面写的那个ct2。

scaomath avatar Mar 25 '21 13:03 scaomath

我以为你说的是 FEALPy 中的代码, 在 FEALPy 中你可以看这个空间: https://github.com/weihuayi/fealpy/blob/master/fealpy/functionspace/WeakGalerkinSpace2d.py

weihuayi avatar Mar 26 '21 00:03 weihuayi

魏老师,我想问一下刚度矩阵和质量矩阵组装时,它的系数函数是在节点(自由度)的值向量,即f=sum(f(i)*phi(i))如有限元离散一样,phi就是基函数,该怎么组装,是需要插值回去,还是有其他方法

Smile-In-Heart avatar Apr 19 '21 11:04 Smile-In-Heart

你说的这个系数函数一个函数,也是一个数组,在FEALPy 当中, 假设 C 就是一个 np.ndarray, 就是你系数函数的值向量, 下面的代码就把 C 封装成一个有限元函数,你可以像函数一样调用它。

space = LagrangeFiniteElementSpace(mesh, p=1) F = space.function(array=C)

weihuayi avatar Apr 20 '21 01:04 weihuayi