Uso il software maxima per semplificare le formule. Di solito, posso gestirmi facilmente con subst, ratsubst, factor, ratsimp, ... Ma ci sono ancora poche formule che trovo difficili da semplificare nel modo in cui mi piacerebbe.semplificare le formule nel software maxima
assumendo che a> b, c> d, mi piacerebbe semplificare le frazioni che iniziano con un segno - in questo modo:
-(a - b)/(d - c) -> (a - b)/(c - d)
ma non come farlo. Sembra che l'algoritmo di maxima semplificatore proverà a ordinare le variabili a modo suo.
Ho creato la mia funzione massima per cercare di semplificare questi segni meno inutili.
no_minus(fraction):= block([simp:true, numerat:expand(-ratnumer(fraction)), denominat:expand(-ratdenom(fraction))], block([simp:false], numerat/denominat)); -a/(b-x); no_minus(-a/(b-x)); no_minus(-a*b*c/(b-x*b*f-f));
Mi aspettavo no_minus (-a/(b-x)) sarebbero tornati a/(x-b), ma non l'ho fatto.
Vorrei introdurre un nuovo operatore di infisso per indicare che due espressioni sono approssimativamente uguali. Ad esempio, se x è approssimativamente uguale a y. Mi piacerebbe notare che
x =~ y
infix("=~").
Come configurare il semplificatore in modo che quando l'ingresso è
2*x+3 =~ u+v;
(%-3)/2;
l'uscita è
x =~ (u+v-3)/2
Grazie, è stato davvero un buon inizio. Ho appena aggiunto rbp = 80 e lbp = 80 per sbarazzarmi della parentesi. Questo è ciò di cui avevo bisogno per risolvere il mio infisso operatore "approssimativo" .; infisso ("= ~"); matchdeclare ([aa, bb, cc], tutti); tellimp ((aa = ~ bb) * cc, (aa * cc) = ~ (bb * cc)); tellimp ((aa = ~ bb) + cc, (aa + cc) = ~ (bb + cc)); (2 * x + 3) = ~ (5 * y^2 + 6); (% -3)/2; 2 * x + 3 = ~ 5 * y^2 + 6; (% -3)/2; infisso ("= ~", 80,80); 2 * x + 3 = ~ 5 * y^2 + 6; (% -3)/2; "= ~" (2 * x, 3 * y + 4); % -4; – Arthur