如何在matlab中获得反色?

时间:2016-04-05 23:30:28

标签: matlab matlab-figure

我有下一个代码:但是在图(4)中我想获得图(3)的反色,我的意思是,如果它在图(3)中看起来是黄色我想在图(4)中获得蓝色黄色在图(3)中。我怎么能这样做?

% Modelo de Sel'kov en 1D

 % Este código en MATLAB simulara el modelo de Sel'kov para la glucólisis en 1D
 clear all
 close all

 %%%%%%%%%%%%%%%%%%%%%
 %%%Inicialización %%%
 %%%%%%%%%%%%%%%%%%%%%

 % Parámetros
 bc  = 0.6;
 ac =  0.08;
 Du = 1;   
 Dv = 2;  %Constantes difusivas

% Información inicial y mallado
 % w = 10;  %sin patrón
 w = 80;  % patrón

 Nx = 10000; % Total de puntos discretizados en el dominio [0,L]x[0,L]
 x = linspace(0,w,Nx);
 dx = x(2) - x(1);

 dt = 1; % tamaño del paso
 t = 0:dt:100;
 Nt = length(t); %numero de puntos en el tiempo

 % Condiciones para la superficie
 [X, T] = meshgrid(x, t);
 U = 0*X;
 V = 0*X;

 % Vectores columna (más fáciles)
 x = x(:);
 t = t(:);

 %Condición inicial: pequeña perturbación lejos del estado estable
 u = bc*ones(length(x),1) + 0.05*rand(Nx, 1);
 v = (bc/(ac + bc^2))*ones(length(x),1) + 0.05*rand(Nx,1);

 % Condiciones iniciales salvadas.
 U(1,:) = u;
 V(1,:) = v;


 %%%%%%%%%%%%%%%%%%%%%%%%%
 %%%Generando la matriz%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%
% Usando un esquema implícito 
%  For u
  a = (1+2*Du*dt/dx^2);  % valores en la diagonal
  b = -Du*dt/dx^2;        % valores fuera de la diagonal
  main = a*sparse(ones(Nx,1));
  off  = b*sparse(ones(Nx-1,1));
  Bu = diag(main) + diag(off,1) + diag(off,-1); %Matriz dispersa
% Condición de frontera de flujo cero
  Bu(1, end-1) = -b;
  Bu(end, 2) = -b;

%   For v
  a = (1+2*Du*dt/dx^2);  % valores en la diagonal
  b = -Du*dt/dx^2;        % valores fuera de la diagonal
  main = a*sparse(ones(Nx,1));
  off  = b*sparse(ones(Nx-1,1));
  Bv = diag(main) + diag(off,1) + diag(off,-1); %Matriz dispersa
% Condición de frontera flujo cero
  Bv(1, end-1) = -b;
  Bv(end, 2) = -b;

 %%%%%%%%%%%%%%%%%%%%%%%%%
 %%%    Resultados     %%%
 %%%%%%%%%%%%%%%%%%%%%%%%%

 figure(1); 
 plot(x,u,'g.-', 'linewidth',1);
 hold on;
 plot(x,v,'r.-', 'linewidth',1);
 hold off;

 axis([-1 80 -.01 15.01]) 

 for j = 1:Nt-1
     % f y g son los términos no lineales en el modelo de Sel'kov
     f= dx.^2.*(-u*+ac.*v+v.*u.^2);
     g= dx.^2.*(bc-ac.*v-v.*u.^2);
     %f = u.^2./v-bc*u;
     %g = u.^2 - v;

     % En cada paso resolvemos el sistema de ecuaciones
     u = Bu\(u + dt.*f);   
     v = Bv\(v + dt.*g);

     % Gráficas
     plot(x,u,'g.-', 'linewidth',1);
     hold on;
     plot(x,v,'r.-', 'linewidth',1);
     hold off;
    axis([-1 80 -.01 15.01])
     title(['t = ', num2str(j*dt)],'fontsize',24)
     drawnow;

     % Datos para la superficie
     U(j,:) = u;
     V(j,:) = v;
 end


 %%%% Gráfica de la superficie %%%%
 figure(1);
 s = surf(x, t, U);
 set(s, 'EdgeColor', 'none', 'FaceColor', 'interp'); 
 xlabel('<----x---->')
 ylabel('<----t---->')
 zlabel('<----u---->')

  figure(2);
 s = surf(x, t, V);
 set(s, 'EdgeColor', 'none', 'FaceColor', 'interp'); 
 xlabel('<----x---->')
 ylabel('<----t---->')
 zlabel('<----v---->')

 %%%% contour plot %%%
 figure(3);
 p = pcolor(x, t, U);
set(p, 'EdgeColor', 'none', 'FaceColor', 'interp');

 figure(4);
 r = pcolor(x, t, V);
 set(r, 'EdgeColor', 'none', 'FaceColor', 'interp');

2 个答案:

答案 0 :(得分:1)

如果您不想实际更改数据的,则只需获取图的色彩图并使用flipud将其反转。

cmap = colormap(gcf);
colormap(gcf, flipud(cmap))

这将反转色彩映射,同时保持原始数据不变。

答案 1 :(得分:0)

在调用图4时将V更改为-V应该可以解决问题:

figure(4);
r = pcolor(x, t, -V);
set(r, 'EdgeColor', 'none', 'FaceColor', 'interp');