主题:请教平面插值问题,请指点一下,谢谢!
大智若愚
[专家分:90] 发布于 2010-09-24 12:55:00
大家好!
假设下面一个边长为100的正方形,四个节点的温度分别是16,18,19.5,20.5,正方形边上的温度可以认为是线性变化的。现在我想求正方形内的任意一点温度,应该怎么求?请指点一下,谢谢!
刚才忘记上传图片了,汗一个!抱歉!
最后更新于:2010-09-24 14:15:00
回复列表 (共8个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2010-09-24 16:53:00
求溫度場的話,有限體積比有限單元來得更好些。當然簡單問題你也可以用解析法。
板凳
jstzhurj [专家分:4680] 发布于 2010-09-24 17:26:00
我以为用双线性插值即可。一维情况下的线性插值:对于一个数列c,我们假设c[a]到c[a+1]之间是线性变化的那么对于浮点数x(a<=x<a+1),c(x)=c[a+1]*(x-a)+c[a]*(1+a-x);把这种插值方式扩展到二维情况,对于一个二维数组c,我们假设对于任意一个浮点数i,c(a,i)到c(a+1,i)之间是线性变化的,c(i,b)到c(i,b+1)之间也是线性变化的(a,b都是整数)那么对于浮点数的坐标(x,y)满足(a<=x<a+1,b<=y<b+1),我们可以先分别求出c(x,b)和c(x,b+1):c(x,b) = c[a+1]*(x-a)+c[a]*(1+a-x);c(x,b+1) = c[a+1][b+1]*(x-a)+c[a][b+1]*(1+a-x);好,现在已经知道c(x,b)和c(x,b+1)了,而根据假设c(x,b)到c(x,b+1)也是线性变化的,所以:c(x,y) = c(x,b+1)*(y-b)+c(x,b)*(1+b-y)这就是双线性插值。
3 楼
大智若愚 [专家分:90] 发布于 2010-09-24 18:00:00
嗯,我想过用双线性插值来求解。前两天已经把代码写好了。但昨天晚上我又想了一下,发觉有点问题。因为双线性插值的要求是,在x和y方向上,都是线性变化的。
上面图片的四个节点,都不是线性变化的,所以好像用双线性插值不太合适。
这个正方形里面的任意一点的值,应该受到四个节点值的影响,有没有一种插值能反映这种情况的?
4 楼
cgl_lgs [专家分:21040] 发布于 2010-09-24 20:05:00
如果非要用有限單元法的話,就用8節點等參元吧,精度相對會好一些的。
不過溫度場還是用有限體積來得好。
5 楼
大智若愚 [专家分:90] 发布于 2010-09-24 20:35:00
一定要用有限元或有限体积吗?以上图片只是模型的某个单元。本来模型是用有限差分方法剖分网格的,现在求模型的单元内部任意一点的温度,还要用有限体积或有限元的方法做,感觉好麻烦……
有没有稍微简单点的算法?
6 楼
cgl_lgs [专家分:21040] 发布于 2010-09-24 20:40:00
加密網格就行了,否則插值有可能會導致結果的不連續——除非你用的插值方法與單元的方法一致,且必須用比較特殊的插值函數:)
7 楼
jstzhurj [专家分:4680] 发布于 2010-09-24 23:40:00
若函数f在Q11=(x1,y1)、Q12=(x1,y2),Q21=(x2,y1)以及 Q22=(x2,y2)四个点的值分别为f(Q11)、f(Q12)、f(Q21)以及f(Q22),运用双线性插值得到:
f(x,y)={(x2-x)(y2-y)f(Q11)+(x-x1)(y2-y)f(Q21)+(x2-x)(y-y1)f(Q12)+(x-x1)(y-y1)f(Q22)}/{(x2-x1)(y2-y1)}
显然,任一点的值依赖于已知四个节点的值。有了公式,编写程序自然就不是问题了。
8 楼
大智若愚 [专家分:90] 发布于 2010-09-25 13:29:00
嗯,双线性插值,相对来说比较简单,前两天我也把代码写好了,后来不知道为什么又否定双线性插值。今天再仔细想想看,觉得双线性插值还是合适的。
谢谢cgl_lgs和jstzhurj两位的指导!
我来回复