回答上面的問題
maxima沒有直接轉換的指令,這是我用論壇的指令拼湊出來的
全形的[和]請自行替換成半形的[和]
[img]h ttp://www.permucode.com/maxima/wxm_ul.gif[/img]
[img]h ttp://www.permucode.com/maxima/wxm_uc.gif[/img]
[img]h ttp://www.permucode.com/maxima/wxm_ur.gif[/img]
[color=red](%i1)[/color] [color=blue]x^2-4xy+6y^2-2x-20y-29[/color]
[color=red](%o1)[/color]
6y^2-4xy-20y+x^2-2x-29
[img]h ttp://www.permucode.com/maxima/wxm_ll.gif[/img]
[img]h ttp://www.permucode.com/maxima/wxm_lc.gif[/img]
[img]h ttp://www.permucode.com/maxima/wxm_lr.gif[/img]
-------------------------
求
x^2-4xy+6y^2-2x-20y=29 的正整數解。
(91高中數學能力競賽 台中區複賽試題(二))
http://www.math.nuk.edu.tw/senpengeu/HighSchool/2003_Taiwan_High_Taichung_02.pdf


(%i1) x^2-4*x*y+6*y^2-2*x-20*y-29
(%o1) 6y^2-4xy-20y+x^2-2x-29
先整理成x的方程式
(%i2) collectterms(%o1,x);
(%o2) 6y^2-20y+x(-4y-2)+x^2-29
(%i3) a:coeff(%o1,x,2);b:coeff(%o1,x,1);c:coeff(%o1,x,0);
(%o3) 1
(%o4) -4y-2
(%o5) 6y^2-20y-29
求x的判別式
(%i6) b^2-4*a*c;
(%o6) (-4y-2)^2-4(6y^2-20y-29)
或者用poly_discriminant得判別式
(%i7) poly_discriminant(%o1,x);
(%o7) -8y^2+96y+120
(%i8) load("solve_rat_ineq.mac");
(%o8) C:/PROGRA~1/MAXIMA~1.2/share/maxima/5.19.2/share/contrib/solve_rat_ineq.mac
解出y的範圍
(%i9) solve_rat_ineq(%o6>=0);
(%o9) [ [y\ge 6-\sqrt{51},y\le \sqrt{51}+6] ]
(%i10) float(%[1]);
(%o10) [ y \ge -1.14142842854285,y \le 13.14142842854285 ]
(%i11)
solution:[]$
for valy:-1 thru 13 do /*y值從-1到13一個個檢驗*/
(fx:ev(%o1,y:valy), /*y代回原方程式*/
for x in solve(fx,x) do /*對x解方程式*/
(valx:rhs(x),
if numberp(valx)=true then/*若x是整數,就放到solution*/
solution:append(solution,[[valx,valy]])
)
)$
print(solution);
(%o13) [ [-3,-1],[1,-1],[21,5],[1,5],[25,7],[5,7],[25,13],[29,13] ]
(%i14) load(draw);
(%o14) C:/PROGRA~1/MAXIMA~1.2/share/maxima/5.19.2/share/draw/draw.lisp
將圓錐曲線和8個點畫出來
(%i15)
draw2d(xtics =1, /*x軸的間隔為1*/
ytics = 1, /*y軸的間隔為1*/
grid = true,/*顯示格線*/
/*畫出圓錐曲線*/
implicit(%o1=0,x,-5,31,y,-2,15),
point_type = 7,
point_size = 1,
points(solution)/*畫出整數點座標*/
)$


[
本帖最後由 bugmens 於 2013-4-24 05:10 PM 編輯 ]