1 @c /Equations.texi/1.24/Thu Nov 2 05:46:56 2006/-ko/
2 @c end concepts Equations
4 * Definições para Equações::
7 @node Definições para Equações, , Equações, Equações
8 @section Definições para Equações
10 @c NEED A DESCRIPTION OF %rnum AS WELL
11 @defvr {Variável} %rnum_list
12 Valor por omissão: @code{[]}
14 @code{%rnum_list} é a lista de variáveis introduzidas em soluções
16 @code{%r} variáveis São adicionadas a @code{%rnum_list} na ordem em que
18 Isso é conveniente para fazer substituições dentro da
20 @c WHAT DOES THIS STATEMENT MEAN ??
21 É recomendado usar essa lista em lugar de
22 fazer @code{concat ('%r, j)}.
27 @defvr {Variável} algexact
28 Valor por omissão: @code{false}
30 @code{algexact} afecta o comportamento de @code{algsys} como segue:
32 Se @code{algexact} é @code{true},
33 @code{algsys} sempre chama @code{solve} e então usa @code{realroots}
34 sobre falhas de @code{solve}.
36 Se @code{algexact} é @code{false}, @code{solve} é chamada somente se
37 o eliminante não for de uma variável, ou se for uma quadrática ou uma
40 Dessa forma @code{algexact: true} não garante soluções
41 exactas, apenas que @code{algsys} tentará primeiro pegar
42 soluções exactas, e somente retorna aproximações quando tudo mais falha.
44 @c ABOVE DESCRIPTION NOT TOO CLEAR -- MAYBE EXAMPLES WILL HELP
47 @deffn {Função} algsys ([@var{expr_1}, ..., @var{expr_m}], [@var{x_1}, ..., @var{x_n}])
48 @deffnx {Função} algsys ([@var{eqn_1}, ..., @var{eqn_m}], [@var{x_1}, ..., @var{x_n}])
49 Resolve polinómios simultâneos @var{expr_1}, ..., @var{expr_m}
50 ou equações polin@^omiais @var{eqn_1}, ..., @var{eqn_m}
51 para as variáveis @var{x_1}, ..., @var{x_n}.
52 Uma expressão @var{expr} é equivalente a uma equação @code{@var{expr} = 0}.
53 Pode existir mais equações que variáveis ou vice-versa.
55 @code{algsys} retorna uma lista de soluções,
56 com cada solução dada com uma lista de valores de estado das equações
57 das variáveis @var{x_1}, ..., @var{x_n} que satisfazem o sistema de equações.
58 Se @code{algsys} não pode achar uma solução, uma lista vazia @code{[]} é retornada.
60 Os símbolos @code{%r1}, @code{%r2}, ...,
61 são introduzidos tantos quantos forem necessários para representar parâmetros arbitrários na solução;
62 essas variáveis são também anexadas à lista @code{%rnum_list}.
64 O método usado é o seguinte:
66 (1) Primeiro as equações são factorizaadas e quebradas
69 (2) Para cada subsistema @var{S_i}, uma equação @var{E} e uma variável @var{x} são
71 A variável é escolhida para ter o menor grau não zero.
72 Então a resultante de @var{E} e @var{E_j} em relação a @var{x} é calculada para cada um das
73 equações restantes @var{E_j} nos subsistemas @var{S_i}.
74 Isso retorna um novo subsistema @var{S_i'} em umas poucas variáveis, como @var{x} tenha sido eliminada.
75 O processo agora retorna ao passo (1).
77 (3) Eventualmente, um subsistema consistindo de uma equação simples é
78 obtido. Se a equação é de várias variáveis e aproximações na
79 forma de números em ponto flutuante nã tenham sido introduzidas, então @code{solve} é
80 chamada para achar uma solução exacta.
82 Em alguns casos, @code{solve} não está habilitada a achar uma solução,
83 ou se isso é feito a solução pode ser uma expressão expressão muito larga.
85 @c REMAINDER OF (3) IS PRETTY COMPLEX. HOW CAN IT BE CLARIFIED ??
86 Se a equação é de uma única variável e é ou linear, ou quadrática, ou
87 biquadrada, então novamente @code{solve} é chamada se aproximações não tiverem
88 sido introduzidas. Se aproximações tiverem sido introduzidas ou a
89 equação não é de uma única variável e nem tão pouco linear, quadratica, ou
90 biquadrada, então o comutador @code{realonly} é @code{true}, A função
91 @code{realroots} é chamada para achar o valor real das soluções. Se
92 @code{realonly} é @code{false}, então @code{allroots} é chamada a qual procura por
93 soluções reais e complexas.
95 Se @code{algsys} produz uma solução que tem
96 poucos digitos significativos que o requerido, o utilizador pode escolher o valor
97 de @code{algepsilon} para um valor maior.
99 Se @code{algexact} é escolhido para
100 @code{true}, @code{solve} será sempre chamada.
101 @c algepsilon IS IN Floating.texi -- MAY WANT TO BRING IT INTO THIS FILE
103 (4) Finalmente, as soluções obtidas no passo (3) são substituídas dentro
104 dos níveis prévios e o processo de solução retorna para (1).
105 @c "PREVIOUS LEVELS" -- WHAT ARE THOSE ??
107 Quando @code{algsys} encontrar uma equação de várias variáveis que contém
108 aproximações em ponto flutuante (usualmente devido a suas falhas em achar
109 soluções exactas por um estágio mais fácil), então não tentará
110 aplicar métodos exatos para tais equações e em lugar disso imprime a mensagem:
111 "@code{algsys} cannot solve - system too complicated."
113 Interações com @code{radcan} podem produzir expressões largas ou
115 Naquele caso, pode ser possível isolar partes do resultado
116 com @code{pickapart} ou @code{reveal}.
118 Ocasionalmente, @code{radcan} pode introduzir uma unidade imaginária
119 @code{%i} dentro de uma solução que é actualmente avaliada como real.
124 @c e1: 2*x*(1 - a1) - 2*(x - 1)*a2;
126 +@c e3: a1*(-y - x^2 + 1);
127 @c e4: a2*(y - (x - 1)^2);
128 @c algsys ([e1, e2, e3, e4], [x, y, a1, a2]);
130 @c e2: -1 - y + 2*y^2 - x + x^2;
131 @c algsys ([e1, e2], [x, y]);
134 (%i1) e1: 2*x*(1 - a1) - 2*(x - 1)*a2;
135 (%o1) 2 (1 - a1) x - 2 a2 (x - 1)
138 (%i3) e3: a1*(-y - x^2 + 1);
140 (%o3) a1 (- y - x + 1)
141 (%i4) e4: a2*(y - (x - 1)^2);
143 (%o4) a2 (y - (x - 1) )
144 (%i5) algsys ([e1, e2, e3, e4], [x, y, a1, a2]);
145 (%o5) [[x = 0, y = %r1, a1 = 0, a2 = 0],
147 [x = 1, y = 0, a1 = 1, a2 = 1]]
151 (%i7) e2: -1 - y + 2*y^2 - x + x^2;
153 (%o7) 2 y - y + x - x - 1
154 (%i8) algsys ([e1, e2], [x, y]);
156 (%o8) [[x = - -------, y = -------],
160 [x = -------, y = - -------], [x = - -, y = - -], [x = 1, y = 1]]
166 @deffn {Função} allroots (@var{expr})
167 @deffnx {Função} allroots (@var{eqn})
168 Calcula aproximações numéricas de raízes reais e complexas do
169 polinómio @var{expr} ou equação polin@^omial @var{eqn} de uma variável.
171 @c polyfactor IS NOT OTHERWISE DOCUMENTED
172 O sinalizador @code{polyfactor} quando @code{true} faz com que
173 @code{allroots} factore o polinómio sobre os números reais se o
174 polinómio for real, ou sobre os números complexos, se o polinómio for
177 @code{allroots} pode retornar resultados imprecisos no caso de múltiplas raízes.
178 Se o polinómio for real, @code{allroots (%i*@var{p})}) pode retornar
179 aproximações mais precisas que @code{allroots (@var{p})},
180 como @code{allroots} invoca um algoritmo diferente naquele caso.
182 @code{allroots} rejeita expressoões que não sejam polinómios.
183 Isso requer que o numerador após a classificação
184 (@code{rat}'ing) poderá ser um polinómio, e isso requer que o
185 denominador seja quando muito um número complexo. Com esse tipo
186 resultado @code{allroots} irá sempre produzir uma expressão
187 equivalente (mas factorizada), se @code{polyfactor} for @code{true}.
189 Para polinómios complexos um algoritmo por Jenkins e Traub é
190 usado (Algorithm 419, @i{Comm. ACM}, vol. 15, (1972), p. 97).
191 Para polinómios reais o algoritmo usado é devido a Jenkins (Algorithm 493, @i{ACM TOMS},
192 vol. 1, (1975), p.178).
195 @c EXAMPLES GENERATED BY THESE INPUTS:
196 @c eqn: (1 + 2*x)^3 = 13.5*(1 + x^5);
197 @c soln: allroots (eqn);
199 @c do (e2: subst (e, eqn), disp (expand (lhs(e2) - rhs(e2))));
204 (%i1) eqn: (1 + 2*x)^3 = 13.5*(1 + x^5);
206 (%o1) (2 x + 1) = 13.5 (x + 1)
207 (%i2) soln: allroots (eqn);
208 (%o2) [x = .8296749902129361, x = - 1.015755543828121,
210 x = .9659625152196369 %i - .4069597231924075,
212 x = - .9659625152196369 %i - .4069597231924075, x = 1.0]
214 do (e2: subst (e, eqn), disp (expand (lhs(e2) - rhs(e2))));
215 - 3.5527136788005E-15
217 - 5.32907051820075E-15
219 4.44089209850063E-15 %i - 4.88498130835069E-15
221 - 4.44089209850063E-15 %i - 4.88498130835069E-15
226 (%i4) polyfactor: true$
227 (%i5) allroots (eqn);
228 (%o5) - 13.5 (x - 1.0) (x - .8296749902129361)
231 (x + 1.015755543828121) (x + .8139194463848151 x
238 @defvr {Variável} backsubst
239 Valor por omissão: @code{true}
241 @c WHAT IS THE CONTEXT HERE ?? (TO WHICH OTHER FUNCTION DOES THIS APPLY ??)
242 Quando @code{backsubst} é @code{false}, evita substituições
243 em expressões anteriores após as equações terem sido triangularizadas. Isso pode
244 ser de grande ajuda em problemas muito grandes onde substituição em expressões anteriores pode vir a causar
245 a geração de expressões extremamente largas.
249 @defvr {Variável} breakup
250 Valor por omissão: @code{true}
252 Quando @code{breakup} é @code{true}, @code{solve} expressa soluções
253 de equações cúbicas e quárticas em termos de subexpressões comuns,
254 que são atribuídas a rótulos de expressões intermédias (@code{%t1}, @code{%t2}, etc.).
255 De outra forma, subexpressões comuns não são identificadas.
257 @code{breakup: true} tem efeito somente quando @code{programmode} é @code{false}.
262 (%i1) programmode: false$
264 (%i3) solve (x^3 + x^2 - 1);
267 (%t3) (--------- + --)
274 (%t4) x = (- ---------- - -) %t3 + -------------- - -
280 (%t5) x = (---------- - -) %t3 + ---------------- - -
284 (%t6) x = %t3 + ----- - -
286 (%o6) [%t4, %t5, %t6]
287 (%i6) breakup: false$
288 (%i7) solve (x^3 + x^2 - 1);
294 (%t7) x = --------------------- + (--------- + --)
295 sqrt(23) 25 1/3 6 sqrt(3) 54
300 (- ---------- - -) - -
303 sqrt(23) 25 1/3 sqrt(3) %i 1
304 (%t8) x = (--------- + --) (---------- - -)
310 + --------------------- - -
316 (%t9) x = (--------- + --) + --------------------- - -
317 6 sqrt(3) 54 sqrt(23) 25 1/3 3
320 (%o9) [%t7, %t8, %t9]
325 @deffn {Função} dimension (@var{eqn})
326 @deffnx {Função} dimension (@var{eqn_1}, ..., @var{eqn_n})
327 @code{dimen} é um pacote de análise dimensional.
328 @code{load ("dimen")} chama esse pacote.
329 @code{demo ("dimen")} mostra uma cura demostração.
330 @c I GUESS THIS SHOULD BE EXPANDED TO COVER EACH FUNCTION IN THE PACKAGE
334 @defvr {Variável} dispflag
335 Valor por omissão: @code{true}
337 @c WHAT DOES THIS MEAN ??
338 Se escolhida para @code{false} dentro de um @code{block} inibirá
339 a visualização da saída gerada pelas funções solve chamadas de
340 dentro de @code{block}. Terminando @code{block} com um sinal de dolar, $, escolhe
341 @code{dispflag} para @code{false}.
345 @c THIS COULD BENEFIT FROM REPHRASING
346 @deffn {Função} funcsolve (@var{eqn}, @var{g}(@var{t}))
347 Retorna @code{[@var{g}(@var{t}) = ...]} ou @code{[]}, dependendo de existir
348 ou não uma função racional @code{@var{g}(@var{t})} satisfazendo @var{eqn},
349 que deve ser de primeira ordem, polinómio linear em (para esse caso)
350 @code{@var{g}(@var{t})} e @code{@var{g}(@var{t}+1)}
353 (%i1) eqn: (n + 1)*f(n) - (n + 3)*f(n + 1)/(n + 1) = (n - 1)/(n + 2);
354 (n + 3) f(n + 1) n - 1
355 (%o1) (n + 1) f(n) - ---------------- = -----
357 (%i2) funcsolve (eqn, f(n));
359 Equações dependentes eliminadas: (4 3)
361 (%o2) f(n) = ---------------
365 Atenção: essa é uma implementação muito rudimentar -- muitas verificações de segurança
366 e obviamente generalizações estão ausêntes.
370 @defvr {Variável} globalsolve
371 Valor por omissão: @code{false}
373 When @code{globalsolve} for @code{true},
374 variáveis para as quais as equações são resolvidas são atribuidas aos valores da solução encontrados por @code{linsolve},
375 e por @code{solve} quando resolvendo duas ou mais equações lineares.
376 Quando @code{globalsolve} for @code{false},
377 soluções encontradas por @code{linsolve} e por @code{solve} quando resolvendo duas ou mais equações lineares
378 são espressas como equações,
379 e as variáveis para as quais a equação foi resolvida não são atribuidas.
381 Quando resolvendo qualquer coisa outra que não duas equações lineares ou mais,
382 @code{solve} ignora @code{globalsolve}.
383 Outras funções que resolvem equações (e.g., @code{algsys}) sempre ignoram @code{globalsolve}.
388 (%i1) globalsolve: true$
389 (%i2) solve ([x + 3*y = 2, 2*x - y = 5], [x, y]);
408 (%i5) globalsolve: false$
410 (%i7) solve ([x + 3*y = 2, 2*x - y = 5], [x, y]);
429 @c THIS DESCRIPTION NEEDS WORK AND EXAMPLES
430 @c MERGE IN TEXT FROM share/integequations/inteqn.usg
431 @c AND EXAMPLES FROM .../intexs.mac
432 @deffn {Função} ieqn (@var{ie}, @var{unk}, @var{tech}, @var{n}, @var{guess})
433 @code{inteqn} é um pacote para resolver equações integrais.
434 @code{load ("inteqn")} carrega esse pacote.
436 @var{ie} é a equação integral; @var{unk} é a função desconhecida; @var{tech} é a
437 técnica a ser tentada nesses dados acima (@var{tech} = @code{first} significa: tente
438 a primeira técnica que achar uma solução; @var{tech} = @code{all} significa: tente todas a
439 técnicas aplicáveis); @var{n} é o número máximo de termos a serem usados de
440 @code{taylor}, @code{neumann}, @code{firstkindseries}, ou @code{fredseries} (isso é também o
441 número máximo de ciclos de recurssão para o método de diferenciação); @var{guess} é
442 o inicial suposto para @code{neumann} ou @code{firstkindseries}.
444 Valores padrão do segundo até o quinto parâmetro são:
446 @var{unk}: @code{@var{p}(@var{x})}, onde @var{p} é a primeira função encontrada em um integrando
447 que é desconhecida para Maxima e @var{x} é a variável que ocorre como um
448 argumento para a primeira ocorrência de @var{p} achada fora de uma integral no
449 caso de equações @code{secondkind} , ou é somente outra variável
450 ao lado da variável de integração em equações @code{firstkind}. Se uma
451 tentativa de procurar por @var{x} falha, o utilizador será perguntado para suprir a
452 variável independente.
458 guess: @code{none} o que fará com que @code{neumann} e @code{firstkindseries} use
459 @code{@var{f}(@var{x})} como uma suposição inicial.
463 @defvr {Variável de opção} ieqnprint
464 Valor por omissão: @code{true}
466 @code{ieqnprint} governa o comportamento do resultado
467 retornado pelo comando @code{ieqn}. Quando @code{ieqnprint} é
468 @code{false}, as listas retornadas pela função @code{ieqn} são da forma
470 [@var{solução}, @var{tecnica usada}, @var{nterms}, @var{sinalizador}]
472 onde @var{sinalizador} é retirado se a solução for exacta.
474 De outra forma, isso é a
475 palavra @code{approximate} ou @code{incomplete} correspondendo à forma inexacta ou
476 forma aberta de solução, respectivamente. Se um método de série foi usado,
477 @var{nterms} fornece o número de termos usados (que poderá ser menor que os n
478 dados para @code{ieqn} se ocorrer um erro evita a geração de termos adicionais).
482 @deffn {Função} lhs (@var{expr})
483 Retorna o lado esquerdo (isto é, o primeiro argumento)
484 da expressão @var{expr},
485 quando o operador de @var{expr}
486 for um dos operadores relacionais @code{< <= = # equal notequal >= >},
487 @c MENTION -> (MARROW) IN THIS LIST IF/WHEN THE PARSER RECOGNIZES IT
488 um dos operadores de atribuição @code{:= ::= : ::},
489 ou um operadro infixo definido pelo utilizador, como declarado por meio de @code{infix}.
491 Quando @var{expr} for um átomo ou
492 seu operador for alguma coisa que não esses listados acima,
493 @code{lhs} retorna @var{expr}.
495 Veja também @code{rhs}.
503 @c [lhs (aa < bb), lhs (aa <= bb), lhs (aa >= bb), lhs (aa > bb)];
504 @c [lhs (aa = bb), lhs (aa # bb), lhs (equal (aa, bb)), lhs (notequal (aa, bb))];
505 @c e1: '(foo(x) := 2*x);
506 @c e2: '(bar(y) ::= 3*y);
509 @c [lhs (e1), lhs (e2), lhs (e3), lhs (e4)];
514 (%i1) e: aa + bb = cc;
520 (%i4) [lhs (aa < bb), lhs (aa <= bb), lhs (aa >= bb), lhs (aa > bb)];
521 (%o4) [aa, aa, aa, aa]
522 (%i5) [lhs (aa = bb), lhs (aa # bb), lhs (equal (aa, bb)), lhs (notequal (aa, bb))];
523 (%o5) [aa, aa, aa, aa]
524 (%i6) e1: '(foo(x) := 2*x);
526 (%i7) e2: '(bar(y) ::= 3*y);
532 (%i10) [lhs (e1), lhs (e2), lhs (e3), lhs (e4)];
533 (%o10) [foo(x), bar(y), x, x]
536 (%i12) lhs (aa ][ bb);
542 @c REVISIT -- THERE'S PROBABLY MORE TO SAY HERE
543 @deffn {Função} linsolve ([@var{expr_1}, ..., @var{expr_m}], [@var{x_1}, ..., @var{x_n}])
545 equações lineares simultâneas para a lista de variáveis. As expressões
546 devem ser cada uma polinómios nas variáveis e podem ser equações.
548 Quando @code{globalsolve} é @code{true} então variáveis que foram resolvidas
549 serão escolhidas para a solução do conjunto de equações simultâneas.
551 Quando @code{backsubst} é @code{false}, @code{linsolve}
552 não realiza substituição em equações anteriores após
553 as equações terem sido triangularizadas. Isso pode ser necessário em problemas
554 muito grandes onde substituição em equações anteriores poderá causar a geração de
555 expressões extremamente largas.
557 Quando @code{linsolve_params} for @code{true},
558 @code{linsolve} também gera símbolos @code{%r}
559 usados para representar parâmetros arbitrários descritos no manual sob
561 De outra forma, @code{linsolve} resolve um menor-determinado sistema de
562 equações com algumas variáveis expressas em termos de outras.
564 Quando @code{programmode} for @code{false},
565 @code{linsolve} mostra a solução com expressões intermédias com rótulos (@code{%t}),
566 e retorna a lista de rótulos.
570 @c e2: 2*a*x - y = 2*a^2;
572 @c [globalsolve: false, programmode: true];
573 @c linsolve ([e1, e2, e3], [x, y, z]);
574 @c [globalsolve: false, programmode: false];
575 @c linsolve ([e1, e2, e3], [x, y, z]);
577 @c [globalsolve: true, programmode: false];
578 @c linsolve ([e1, e2, e3], [x, y, z]);
581 @c [globalsolve: true, programmode: true];
582 @c linsolve ([e1, e2, e3], '[x, y, z]);
588 (%i2) e2: 2*a*x - y = 2*a^2;
590 (%o2) 2 a x - y = 2 a
591 (%i3) e3: y - 2*z = 2;
593 (%i4) [globalsolve: false, programmode: true];
595 (%i5) linsolve ([e1, e2, e3], [x, y, z]);
596 (%o5) [x = a + 1, y = 2 a, z = a - 1]
597 (%i6) [globalsolve: false, programmode: false];
599 (%i7) linsolve ([e1, e2, e3], [x, y, z]);
607 (%o9) [%t7, %t8, %t9]
609 (%o9) [z = a - 1, y = 2 a, x = a + 1]
610 (%i10) [globalsolve: true, programmode: false];
612 (%i11) linsolve ([e1, e2, e3], [x, y, z]);
620 (%o13) [%t11, %t12, %t13]
622 (%o13) [z : a - 1, y : 2 a, x : a + 1]
624 (%o14) [a + 1, 2 a, a - 1]
625 (%i15) [globalsolve: true, programmode: true];
627 (%i16) linsolve ([e1, e2, e3], '[x, y, z]);
628 (%o16) [x : a + 1, y : 2 a, z : a - 1]
630 (%o17) [a + 1, 2 a, a - 1]
635 @c DO ANY FUNCTIONS OTHER THAN linsolve RESPECT linsolvewarn ??
636 @defvr {Variável} linsolvewarn
637 Valor por omissão: @code{true}
639 Quando @code{linsolvewarn} é @code{true},
640 @code{linsolve} imprime uma mensagem "Dependent equações eliminated".
644 @defvr {Variável} linsolve_params
645 Valor por omissão: @code{true}
647 Quando @code{linsolve_params} é @code{true}, @code{linsolve} também gera
648 os símbolos @code{%r} usados para representar parâmetros arbitrários descritos no
649 manual sob @code{algsys}.
650 De outra forma, @code{linsolve} resolve um menor-determinado sistema de
651 equações com algumas variáveis expressas em termos e outras.
655 @defvr {Variável} multiplicities
656 Valor por omissão: @code{not_set_yet}
658 @code{multiplicities} é escolhida para uma lista de
659 multiplicidades das soluções individuais retornadas por @code{solve} ou
661 @c NEED AN EXAMPLE HERE
665 @deffn {Função} nroots (@var{p}, @var{low}, @var{high})
666 Retorna o número de raízes reais do polinómio
667 real de uma única variável @var{p} no intervalo semi-aberto
668 @code{(@var{low}, @var{high}]}.
669 Uma extremidade do intervalo podem ser @code{minf} ou @code{inf}.
670 infinito e mais infinito.
672 @code{nroots} usa o método das sequuências de Sturm.
675 (%i1) p: x^10 - 2*x^4 + 1/2$
676 (%i2) nroots (p, -6, 9.1);
683 @deffn {Função} nthroot (@var{p}, @var{n})
684 Onde p é um polinómio com coeficientes inteiros e
685 n é um inteiro positivo retorna q, um polinómio sobre os inteiros, tal
686 que q^n=p ou imprime uma mensagem de erro indicando que p não é uma potência n-ésima
687 perfeita. Essa rotina é mais rápida que @code{factor} ou mesmo @code{sqfr}.
691 @defvr {Variável} programmode
692 Valor por omissão: @code{true}
694 Quando @code{programmode} é @code{true},
695 @code{solve}, @code{realroots}, @code{allroots}, e @code{linsolve}
696 retornam soluções como elementos em uma lista.
697 @c WHAT DOES BACKSUBSTITUTION HAVE TO DO WITH RETURN VALUES ??
698 (Exceto quando @code{backsubst} é escolhido para @code{false}, nesse caso
699 @code{programmode: false} é assumido.)
701 Quando @code{programmode} é @code{false}, @code{solve}, etc.
702 cria rótulos de expressões intermédias
703 @code{%t1}, @code{t2}, etc., e atribui as soluções para eles.
704 @c NEED AN EXAMPLE HERE
708 @defvr {Variável} realonly
709 Valor por omissão: @code{false}
711 Quando @code{realonly} é @code{true}, @code{algsys} retorna somente
712 aquelas soluções que estão livres de @code{%i}.
716 @deffn {Função} realroots (@var{expr}, @var{bound})
717 @deffnx {Função} realroots (@var{eqn}, @var{bound})
718 @deffnx {Função} realroots (@var{expr})
719 @deffnx {Função} realroots (@var{eqn})
720 Calcula aproximações racionais das raízes reais da expressão polinomial @var{expr}
721 ou da equação polinomial @var{eqn} de uma variável,
722 dentro de uma tolerância de @var{bound}.
723 coeficientes de @var{expr} ou de @var{eqn} devem ser números literais;
724 constantes símbolo tais como @code{%pi} são rejeitadas.
726 @code{realroots} atribui as multiplicidades das raízes que encontrar
727 para a variável global @code{multiplicities}.
729 @code{realroots} constrói uma sequência de Sturm para delimitar cada raíz,
730 e então palica a bisecção para redefinir as aproximações.
731 Todos os coeficientes são convertidos para os equivalentes racionais antes da busca por raízes,
732 e cálculos são realizados por meio de aritmética racional exacta.
733 Mesmo se alguns coeficientes forem números em ponto flutuante,
734 os resultados são racionais (a menos que forçados a números em ponto flutuante por @code{float} ou por @code{numer} flags).
736 Quando @var{bound} for menor que 1, todas as raízes inteiras são encontradas exactamente.
737 Quando @var{bound} não for especificado, será assumido como sendo igual à variável globa @code{rootsepsilon}.
739 Quando a varável global @code{programmode} for @code{true},
740 @code{realroots} retorna uma lista da forma @code{[x = @var{x_1}, x = @var{x_2}, ...]}.
741 Quando @code{programmode} for @code{false},
742 @code{realroots} cria rótulos de expressões intermédias @code{%t1}, @code{%t2}, ...,
743 atribui os resultados a eles, e retorna a lista de rótulos.
747 @c realroots (-1 - x + x^5, 5e-6);
749 @c ev (-1 - x + x^5, %);
753 (%i1) realroots (-1 - x + x^5, 5e-6);
757 (%i2) ev (%[1], float);
758 (%o2) x = 1.167303085327148
759 (%i3) ev (-1 - x + x^5, %);
760 (%o3) - 7.396496210176905E-6
764 @c realroots (expand ((1 - x)^5 * (2 - x)^3 * (3 - x)), 1e-20);
769 (%i1) realroots (expand ((1 - x)^5 * (2 - x)^3 * (3 - x)), 1e-20);
770 (%o1) [x = 1, x = 2, x = 3]
771 (%i2) multiplicities;
777 @deffn {Função} rhs (@var{expr})
778 Retorna o lado direito (isto é, o segundo argumento)
779 da expressão @var{expr},
780 quando o operador de @var{expr}
781 for um dos operadores relacionais @code{< <= = # equal notequal >= >},
782 @c MENTION -> (MARROW) IN THIS LIST IF/WHEN THE PARSER RECOGNIZES IT
783 um dos operadores de atribuição @code{:= ::= : ::},
784 ou um operador binário infixo definido pelo utilizador, como declarado por meio de @code{infix}.
786 Quando @var{expr} for um étomo ou
787 seu operadro for alguma coisa que não esses listados acima,
788 @code{rhs} retorna 0.
790 Veja também @code{lhs}.
798 @c [rhs (aa < bb), rhs (aa <= bb), rhs (aa >= bb), rhs (aa > bb)];
799 @c [rhs (aa = bb), rhs (aa # bb), rhs (equal (aa, bb)), rhs (notequal (aa, bb))];
800 @c e1: '(foo(x) := 2*x);
801 @c e2: '(bar(y) ::= 3*y);
804 @c [rhs (e1), rhs (e2), rhs (e3), rhs (e4)];
809 (%i1) e: aa + bb = cc;
815 (%i4) [rhs (aa < bb), rhs (aa <= bb), rhs (aa >= bb), rhs (aa > bb)];
816 (%o4) [bb, bb, bb, bb]
817 (%i5) [rhs (aa = bb), rhs (aa # bb), rhs (equal (aa, bb)), rhs (notequal (aa, bb))];
818 (%o5) [bb, bb, bb, bb]
819 (%i6) e1: '(foo(x) := 2*x);
821 (%i7) e2: '(bar(y) ::= 3*y);
827 (%i10) [rhs (e1), rhs (e2), rhs (e3), rhs (e4)];
828 (%o10) [2 x, 3 y, y, y]
831 (%i12) rhs (aa ][ bb);
837 @defvr {Variável de opção} rootsconmode
838 Valor por omissão: @code{true}
840 @code{rootsconmode} governa o comportamento do comando
841 @code{rootscontract}. Veja @code{rootscontract} para detalhes.
846 @deffn {Função} rootscontract (@var{expr})
847 Converte produtos de raízes em raízes de produtos.
849 @code{rootscontract (sqrt(x)*y^(3/2))} retorna @code{sqrt(x*y^3)}.
851 Quando @code{radexpand} é @code{true} e @code{domain} é @code{real},
852 @code{rootscontract} converte @code{abs} em @code{sqrt}, e.g.,
853 @code{rootscontract (abs(x)*sqrt(y))} retorna @code{sqrt(x^2*y)}.
855 Existe uma opção @code{rootsconmode}
856 afectando @code{rootscontract} como segue:
859 Problem Value of Result of applying
860 rootsconmode rootscontract
862 x^(1/2)*y^(3/2) false (x*y^3)^(1/2)
863 x^(1/2)*y^(1/4) false x^(1/2)*y^(1/4)
864 x^(1/2)*y^(1/4) true (x*y^(1/2))^(1/2)
865 x^(1/2)*y^(1/3) true x^(1/2)*y^(1/3)
866 x^(1/2)*y^(1/4) all (x^2*y)^(1/4)
867 x^(1/2)*y^(1/3) all (x^3*y^2)^(1/6)
870 Quando @code{rootsconmode} é @code{false}, @code{rootscontract} contrai somente como relação a expoentes
871 de número racional cujos denominadores são os mesmos. A chave para os exemplos
872 @code{rootsconmode: true} é simplesmente que 2 divides 4 mas não
873 divide 3. @code{rootsconmode: all} envolve pegar o menor múltiplo comum
874 dos denominadores dos expoentes.
876 @code{rootscontract} usa @code{ratsimp} em uma maneira similar a @code{logcontract}.
879 @c FOLLOWING ADAPTED FROM example (rootscontract)
880 @c rootsconmode: false$
881 @c rootscontract (x^(1/2)*y^(3/2));
882 @c rootscontract (x^(1/2)*y^(1/4));
883 @c rootsconmode: true$
884 @c rootscontract (x^(1/2)*y^(1/4));
885 @c rootscontract (x^(1/2)*y^(1/3));
886 @c rootsconmode: all$
887 @c rootscontract (x^(1/2)*y^(1/4));
888 @c rootscontract (x^(1/2)*y^(1/3));
889 @c rootsconmode: false$
890 @c rootscontract (sqrt(sqrt(x) + sqrt(1 + x))
891 @c *sqrt(sqrt(1 + x) - sqrt(x)));
892 @c rootsconmode: true$
893 @c rootscontract (sqrt(5 + sqrt(5)) - 5^(1/4)*sqrt(1 + sqrt(5)));
896 (%i1) rootsconmode: false$
897 (%i2) rootscontract (x^(1/2)*y^(3/2));
900 (%i3) rootscontract (x^(1/2)*y^(1/4));
903 (%i4) rootsconmode: true$
904 (%i5) rootscontract (x^(1/2)*y^(1/4));
905 (%o5) sqrt(x sqrt(y))
906 (%i6) rootscontract (x^(1/2)*y^(1/3));
909 (%i7) rootsconmode: all$
910 (%i8) rootscontract (x^(1/2)*y^(1/4));
913 (%i9) rootscontract (x^(1/2)*y^(1/3));
916 (%i10) rootsconmode: false$
917 (%i11) rootscontract (sqrt(sqrt(x) + sqrt(1 + x))
918 *sqrt(sqrt(1 + x) - sqrt(x)));
920 (%i12) rootsconmode: true$
921 (%i13) rootscontract (sqrt(5 + sqrt(5)) - 5^(1/4)*sqrt(1 + sqrt(5)));
927 @defvr {Variável de opção} rootsepsilon
928 Valor por omissão: 1.0e-7
930 @code{rootsepsilon} é a tolerância que estabelece o
931 intervalo de conficência para as raízes achadas pela função @code{realroots}.
932 @c IS IT GUARANTEED THAT |ACTUAL - ESTIMATE| < rootepsilon OR IS IT SOME OTHER NOTION ??
938 @deffn {Função} solve (@var{expr}, @var{x})
939 @deffnx {Função} solve (@var{expr})
940 @deffnx {Função} solve ([@var{eqn_1}, ..., @var{eqn_n}], [@var{x_1}, ..., @var{x_n}])
941 Resolve a equação algébrica @var{expr} para a variável
942 @var{x} e retorna uma lista de equações solução em @var{x}. Se @var{expr} não é uma
943 equação, a equação @code{@var{expr} = 0} é assumida em seu lugar.
944 @var{x} pode ser uma função (e.g. @code{f(x)}), ou outra expressão não at@^omica
945 excepto uma adição ou um produto. @var{x} pode ser omitido se @var{expr} contém somente uma
946 variável. @var{expr} pode ser uma expressão racional, e pode conter
947 funções trigonométricas, exponenciais, etc.
949 O seguinte método é usado:
951 Tome @var{E} sendo a expressão e @var{X} sendo a variável. Se @var{E} é linear em @var{X}
952 então isso é trivialmente resolvido para @var{X}. De outra forma se @var{E} é da forma
953 @code{A*X^N + B} então o resultado é @code{(-B/A)^1/N)} vezes as @code{N}'ésimas raízes da
956 Se @var{E} não é linear em @var{X} então o máximo divisor comum (mdc) dos expoentes de @var{X} em @var{E} (digamos
957 @var{N}) é dividido dentro dos expoentes e a multiplicidade das raízes é
958 multiplicada por @var{N}. Então @code{solve} é chamada novamente sobre o resultado.
959 Se @var{E} for dada em factores então @code{solve} é chamada sobre cada um dos factores. Finalmente
960 @code{solve} usará as fórmulas quadráticas, cúbicas, ou quárticas onde
963 No caso onde @var{E} for um polinómio em alguma função de variável a ser
964 resolvida, digamos @code{F(X)}, então isso é primeiro resolvida para @code{F(X)} (chama o
965 resultado @var{C}), então a equação @code{F(X)=C} pode ser resolvida para @var{X} fornecendo o
966 inverso da função @var{F} que é conhecida.
968 @code{breakup} se @code{false} fará com que @code{solve} expresse as soluções de
969 equações cúbicas ou quárticas como expressões simples ao invés de como feito
970 em cima de várias subexpressões comuns que é o padrão.
972 @code{multiplicities} - será escolhido para uma lista de multiplicidades de
973 soluções individuais retornadas por @code{solve}, @code{realroots}, ou @code{allroots}.
974 Tente @code{apropos (solve)} para os comutadores que afectam @code{solve}. @code{describe} pode
975 então ser usada sobre o nome do comutador individual se seu proprósito não é
978 @code{solve ([@var{eqn_1}, ..., @var{eqn_n}], [@var{x_1}, ..., @var{x_n}])}
979 resolve um sistema de equações polinomiais
980 (lineares ou não-lineares) simultâneas por chamada a @code{linsolve} ou
981 @code{algsys} e retorna uma lista de listas solução nas variáveis. No
982 caso de @code{linsolve} essa lista conterá uma lista simples de
983 soluções. Isso pega duas listas como argumentos. A primeira lista
984 representa as equações a serem resolvidas; a segunda lista é a
985 lista de desconhecidos a ser determinada. Se o número total de
986 variáveis nas equações é igual ao número de equações, a
987 segunda lista-argumento pode ser omitida. Para sistemas lineares se as dadas
988 equações não são compatíveis, a mensagem @code{inconsistent} será
989 mostrada (veja o comutador @code{solve_inconsistent_error} ); se não existe
990 solução única, então @code{singular} será mostrado.
993 @c FOLLOWING ADAPTED FROM example (solve)
994 @c solve (asin (cos (3*x))*(f(x) - 1), x);
995 @c ev (solve (5^f(x) = 125, f(x)), solveradcan);
996 @c [4*x^2 - y^2 = 12, x*y - x = 2];
997 @c solve (%, [x, y]);
998 @c solve (1 + a*x + x^3, x);
1001 @c ev (x^6 - 1, %[1]);
1005 @c ev (%th(2), %[1]);
1008 (%i1) solve (asin (cos (3*x))*(f(x) - 1), x);
1010 SOLVE is using arc-trig functions to get a solution.
1011 Some soluções will be lost.
1013 (%o1) [x = ---, f(x) = 1]
1015 (%i2) ev (solve (5^f(x) = 125, f(x)), solveradcan);
1017 (%o2) [f(x) = --------]
1019 (%i3) [4*x^2 - y^2 = 12, x*y - x = 2];
1021 (%o3) [4 x - y = 12, x y - x = 2]
1022 (%i4) solve (%, [x, y]);
1023 (%o4) [[x = 2, y = 2], [x = .5202594388652008 %i
1025 - .1331240357358706, y = .0767837852378778
1027 - 3.608003221870287 %i], [x = - .5202594388652008 %i
1029 - .1331240357358706, y = 3.608003221870287 %i
1031 + .0767837852378778], [x = - 1.733751846381093,
1033 y = - .1535675710019696]]
1034 (%i5) solve (1 + a*x + x^3, x);
1036 sqrt(3) %i 1 sqrt(4 a + 27) 1 1/3
1037 (%o5) [x = (- ---------- - -) (--------------- - -)
1043 - --------------------------, x =
1045 sqrt(4 a + 27) 1 1/3
1046 3 (--------------- - -)
1050 sqrt(3) %i 1 sqrt(4 a + 27) 1 1/3
1051 (---------- - -) (--------------- - -)
1055 (- ---------- - -) a
1057 - --------------------------, x =
1059 sqrt(4 a + 27) 1 1/3
1060 3 (--------------- - -)
1064 sqrt(4 a + 27) 1 1/3 a
1065 (--------------- - -) - --------------------------]
1067 sqrt(4 a + 27) 1 1/3
1068 3 (--------------- - -)
1070 (%i6) solve (x^3 - 1);
1071 sqrt(3) %i - 1 sqrt(3) %i + 1
1072 (%o6) [x = --------------, x = - --------------, x = 1]
1074 (%i7) solve (x^6 - 1);
1075 sqrt(3) %i + 1 sqrt(3) %i - 1
1076 (%o7) [x = --------------, x = --------------, x = - 1,
1079 sqrt(3) %i + 1 sqrt(3) %i - 1
1080 x = - --------------, x = - --------------, x = 1]
1082 (%i8) ev (x^6 - 1, %[1]);
1085 (%o8) ----------------- - 1
1092 (%i11) solve (%, x);
1093 (%o11) [x = - 1, x = 1]
1094 (%i12) ev (%th(2), %[1]);
1100 @defvr {Variável de opção} solvedecomposes
1101 Valor por omissão: @code{true}
1103 Quando @code{solvedecomposes} é @code{true}, @code{solve} chama
1104 @code{polydecomp} se perguntado para resolver polinómios.
1105 @c OTHERWISE WHAT HAPPENS -- CAN'T SOLVE POLYNOMIALS, OR SOME OTHER METHOD IS USED ??
1109 @defvr {Variável de opção} solveexplicit
1110 Valor por omissão: @code{false}
1112 Quando @code{solveexplicit} é @code{true}, inibe @code{solve} de
1113 retornar soluções implícitas, isto é, soluções da forma @code{F(x) = 0}
1114 onde @code{F} é alguma função.
1115 @c NEED AN EXAMPLE HERE
1119 @defvr {Variável de opção} solvefactors
1120 Valor por omissão: @code{true}
1122 @c WHAT IS THIS ABOUT EXACTLY ??
1123 Quando @code{solvefactors} é @code{false}, @code{solve} não tenta
1124 factorizar a expressão. A escolha do @code{false} poderá ser útil
1125 em alguns casos onde a factorização não é
1127 @c NEED AN EXAMPLE HERE
1131 @defvr {Variável de opção} solvenullwarn
1132 Valor por omissão: @code{true}
1134 Quando @code{solvenullwarn} é @code{true},
1135 @code{solve} imprime uma mensagem de alerta se chamada com ou uma lista equação ou uma variável lista nula.
1136 Por exemplo, @code{solve ([], [])} imprimirá duas mensagens de alerta e retorna @code{[]}.
1140 @defvr {Variável de opção} solveradcan
1141 Valor por omissão: @code{false}
1143 Quando @code{solveradcan} é @code{true}, @code{solve} chama @code{radcan}
1144 que faz @code{solve} lento mas permitirá certamente que problemas
1145 contendo exponeniais e logaritmos sejam resolvidos.
1146 @c NEED AN EXAMPLE HERE
1150 @defvr {Variável de opção} solvetrigwarn
1151 Valor por omissão: @code{true}
1153 @c MAYBE THIS CAN BE CLARIFIED
1154 Quando @code{solvetrigwarn} é @code{true},
1155 @code{solve} pode imprimir uma mensagem dizendo que está usando funções
1156 trigonométricas inversas para resolver a equação, e desse modo perdendo
1158 @c NEED AN EXAMPLE HERE
1162 @defvr {Variável de opção} solve_inconsistent_error
1163 Valor por omissão: @code{true}
1165 Quando @code{solve_inconsistent_error} é
1166 @code{true}, @code{solve} e
1167 @code{linsolve} resultam em erro se as equações a serem resolvidas são inconsistentes.
1169 Se @code{false}, @code{solve} e @code{linsolve} retornam uma lista vazia @code{[]}
1170 se as equações forem inconsistentes.
1175 (%i1) solve_inconsistent_error: true$
1176 (%i2) solve ([a + b = 1, a + b = 2], [a, b]);
1177 Inconsistent equações: (2)
1178 -- an error. Quitting. To debug this try debugmode(true);
1179 (%i3) solve_inconsistent_error: false$
1180 (%i4) solve ([a + b = 1, a + b = 2], [a, b]);