• 0

[PHP] Set a dynamic Equation as a function


Question

I'm not sure how to do this in php, but what I want to be able to do is have a user input an equation such as "x^2 + 2x -1" in a text box. Then I want to be able to store that as something like function f(), essentially f(x).

Then I want to be able to call something like f(1) and get it to process the function entered, which was stored as f(), using 1 as the x value.

Does anyone have an idea of how to do this?

5 answers to this question

Recommended Posts

  • 0

Doing such a thing directly in PHP would likely be impractical for the application. I would look into passing such an argument to an external program and having its results returned to the user via PHP.

Is "Octave" available on your system?

break the input string apart and put it into operators that you could rewrite into an octave script using various regular expressions and string functions. That looks almost exactly like what octave will take as input anyway. Then execute octave with the user parameter (i.e., f(1)) and return the outputted results to the user.

Actually, I want to see if this works now.

You may also find something useful over in the Math section of PEAR.

  • 0

Note you should do some additional checks to the input string but you can do something like that with this code:

<?php
session_start();
$equation = $_SESSION['equation'];

if( !empty( $_POST['submit'] ) ) {
	switch( $_POST['submit'] ) {
	case 'store equation':
		$equation = $_POST['equation'];
		// save equation
		$_SESSION['equation'] = $equation;
		break;
	case 'calculate f(x)':
		$x = $_POST['x'];
		$param = $x;
		$equation2 = str_replace( "x", "\$param", $equation ); // replace every instance of x to a parameter
		$result = eval( $equation2 );
		break;
	}
}
?>
<?php if( !empty( $result ) ) echo "<h2>" . $result . "</h2>"; ?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<?php if( $equation == "" ) { ?>
<input type="text" name="equation" value="">
<input type="submit" name="submit" value="store equation">
<?php } else { ?>
<h3><?php echo $equation; ?></h3>
<input type="text" value="x" value="<?php echo $x; ?>">
<input type="submit" name="submit" value="calculate f(x)">
<?php } ?>
</form>

test with 2 * x + ( 1 + x ) or with any equation

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Interesting. Seems to promote or invite more people to use whatsapp.
    • AI is going to destroy online as well as offline worlds.
    • QOwnNotes 25.8.0 by Razvan Serea QOwnNotes is a open source (GPL) plain-text file notepad with markdown support and todo list manager for GNU/Linux, Mac OS X and Windows, that (optionally) works together with the notes application of ownCloud (or Nextcloud). So you are able to write down your thoughts with QOwnNotes and edit or search for them later from your mobile device (like with CloudNotes) or the ownCloud web-service. The notes are stored as plain text files and you can sync them with your ownCloud sync client. Of course other software, like Dropbox, Syncthing, Seafile or BitTorrent Sync can be used too. Features: the notes folder can be freely chosen (multiple note folders can be used) sub-string searching of notes is possible and search results are highlighted in the notes application can be operated with customizable keyboard shortcuts external changes of note files are watched (notes or note list are reloaded) older versions of your notes can be restored from your ownCloud server trashed notes can be restored from your ownCloud server differences between current note and externally changed note are showed in a dialog markdown highlighting of notes and a markdown preview mode notes are getting their name from the first line of the note text (just like in the ownCloud notes web-application) and the note text files are automatically renamed, if the the first line changes compatible with the notes web-application of ownCloud and mobile ownCloud notes applications compatible with ownCloud's selective sync feature by supporting an unlimited amount of note folders with the ability to choose the respective folder on your server manage your ownCloud todo lists (ownCloud tasks or Tasks Plus / Calendar Plus) or use an other CalDAV server to sync your tasks to encryption of notes (AES-256 is built in or you can use custom encryption methods like Keybase.io (encryption-keybase.qml) or PGP (encryption-pgp.qml)) dark mode theme support theming support for the markdown syntax highlighting all panels can be placed wherever you want, they can even float or stack (fully dockable) support for freedesktop theme icons, you can use QOwnNotes with your native desktop icons and with your favorite dark desktop theme support for hierarchical note tagging and note subfolders support for sharing notes on your ownCloud server portable mode for carrying QOwnNotes around on USB sticks Evernote import QOwnNotes is available in many different languages like English, German, French, Polish, Chinese, Japanese, Russian, Portuguese, Hungarian, Dutch and Spanish QOwnNotes 25.8.0 changelog: More warning log messages were ignored for Qt 6.9.1 Download: QOwnNotes 25.8.0 | 71.4 MB (Open Source) Download: QOwnNotes for Other Operating Systems View: QOwnNotes Home Page | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • Patch My PC - Home Updater 5.3 Final is out.
    • 7-Zip developer is quite stubborn as he refuses to support Windows 11 right click context menu.
  • Recent Achievements

    • Collaborator
      bullgod69 earned a badge
      Collaborator
    • Enthusiast
      Ed B went up a rank
      Enthusiast
    • Reacting Well
      Xinotema earned a badge
      Reacting Well
    • Dedicated
      Edward266 earned a badge
      Dedicated
    • First Post
      Markvens earned a badge
      First Post
  • Popular Contributors

    1. 1
      +primortal
      760
    2. 2
      ATLien_0
      187
    3. 3
      +FloatingFatMan
      151
    4. 4
      Xenon
      118
    5. 5
      wakjak
      113
  • Tell a friend

    Love Neowin? Tell a friend!