根据两个变量绘制 3D 误差函数

Plot 3D error function depending on two variables

我正在寻找与此类似的东西 但在八度音程中。

我有一个函数 f(a,b) returns 我有一个错误 rab 的多个值的两个列表我想 运行 这个函数并评估错误。由于这是一个多维函数,我无法绘制 2d 线图来显示错误,而是使用 3d 图。

给定两个列表:

list_a =[.1 1 10 100 1000 10000 100000]
list_b =[.1 1 10 100 1000 10000 100000]

和函数 f(a,b),哪个是创建此 3d 图的最佳方法?创建一个 matrix_r 代表每个组合的误差然后绘制它?

如果我有那个矩阵,我如何使用八度在 3d 中绘制它?

谢谢

举个例子。鉴于您选择的列表,我将其设为对数:)

list_a = logspace( -1, 5, 50 );
list_b = logspace( -1, 5, 50 );

f      = @ (a,b) (a+b).^2;   % a simulated  error function

[ Grid_a, Grid_b ] = ndgrid( list_a, list_b );

F = log( f( Grid_a, Grid_b ) );   % log error evaluated on the gridpoints

SurfObj = surf( list_a, list_b, F );

Axes = get( SurfObj, 'parent' );
set( Axes, 'xscale', 'log', 'yscale', 'log' )   % use logarithmic axes

从这里您还可以为其指定自定义颜色条,例如

CBar   = colorbar;
toLog  = @(x) sprintf('10e%d', x);
CTicks = get( CBar, 'ytick' );
set( CBar, 'yticklabel', arrayfun( toLog, CTicks, 'UniformOutput', false ) )

或者如果您更喜欢关注形状而不是数值,您可以创建一个纯色对象并在其上放置灯光:

set( SurfObj, 'facecolor', 'blue' )
light( 'position', [8, 12, 25] )