FELiYCORA
25-07-2008, 07:59
Pois é estou a aqui a fazer um trabalho e estou encravado num problema derivado da arquitectura do MATLAB e não consigo dar-lhe a volta.
numa certa função para calcular o máximo de uma função matemática tenho o seguinte código:
while (aux <= dimen)
if ((real(fdd_sub(aux)) < 0) && (imag(fdd_sub(aux)) == 0))
valor=aux;
end
aux = aux+1;
end
sendo fdd_sub = subs(fdd, CL, zeros_deriv)
onde fdd é uma função simbólica segunda derivada da funçao F que se quer calcular o máximo com CL a sua única variável e zeros_deriv o vector com os zeros da derivada função F. fdd_sub será então um vector com os valores de fdd quando o vector zeros_deriv substitui a sua variável.
o que acontece é que me dá este erro na linha do if:
Undefined function or method 'lt' for input arguments of type 'sym'
Pelo que percebi por fdd_sub ser uma variável simbólica (não percebo porquê porque é apenas substituiçao de uma simbolica por numeros ou seja devia deixar de ser simbólica).
de qualquer modo tentei dar a volta a situação usando a função heaviside, em que:
heaviside(real(fdd_sub(aux)) == 0 é equivalente a (real(fdd_sub(aux)) < 0
esse erro deixa de acontecer, mas passa a acontecer outro. é que o heaviside só trabalha com números reais e embora eu esteja a usar a função real, as vezes aparecem números em que o resultado da função real em vez de ser apenas a parte real do número aparece a parte imaginária como 0*i e estraga tudo pois o heaviside reconhece como imaginário na mesma. grande falha do matlab!
qualquer ajuda é benvinda é urgentissimo pois isto nem é o propósito do programa, preciso mesmo de achar máximo de funções e nem sabia que o matlab não tinha essa função incorporada. tenho outra feita para achar máximos mas é por métodos numéricos e não me dá muito jeito dessa forma para este programa.
muito obrigado!
numa certa função para calcular o máximo de uma função matemática tenho o seguinte código:
while (aux <= dimen)
if ((real(fdd_sub(aux)) < 0) && (imag(fdd_sub(aux)) == 0))
valor=aux;
end
aux = aux+1;
end
sendo fdd_sub = subs(fdd, CL, zeros_deriv)
onde fdd é uma função simbólica segunda derivada da funçao F que se quer calcular o máximo com CL a sua única variável e zeros_deriv o vector com os zeros da derivada função F. fdd_sub será então um vector com os valores de fdd quando o vector zeros_deriv substitui a sua variável.
o que acontece é que me dá este erro na linha do if:
Undefined function or method 'lt' for input arguments of type 'sym'
Pelo que percebi por fdd_sub ser uma variável simbólica (não percebo porquê porque é apenas substituiçao de uma simbolica por numeros ou seja devia deixar de ser simbólica).
de qualquer modo tentei dar a volta a situação usando a função heaviside, em que:
heaviside(real(fdd_sub(aux)) == 0 é equivalente a (real(fdd_sub(aux)) < 0
esse erro deixa de acontecer, mas passa a acontecer outro. é que o heaviside só trabalha com números reais e embora eu esteja a usar a função real, as vezes aparecem números em que o resultado da função real em vez de ser apenas a parte real do número aparece a parte imaginária como 0*i e estraga tudo pois o heaviside reconhece como imaginário na mesma. grande falha do matlab!
qualquer ajuda é benvinda é urgentissimo pois isto nem é o propósito do programa, preciso mesmo de achar máximo de funções e nem sabia que o matlab não tinha essa função incorporada. tenho outra feita para achar máximos mas é por métodos numéricos e não me dá muito jeito dessa forma para este programa.
muito obrigado!