miércoles, 10 de noviembre de 2010

¿Cómo evitar la división entre cero?

Siguiendo con Scilab me he topado con otro problema.

Quiero hacer una división elemento a elemento

A = [3;4;2;0;1;2;6;1];
b = 9;

Lo lógico es usar ./ para dividir y no usar un ciclo for, pero cuando hago la división

A./b

Obtengo un error porque uno de los elementos es un cero. ¿Cómo puedo evitarlo sin usar un for?

Por ahora la única solución que se me ha ocurrido es reemplazar los 0 por un número "muy pequeño" sé que no es la forma correcta de hacerlo, pero como en mi caso no necesito mucha precisión me viene bien. Al final lo arreglo de la siguiente forma:

A(vectorfind(A, 0, 'r')) = 1.d-10;
A./b

Eliminar una fila en una matriz de Scilab

Soy totalmente nuevo en Scilab, no llevo utilizandolo ni una semana, pero ya he necesitado hacer cosas raras con el así que ya le estoy tomando cariño. ;-)

He buscado alguna forma para eliminar una fila de una matriz en Scilab, me rompí la cabeza con un millón de formas de hacerlo, primero creí que con


A = [A(1:i-1, :); A(i+1:$, :)];

bastaba pero en algunas ocasiones me daba un error de apuntadores. Después programé una función removeRow:

function A = removeRow(A, i)
  if i == 1 then
    if size(A, 1) <= 1 then
      A = [];
    else
      A = A(2:$,:);
    end
  elseif i == size(A, 1) then
    A = A(1:$-1, :);
  else
    A = [A(1:i-1, :); A(i+1:$, :)];
  end
endfunction


Pero al final encontré que bastaba con hacer

A(i,:) = [];


Vaya forma tuve de complicarme la vida.... :-P

domingo, 7 de noviembre de 2010

El cambio de horario

En Pittsburgh hasta hoy por la madrugada se ha hecho el cambio, de horario de verano a horario de invierno, y me ha dado risa ver como las estadísticas de la batería de mi computadora hacían algo un tanto extraño.

Según las estadísticas, mi batería tomó dos caminos paralelos, uno de carga y otro de descarga ¿Universos paralelos?, jaja... Lo malo que eso de las baterías que se cargan solas duró solo una hora. :-P

Cosas del cambio de horario.