Trazar la función de error 3D en función de dos variables
Estoy buscando hacer algo similar a este gráfico 3D de la función de error en una regresión lineal pero en octava.
Tengo una función f(a,b)que me devuelve un error ry dos listas de valores múltiples de ay bquiero ejecutar esta función y evaluar el error. Dado que esta es una función multidimensional, no es suficiente para mí trazar un diagrama de líneas 2d para mostrar el error, sino más bien ir con un diagrama 3D.
Dada dos lista:
list_a =[.1 1 10 100 1000 10000 100000]
list_b =[.1 1 10 100 1000 10000 100000]
Y la función f(a,b), ¿cuál es la forma más óptima de crear este gráfico 3D? ¿Crear un matrix_rque represente el error para cada combinación y luego graficarlo?
Si tuviera esa matriz, ¿cómo puedo trazarla en 3d usando octava?
Gracias
Respuestas
He aquí un ejemplo. Dada su elección de listas, la hice logarítmica :)
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
Desde aquí también puede darle una barra de colores personalizada, por ejemplo
CBar = colorbar;
toLog = @(x) sprintf('10e%d', x);
CTicks = get( CBar, 'ytick' );
set( CBar, 'yticklabel', arrayfun( toLog, CTicks, 'UniformOutput', false ) )
O si prefiere enfocarse en la forma en lugar de los valores, puede crear un objeto de color sólido y ponerle iluminación:
set( SurfObj, 'facecolor', 'blue' )
light( 'position', [8, 12, 25] )