美丽的函数图像之隐函数

简介

隐函数的通常形式为F(x,y)=G(x,y)F(x,y)=0

遍历法

对于每个像素点都计算其函数值,如等于0或绝对值小于一个阈值,则判断函数经过该像素。如要提高精度则需要减小步长,效果不佳。

Marching Squares

该算法通常用于等高线绘制,而隐函数就是F(x,y)=z在z=0处的截面。该算法判断一个单位方块四个角的z值正负,如同时出现正负,则说明该方块中必然有函数图像穿过,但如全正全负则无法判断,需进一步计算。该算法特点是绘制效率高,但可能会绘制出不属于函数图像的点,在图像有交叉处会出现缺少图像的问题。是激进的。

广义区间算术

该算法专注于隐函数绘制,与传统区间算术不同,塔伯广义区间算数引入了区间集合(Set),和Def(定义域是否完整),和Cont(是否连续),相比传统区间算数精准度有大量提升,可以解决不连续的函数图像。以下的展示即使用该算法绘制。但该算法面对x-xx/x问题时效果不佳,会出现大量误差,往往需要其他算法如Marching Squares修正。Sympy库的plot_implicit函数即使用该算法。是保守的。

仿射算术

该算法是区间算术的进阶,特点是将区间x转化为x+x0*e0+x1*e1....xn*en(en为噪声,xn为参数,x为基准值) 一定程度解决了x-x的问题(噪声可以相减抵消,准确地等于0)但对于乘法误差仍然较大,不支持除法,不支持数学函数。

基于矩阵的仿射算术,和张量的仿射算数

示例

以下均使用CsGrafeq绘制
项目地址
ps:只是想展示一下美丽的函数图像,为了这碟醋包了顿饺子......