线性插值函数的基函数构造

这里介绍的基函数为线性插值对应的基函数,也就是通过不在同一直线上的三个点构造的平面。这里我们直接通过三个点构造一个平面,再将其写法简单的变形就可以找到对应的基函数。

设 A : ( x 1 , y 1 , z 1 ) , B : ( x 2 , y 2 , z 2 ) , C : ( x 3 , y 3 , z 2 ) A:(x_1,y_1,z_1),B:(x_2,y_2,z_2),C:(x_3,y_3,z_2) A:(x1​,y1​,z1​),B:(x2​,y2​,z2​),C:(x3​,y3​,z2​)是空间中不在同一直线上的三个点,且 A , B , C A,B,C A,B,C三点在平面 π : a x + b y + c z + d = 0 \pi:ax+by+cz+d=0 π:ax+by+cz+d=0上。

这里,利用点法式确定平面 π \pi π。首先,根据向量 A B ⃗ = [ x 2 − x 1 , y 2 − y 1 , z 2 − z 1 ] \vec{AB}=[x_2-x_1,y_2-y_1,z_2-z_1] AB =[x2​−x1​,y2​−y1​,z2​−z1​], A C ⃗ = [ x 3 − x 1 , y 3 − y 1 , z 3 − z 1 ] \vec{AC}=[x_3-x_1,y_3-y_1,z_3-z_1] AC =[x3​−x1​,y3​−y1​,z3​−z1​]构造垂直于 A B ⃗ , A C ⃗ \vec{AB},\vec{AC} AB ,AC 的向量 n ⃗ \vec{n} n , n ⃗ \vec{n} n 即为所求平面的法向量,

n ⃗ = A B ⃗ × A C ⃗ = [ ( y 2 − y 1 ) ( z 3 − z 1 ) − ( y 3 − y 1 ) ( z 2 − z 1 ) , ( z 2 − z 1 ) ( x 3 − x 1 ) − ( z 3 − z 1 ) ( x 2 − x 1 ) , ( x 2 − x 1 ) ( y 3 − y 1 ) − ( x 3 − x 1 ) ( y 2 − y 1 ) ] \vec{n} = \vec{AB}\times\vec{AC}\\\ \ \ = [(y_2-y_1)(z_3-z_1)-(y_3-y_1)(z_2-z_1), \\\ \ \ \ \ \ \ \ \ (z_2-z_1)(x_3-x_1)-(z_3-z_1)(x_2-x_1), \\\ \ \ \ \ \ \ \ \ (x_2-x_1)(y_3-y_1)-(x_3-x_1)(y_2-y_1)] n =AB ×AC    =[(y2​−y1​)(z3​−z1​)−(y3​−y1​)(z2​−z1​),         (z2​−z1​)(x3​−x1​)−(z3​−z1​)(x2​−x1​),         (x2​−x1​)(y3​−y1​)−(x3​−x1​)(y2​−y1​)]

进而,设点 P ( x , y , z ) P(x,y,z) P(x,y,z)在平面 π \pi π上,则有 P A ⃗ ⊥ n ⃗ \vec{PA}\perp\vec{n} PA ⊥n ,即
0 = ( x − x 1 ) ( ( y 2 − y 1 ) ( z 3 − z 1 ) − ( y 3 − y 1 ) ( z 2 − z 1 ) ) + ( y − y 1 ) ( ( z 2 − z 1 ) ( x 3 − x 1 ) − ( z 3 − z 1 ) ( x 2 − x 1 ) ) + ( z − z 1 ) ( ( x 2 − x 1 ) ( y 3 − y 1 ) − ( x 3 − x 1 ) ( y 2 − y 1 ) ) 0 = (x-x_1)((y_2-y_1)(z_3-z_1)-(y_3-y_1)(z_2-z_1))\\\ \ \ +(y-y_1)((z_2-z_1)(x_3-x_1)-(z_3-z_1)(x_2-x_1))\\\ \ \ +(z-z_1)((x_2-x_1)(y_3-y_1)-(x_3-x_1)(y_2-y_1)) 0=(x−x1​)((y2​−y1​)(z3​−z1​)−(y3​−y1​)(z2​−z1​))   +(y−y1​)((z2​−z1​)(x3​−x1​)−(z3​−z1​)(x2​−x1​))   +(z−z1​)((x2​−x1​)(y3​−y1​)−(x3​−x1​)(y2​−y1​))

整理可得:

