program MapleSolveDemo;
uses
SysUtils, Classes, Process;
function RunMapleOnce(const Expr: string): string;
var
P: TProcess;
Output: TStringList;
BytesRead: LongInt;
Buffer: array[0..4095] of Byte;
TotalBytes: LongInt;
ExprWithQuit: string;
begin
P := TProcess.Create(nil);
Output := TStringList.Create;
try
P.Executable := 'c:\Program Files\Maple 2024\bin.X86_64_WINDOWS\cmaple.exe';
P.Parameters.Add('-q');
P.Options := [poUsePipes, poNoConsole];
ExprWithQuit := Expr + '; quit;';
P.Execute;
P.Input.Write(ExprWithQuit[1], Length(ExprWithQuit));
P.CloseInput;
TotalBytes := 0;
BytesRead := 0;
repeat
BytesRead := P.Output.Read(Buffer, SizeOf(Buffer));
if BytesRead > 0 then
begin
Inc(TotalBytes, BytesRead);
SetLength(Result, TotalBytes);
Move(Buffer, Result[TotalBytes - BytesRead + 1], BytesRead);
end;
until BytesRead = 0;
P.WaitOnExit;
finally
Output.Free;
P.Free;
end;
end;
function SolveQuadratic(a, b, c: Double): string;
var
cmd: string;
FmtSettings: TFormatSettings;
begin
FmtSettings := DefaultFormatSettings;
FmtSettings.DecimalSeparator := '.';
cmd := Format('solve(%.2f*x^2 + %.2f*x + %.2f = 0, x);', [a, b, c], FmtSettings);
Result := RunMapleOnce(cmd);
end;
function SymbolicOperation(const Operation: string): string;
begin
Result := RunMapleOnce(Operation + ';');
end;
procedure DemoSimplification;
begin
Writeln('Expression Simplification:');
Writeln('(x + 1)^3 = ', #13#10, SymbolicOperation('expand((x + 1)^3)'));
Writeln('(x^2 - 1)/(x - 1) = ', #13#10, SymbolicOperation('simplify((x^2 - 1)/(x - 1))'));
Writeln;
end;
procedure DemoDifferentiation;
begin
Writeln('Differentiation:');
Writeln('d/dx(sin(x)) = ', #13#10, SymbolicOperation('diff(sin(x), x)'));
Writeln('d/dx(x^3 + 2*x^2 + x) = ', #13#10, SymbolicOperation('diff(x^3 + 2*x^2 + x, x)'));
Writeln('d2/dx2(x^3 + 2*x^2 + x) = ', #13#10, SymbolicOperation('diff(x^3 + 2*x^2 + x, x, x)'));
Writeln;
end;
procedure DemoIntegration;
begin
Writeln('Integration:');
Writeln('integral of x dx = ', #13#10, SymbolicOperation('int(x, x)'));
Writeln('integral of x^2 + 2*x + 1 dx = ', #13#10, SymbolicOperation('int(x^2 + 2*x + 1, x)'));
Writeln('integral of sin(x) dx = ', #13#10, SymbolicOperation('int(sin(x), x)'));
Writeln;
end;
procedure DemoLimits;
begin
Writeln('Limits:');
Writeln('lim(x->0) sin(x)/x = ', #13#10, SymbolicOperation('limit(sin(x)/x, x=0)'));
Writeln('lim(x->infinity) 1/x = ', #13#10, SymbolicOperation('limit(1/x, x=infinity)'));
Writeln;
end;
procedure DemoEquationSolving;
begin
Writeln('Equation Solving:');
Writeln('solve(x^2 - 4 = 0, x) = ', #13#10, SymbolicOperation('solve(x^2 - 4 = 0, x)'));
Writeln('solve({x + y = 5, x - y = 1}, {x, y}) = ', #13#10,
SymbolicOperation('solve({x + y = 5, x - y = 1}, {x, y})'));
Writeln;
end;
procedure DemoTrigonometry;
begin
Writeln('Trigonometry:');
Writeln('sin(Pi/2) = ', #13#10, SymbolicOperation('sin(Pi/2)'));
Writeln('cos(0) = ', #13#10, SymbolicOperation('cos(0)'));
Writeln('simplify(sin(x)^2 + cos(x)^2) = ', #13#10,
SymbolicOperation('simplify(sin(x)^2 + cos(x)^2)'));
Writeln;
end;
begin
Writeln('Solving Quadratic Equation:');
Writeln('x^2 + 5x + 6 = 0');
Writeln('Result: ', #13#10, SolveQuadratic(1, 5, 6));
Writeln;
Writeln('Demonstration of Symbolic Operations in Maple');
Writeln('=============================================');
Writeln;
// Demonstrate various operations
DemoSimplification;
DemoDifferentiation;
DemoIntegration;
DemoLimits;
DemoEquationSolving;
DemoTrigonometry;
Writeln('Press Enter to exit...');
Readln;
end.