#!/usr/bin/perl use strict; use warnings; use lib '../lib'; use Math::Symbolic qw/:all/; # A particle being thrown on the earth: my $energy = parse_from_string('E_pot(y) + E_kin(v)'); my $velocity = parse_from_string( '( total_derivative(x(t), t)^2 + total_derivative(y(t), t)^2 )^0.5'); my $x = parse_from_string('x_initial + v_x_initial * t'); my $y = parse_from_string('y_initial + v_y_initial * t - (g*t^2)/2'); $y->implement( g => parse_from_string('9.8') ); $velocity->implement( x => $x, y => $y ); $velocity = $velocity->apply_derivatives()->simplify(); $energy->implement( E_pot => parse_from_string('m * g * y(t)'), E_kin => parse_from_string('0.5 * m * v(t)^2') ); $energy->implement( g => parse_from_string('9.8'), v => $velocity, y => $y ); my $specific_velocity = $velocity->new(); $specific_velocity->implement( x_initial => Math::Symbolic::Constant->new(0), y_initial => Math::Symbolic::Constant->new(0), v_x_initial => Math::Symbolic::Constant->new(5), v_y_initial => Math::Symbolic::Constant->new(2), ); my ($sub) = Math::Symbolic::Compiler->compile_to_sub($specific_velocity); foreach my $time ( 1 .. 10 ) { print $sub->($time), "\n"; }