( ( x 2 − x 1 ) ( y 3 − y 1 ) − ( x 3 − x 1 ) ( y 2 − y 1 ) ) z = − ( z 1 ( ( x − x 1 ) ( y 3 − y 1 − ( y 2 − y 1 ) ) + z 2 ( ( y − y 1 ) ( x 3 − x 1 ) − ( x − x 1 ) ( y 3 − y 1 ) ) + z 3 ( ( x − x 1 ) ( y 2 − y 1 ) − ( y − y 1 ) ( x 1 − x 1 ) ) + z 1 ( y − y 1 ) ( x 2 − x 1 − ( x 3 − x 1 ) ) ) + z 1 ( ( x 2 − x 1 ) ( y 3 − y 1 ) − ( x 3 − x 1 ) ( y 2 − y 1 ) ) = z 1 ( ( x − x 2 ) ( y 2 − y 3 ) + ( y − y 2 ) ( x 3 − x 2 ) ) + z 2 ( ( x − x 3 ) ( y 3 − y 1 ) + ( y − y 3 ) ( x 1 − x 3 ) ) + z 3 ( ( x − x 1 ) ( y 1 − y 2 ) + ( y − y 1 ) ( x 2 − x 1 ) ) ((x_2-x_1)(y_3-y_1)-(x_3-x_1)(y_2-y_1))z \\= -(z_1((x-x_1)(y_3-y_1-(y_2-y_1))\\\ \ \ +z_2((y-y_1)(x_3-x_1)-(x-x_1)(y_3-y_1))\\\ \ \ +z_3((x-x_1)(y_2-y_1)-(y-y_1)(x_1-x_1))\\\ \ \ +z_1(y-y_1)(x_2-x_1-(x_3-x_1)))\\\ \ \ +z_1((x_2-x_1)(y_3-y_1)-(x_3-x_1)(y_2-y_1)) \\=z_1((x-x_2)(y_2-y_3)+(y-y_2)(x_3-x_2))\\+z_2((x-x_3)(y_3-y_1)+(y-y_3)(x_1-x_3))\\+z_3((x-x_1)(y_1-y_2)+(y-y_1)(x_2-x_1)) ((x2​−x1​)(y3​−y1​)−(x3​−x1​)(y2​−y1​))z=−(z1​((x−x1​)(y3​−y1​−(y2​−y1​))   +z2​((y−y1​)(x3​−x1​)−(x−x1​)(y3​−y1​))   +z3​((x−x1​)(y2​−y1​)−(y−y1​)(x1​−x1​))   +z1​(y−y1​)(x2​−x1​−(x3​−x1​)))   +z1​((x2​−x1​)(y3​−y1​)−(x3​−x1​)(y2​−y1​))=z1​((x−x2​)(y2​−y3​)+(y−y2​)(x3​−x2​))+z2​((x−x3​)(y3​−y1​)+(y−y3​)(x1​−x3​))+z3​((x−x1​)(y1​−y2​)+(y−y1​)(x2​−x1​))

由三角形面积 S △ A B C = 1 / 2 ( ( x 2 − x 1 ) ( y 3 − y 1 ) − ( x 3 − x 1 ) ( y 2 − y 1 ) ) S_{\triangle ABC}=1/2((x_2-x_1)(y_3-y_1)-(x_3-x_1)(y_2-y_1)) S△ABC​=1/2((x2​−x1​)(y3​−y1​)−(x3​−x1​)(y2​−y1​))因此有

z = [ z 1 ( ( x − x 2 ) ( y 2 − y 3 ) + ( y − y 2 ) ( x 3 − x 2 ) ) + z 2 ( ( x − x 3 ) ( y 3 − y 1 ) + ( y − y 3 ) ( x 1 − x 3 ) ) + z 3 ( ( x − x 1 ) ( y 1 − y 2 ) + ( y − y 1 ) ( x 2 − x 1 ) ) ] / ( 2 ∗ S △ A B C ) z = [z_1((x-x_2)(y_2-y_3)+(y-y_2)(x_3-x_2))\\\ \ +z_2((x-x_3)(y_3-y_1)+(y-y_3)(x_1-x_3))\\\ \ +z_3((x-x_1)(y_1-y_2)+(y-y_1)(x_2-x_1))]/(2*S_{\triangle ABC}) z=[z1​((x−x2​)(y2​−y3​)+(y−y2​)(x3​−x2​))  +z2​((x−x3​)(y3​−y1​)+(y−y3​)(x1​−x3​))  +z3​((x−x1​)(y1​−y2​)+(y−y1​)(x2​−x1​))]/(2∗S△ABC​)

因此线性插值基函数可以写为

N A = ( ( x − x 2 ) ( y 2 − y 3 ) + ( y − y 2 ) ( x 3 − x 2 ) ) / ( 2 ∗ S △ A B C ) N_A = ((x-x_2)(y_2-y_3)+(y-y_2)(x_3-x_2))/(2*S_{\triangle ABC}) NA​=((x−x2​)(y2​−y3​)+(y−y2​)(x3​−x2​))/(2∗S△ABC​)

N B = ( ( x − x 3 ) ( y 3 − y 1 ) + ( y − y 3 ) ( x 1 − x 3 ) ) / ( 2 ∗ S △ A B C ) N_B=((x-x_3)(y_3-y_1)+(y-y_3)(x_1-x_3))/(2*S_{\triangle ABC}) NB​=((x−x3​)(y3​−y1​)+(y−y3​)(x1​−x3​))/(2∗S△ABC​)

N C = ( ( x − x 1 ) ( y 1 − y 2 ) + ( y − y 1 ) ( x 2 − x 1 ) ) / ( 2 ∗ S △ A B C ) N_C=((x-x_1)(y_1-y_2)+(y-y_1)(x_2-x_1))/(2*S_{\triangle ABC}) NC​=((x−x1​)(y1​−y2​)+(y−y1​)(x2​−x1​))/(2∗S△ABC​)

上述基函数也可以写为

N A = ( x ( y 2 − y 3 ) + y ( x 3 − x 2 ) + x 2 y 3 − y 2 x 3 ) / ( 2 ∗ S △ A B C ) N_A = (x(y_2-y_3)+y(x_3-x_2)+x_2y_3-y_2x_3)/(2*S_{\triangle ABC}) NA​=(x(y2​−y3​)+y(x3​−x2​)+x2​y3​−y2​x3​)/(2∗S△ABC​)

N B = ( x ( y 3 − y 1 ) + y ( x 1 − x 3 ) + x 3 y 1 − y 3 x 1 ) / ( 2 ∗ S △ A B C ) N_B=(x(y_3-y_1)+y(x_1-x_3)+x_3y_1-y_3x_1)/(2*S_{\triangle ABC}) NB​=(x(y3​−y1​)+y(x1​−x3​)+x3​y1​−y3​x1​)/(2∗S△ABC​)

N C = ( x ( y 1 − y 2 ) + y ( x 2 − x 1 ) + x 1 y 2 − x 2 y 1 ) / ( 2 ∗ S △ A B C ) N_C=(x(y_1-y_2)+y(x_2-x_1)+x_1y_2-x_2y_1)/(2*S_{\triangle ABC}) NC​=(x(y1​−y2​)+y(x2​−x1​)+x1​y2​−x2​y1​)/(2∗S△ABC​)

注意:这里利用空间中不在同一条直线上的三个点确定唯一平面,通过这种方式构造平面方程,进一步改写方程样式,得到基函数。

实验结果

我们绘制过点 A : ( 1 , 2 , 1 ) , B : ( 2 , 3 , 6 ) , C : ( 1 , 6 , 3 ) A:(1,2,1),B:(2,3,6),C:(1,6,3) A:(1,2,1),B:(2,3,6),C:(1,6,3)的平面 π \pi π,结果如下


实例代码如下:

clc,clear
x = [1,2,4];
y = [2,3,1];
z = [1,6,3];
p = (x(1)-x(2))*(y(1)-y(3)) - (y(1)-y(2))*(x(1)-x(3));
% K1 = @(t,s)(s-y(2))*(x(3)-x(2)) - (t-x(2))*(y(3)-y(2));
% K2 = @(t,s)(s-y(3))*(x(1)-x(3)) - (t-x(3))*(y(1)-y(3));
% K3 = @(t,s)(s-y(1))*(x(2)-x(1)) - (t-x(1))*(y(2)-y(1));
K1 = @(t,s)((y(2)-y(3))*t - (x(2)-x(3))*s + x(2)*y(3)-x(3)*y(2));
K2 = @(t,s)((y(3)-y(1))*t - (x(3)-x(1))*s + x(3)*y(1)-x(1)*y(3));
K3 = @(t,s)((y(1)-y(2))*t - (x(1)-x(2))*s + x(1)*y(2)-x(2)*y(1));
disp('下面这个矩阵为基函数在对应点处的值,即克罗内克尔符号矩阵')
disp([K1(x(1),y(1)),K1(x(2),y(2)),K1(x(3),y(3))K2(x(1),y(1)),K2(x(2),y(2)),K2(x(3),y(3))K3(x(1),y(1)),K3(x(2),y(2)),K3(x(3),y(3))]/p)
F = @(t,s) (z(1) * K1(t,s) + z(2) * K2(t,s) + z(3) * K3(t,s))/p;
% F = triangle_2D(x,y,z);
xx = 0:0.1:5;
for i = 1:length(xx)for j = 1:length(xx)Z(j,i) = F(xx(i),xx(j));end
end
% 注意到surf绘图中,Z的列数对应的是X,行数对应的是Y,在制作Z矩阵时,应该注意这一点。
[X,Y] = meshgrid(xx);
surf(X,Y,Z)
hold on
plot3(x,y,z,'r*')

线性插值函数的基函数构造相关推荐

  1. 贝叶斯方法---分段线性插值函数画图

    一.贝叶斯方法介绍 1.不确定表示 在主观贝叶斯方法中,知识是用产生式表示的,其形式为: IF    E   THEN  (LS,LN)   H 其中(LS,LN)用来表示该知识的知识强度,LS(充分 ...

  2. python线性插值函数_Numpy一维线性插值函数的用法

    直接列出函数: numpy.interp(x, xp, fp, left=None, right=None, period=None) x - 表示将要计算的插值点x坐标 xp - 表示已有的xp数组 ...

  3. 有限元-二维有限元编程(矩形区域、三角剖分)

    有限元-矩形区域三角剖分程序 本文将介绍矩形区域上Poisson方程−Δu=f,Δ=∂∂x2+∂∂y2-\Delta u=f,\Delta= \frac{\partial}{\partial x^2} ...

  4. 基于Python的二维有限元声波方程正演计算

    基于Python的二维有限元声波方程正演计算 一.基础理论与相关公式的导出 什么是有限元方法? 有限元是计算复杂数学问题近似解的工具.当数学方程过于复杂,无法用正常的方法求解,并且一定程度的误差是可以 ...

  5. matlab:Lagrange插值函数构造

    L a g r a n g e Lagrange Lagrange基函数及 L a g r a n g e Lagrange Lagrange多项式的构造 构 造 L a g r a n g e 基 ...

  6. 数值分析实习作业(各种插值函数与积分公式的python代码实现)

    数值分析实习作业 1.对函数 f(x) f ( x ) f(x)进行插值 f(x)=11+x2 f ( x ) = 1 1 + x 2 f(x)=\frac{1}{1+x^{2}} (1)令插值节点为 ...

  7. 数学建模十大算法02—插值与拟合(拉格朗日插值、三次样条插值、线性最小二乘法……)

    文章目录 引入 一.插值 1.1 分段线性插值 1.2 牛顿插值法 1.3 拉格朗日插值多项式 1.4 样条插值 1.4.1 三次样条插值 1.5 二维插值 1.5.1 插值节点为网格节点 1.5.2 ...

  8. 【基础操作】线性基详解

    线性基是一个奇妙的集合(我摘的原话) 这里以非 $OI$ 的角度介绍了线性基 基础部分 模板题 给你 $n$ 个数的集合,让你选出任意多个不重复的数,使得它们的异或和最大. 线性基是什么 我们称集合 ...

  9. 线性表的定义和基本运算之线性结构

    一.线性表的逻辑定义和性质 线性表是最简单和最常用的一种数据结构,他是由n个数据元素(结点)a1,a2,a3,a4........an组成的有限序列.其中,数据元素个数那位表的长度.当n为0时称为空表 ...

最新文章

  1. 演讲实录 | DevOps 2021年度洞察
  2. docker mysql容器 修改时区
  3. 我去!每天都用的这个操作居然算“黑客行为”?
  4. 码农翻身之——分布式,集群,负载均衡
  5. 机器学习 来源框架_机器学习的秘密来源:策展
  6. linux远程监控毕业设计,毕业设计论文:基于嵌入式Linux远程监控系统的设计与实现.doc...
  7. 【Angular专题】——【译】Angular中的ForwardRef
  8. java运行时异常与一般异常有何异同_JVM | 虚拟机运行时数据区域划分和使用详解...
  9. 使用setuptools和cython打包python程序的时候遇到:Microsoft visual c++ 14.0 is required问题解决办法
  10. Django中间件简析
  11. 360安全卫士对于易量安装打包的可执行程序进行病毒误报
  12. 注意点在XMind 6中的使用注意事项
  13. nvidia ubuntu 驱动升级_解决 Ubuntu 在启动时冻结的问题
  14. 成都电子地图 高清15、17、19级别 谷歌电子地图资源
  15. 解决virtualbox导入虚拟机报错E_INVALIDARG (0x80070057)问题
  16. 如何使用GOOGLE高级搜索技巧
  17. c语言编写while乘法表,用C语言的while循环,打印九九乘法表,
  18. DSP从flash启动
  19. 使用maven打war包时报[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war...
  20. 【阿里巴巴】学习Java在面试过程中跳槽成功的心得总结

热门文章

  1. CocoStudio基础教程(3)在程序中处理cocoStudio导出动画
  2. redis rua解决库存问题_Redis事务
  3. java将字符串转成对象_java – 将字符串转换为类对象
  4. Ajax使用教程,及增删改查
  5. 计算机中的原码,计算机中的原码反码补码移码
  6. vimdiff 快捷键
  7. 进行码分多址CDMA通信
  8. 开发转测试,坚持16 年,转型并没错!
  9. 【博客】RealSense
  10. Mybatis动态sql是做什么的?都有哪些动态sql?简述一下动态sql的执行原理?