如何绘制特征值函数的等高线图?右上曲线非直线原因咨询
特征值函数等高线图右上角线条非笔直的原因
首先可以简化你的特征值求和逻辑:矩阵的特征值之和等于矩阵的迹(主对角线元素之和)。你定义的3x3矩阵主对角线元素是5、2、x,因此特征值之和直接等于 5+2+x=7+x——这个值只和x有关,理论上等高线应该是垂直于x轴的直线。
但你的图中右上角线条不笔直,主要有两个核心原因:
1. 特征值计算的浮点误差
虽然理论上特征值之和等于迹,但eigen()函数在计算数值特征值时,会因矩阵条件数(比如x、y取值较大时矩阵元素差异显著)产生微小的浮点误差。这些误差会让M矩阵中同一x值对应的不同y值结果出现极细微偏差,在稀疏网格下被插值放大,导致等高线边缘出现弯曲。
2. 网格分辨率过低
你的代码仅使用6x6的稀疏网格(len=6),contour()函数绘制时会对稀疏采样点进行线性插值以生成平滑等高线。稀疏采样点会放大插值算法的误差,尤其是在网格边缘(比如右上角),最终导致线条看起来不笔直。
验证与修复方法
- 简化函数消除浮点误差:直接用迹计算替代特征值求和,彻底避免数值误差:
P <- function(v){ x <- v[1] return(7 + x) } - 提高网格分辨率:将
len设置为更大的值(比如100),让采样点更密集,插值后的等高线会更接近理论上的笔直状态:xgrid <- seq(from=1, to=6, len=100) ygrid <- seq(from=1, to=6, len=100)
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

