Je commence par une simple question Maxima, dont la réponse peut fournir la réponse au problème réel auquel je suis confronté.Non-évaluation de l'expression numérique en Maxima
Question simple liée: Comment calculer le maximum: bfloat ((1 +% i)^0.3); Peut-il y avoir une variable d'option qui peut être définie pour que cela évalue un nombre complexe? Dans l'évaluation des approximations pour l'intégration du temps numérique pour les méthodes d'éléments finis, j'utilise à cet effet l'analyse spectrale qui nécessite le calcul des valeurs propres d'une matrice 4 x 4. Cette matrice "cav" est également calculée à l'intérieur des maxima, en utilisant certaines des capacités d'algèbre des maxima, mais en stockant des valeurs numériques, de sorte que la matrice est entièrement numérique, c'est-à-dire ne contenant pas de variables. J'ai calculé les valeurs propres avec Mathematica et retourne 4 valeurs propres réelles. Cependant Maxima calcule des expressions horriblement compliquées pour ce cas, qui apparemment ne "sait" pas simplifier, même numériquement comme "bigfloat". Ce problème est peut-être dû au fait que Maxima se rapproche d'abord de la matrice "cac" par des nombres rationnels (c'est-à-dire des fractions) et tente ensuite de résoudre le problème complètement, au lieu de simplement utiliser des calculs numériques "bigfloat". Est-ce que je peux changer cela?
Notez que si vous ne modifiez que la valeur d'entrée de gzv à 0,5, cela fonctionne correctement et renvoie des valeurs numériques de valeurs propres complexes.
J'inclus le code ci-dessous. Notez que tout le code jusqu'à "cav: subst (vs, ca) $" est juste pour la définition de la matrice cav et semble fonctionner correctement. C'est dans les quelques énoncés suivants qu'il ne parvient pas à calculer des valeurs numériques pour les valeurs propres.
v1:v0+ (1-gg)*a0+gg*a1$
d1:d0+v0+(1/2-gb)*a0+gb*a1$
obf:a1+(1+ga)*(w^2*d1 + 2*gz*w*(d1-d0)) -
ga *(w^2*d0 + 2*gz*w*(d0-g0))$
obf:expand(obf)$
cd:subst([a1=1,d0=0,v0=0,a0=0,g0=0],obf)$
fd:subst([a1=0,d0=1,v0=0,a0=0,g0=0],obf)$
fv:subst([a1=0,d0=0,v0=1,a0=0,g0=0],obf)$
fa:subst([a1=0,d0=0,v0=0,a0=1,g0=0],obf)$
fg:subst([a1=0,d0=0,v0=0,a0=0,g0=1],obf)$
f:[fd,fv,fa,fg]$
cad1:expand(cd*[1,1,1/2-gb,0] - gb*f)$
cad2:expand(cd*[0,1,1-gg,0] - gg*f)$
cad3:expand(-f)$
cad4:[cd,0,0,0]$
cad:matrix(cad1,cad2,cad3,cad4)$
gav:-0.05$
ggv:1/2-gav$
gbv:(ggv+1/2)^2/4$
gzv:1.1$
dt:0.01$
wv:bfloat(dt*2*%pi)$
vs:[ga=gav,gg=ggv,gb=gbv,gz=gzv,w=wv]$
cav:subst(vs,ca)$
cav:bfloat(cav)$
evam:eigenvalues(cav)$
evam:bfloat(evam)$
eva:evam[1]$
Merci beaucoup, Robert Dodier. Dgeev de Lapack a travaillé magnifiquement, et la précision, même si elle n'est pas variable, semble plus qu'adéquate du nombre de chiffres imprimés, et l'exemple de verfication obtenu de "? Dgeev". Il est très utile de pouvoir faire des calculs numériques et symboliques avec le même programme. J'avais cherché des moyens de calculer des valeurs propres avec Maxima, mais je n'ai pas trouvé l'alternative de dgeev, ce qui était au moins très utile. –