sol_sys():={
local y,x,list0,expr0,lsolx,y1,y2,sols,test1;
purge(x,y);
autosimplify(nop); autosimplify();
approx_mode(0); approx_mode();
DispG; ClrIO; printf("Solving a system of two equations"); printf("Solve the following system:
");
list0 := [ y = x^2, y = 2*x + 3 ]; printf(list0);
printf("substitute y = x² in y = 2x + 3:");
expr0 := subst(list0(2),list0(1)); printf(expr0);
printf("substract 2x + 3:");
expr0 := expr0-(2*x + 3); printf(expr0);
printf("simplify:");
expr0 := simplify(expr0); printf(expr0);
printf("factor:");
expr0 := factor(expr0); printf(expr0);
printf("zero factor theorem:");
lsolx := [ part(left(expr0),1)=0, part(left(expr0),2)=0 ]; printf(lsolx);
printf("First factor plus 3, second minus 1:");
lsolx := [lsolx(1)+3, lsolx(2)-1 ]; printf(eval(lsolx,1));
printf("simplify"); printf("x values:");
lsolx := simplify(lsolx); printf(lsolx);
printf("y values:"); printf("Replace x values in the system, firts equation");
y1 := subst(list0(1),lsolx(1)); printf(y1);
printf("Replace x values in the system, second equation");
y2 := subst(list0(1),lsolx(2)); printf(y2);
printf("Solutions shaped as a array");
sols:=[[lsolx(1),y1],[lsolx(2),y2]]; printf(sols);
printf("Checking results:"); printf("Replace x and y values in the system, firts equation");
test1 := subst(list0(1),[sols(1,1),sols(1,2)]); printf(test1);
printf("Evaluate:");
test1 := evalb(test1); printf(test1);
printf("Replace x and y values in the system, second equation");
test1 := subst(list0(1),[sols(2,1),sols(2,2)]); printf(test1);
printf("Evaluate:");
test1 := evalb(test1); printf(test1);
sols := solve([ y = x^2, y = 2*x + 3 ],[x,y]); printf("Solutions:"); printf(sols);
printf("Solutions shaped as a boolean expression:");
sols := list2exp(sols,[x,y]); printf(eval(sols,1));
printf("Graphing");
plot([x^2,2*x+3],x);
return("Done");
}:;