gpt4 book ai didi

javascript - 如何获得数学函数的真实值

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:50:44 26 4
gpt4 key购买 nike

大家好,我有这段代码可以在数学中生成函数,但是这个函数的结果是错误的 o.O

x=0

"-3*X^2-16*X+2"

代码:

public static void main(String[] args) throws Exception {

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
engine.put("X", 0);

Object operation = engine.eval("-3*X^2-16*X+2");
//Object operation2 = engine.eval("(X+3)");

System.out.println("Evaluado operacion 1: " + operation);
//System.out.println("Evaluado operacion 2: " + operation2);

}

结果是 2 但我得到 4

Evaluado operacion 1: 4

我还有其他的代码

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package gustavo_santa;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.swing.JOptionPane;

/**
*
* @author osmarvirux
*/
public class SerieB {
//xi and x4
int xi;
int x4;
//f(x) function variables
String positive_negative;
int num_one;
int elevation_one;
String add_subtract_one;
int num_two;
int elevation_two;
String add_subtract_two;
int num_three;
//results
String xi_result;
String x4_result;

public SerieB(int xi, int x4, String positive_negative, int num_one, int elevation_one, String add_subtract_one, int num_two, int elevation_two, String add_subtract_two, int num_three) {
this.xi = xi;
this.x4 = x4;
this.positive_negative = positive_negative;
this.num_one = num_one;
this.elevation_one = elevation_one;
this.add_subtract_one = add_subtract_one;
this.num_two = num_two;
this.elevation_two = elevation_two;
this.add_subtract_two = add_subtract_two;
this.num_three = num_three;
}

public void Procedure_xi(){
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
if (positive_negative == "-"){

try {
xi_result=(num_one*(Math.pow(xi, elevation_one)))+add_subtract_one+(num_two*(Math.pow(xi, elevation_two)))
+add_subtract_two+num_three;
Object result = engine.eval(xi_result);
System.out.println(xi_result+" = "+result);
} catch(ScriptException se) {
se.printStackTrace();
}
}else{
try {
xi_result=((-num_one*(Math.pow(xi, elevation_one)))+add_subtract_one+(num_two*(Math.pow(xi, elevation_two)))
+add_subtract_two+num_three);
Object result = engine.eval(xi_result);
System.out.println(xi_result+" = "+result);
} catch(ScriptException se) {
se.printStackTrace();
}

}
}
public void Procedure_x4(){
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
if (positive_negative == "-"){

try {
x4_result=(num_one*(Math.pow(x4, elevation_one)))+add_subtract_one+(num_two*(Math.pow(x4, elevation_two)))
+add_subtract_two+num_three;
Object result = engine.eval(x4_result);
System.out.println(x4_result+" = "+result);
} catch(ScriptException se) {
se.printStackTrace();
}
}else{
try {
x4_result=((-num_one*(Math.pow(x4, elevation_one)))+add_subtract_one+(num_two*(Math.pow(x4, elevation_two)))
+add_subtract_two+num_three);
Object result = engine.eval(x4_result);
System.out.println(x4_result+" = "+result);
} catch(ScriptException se) {
se.printStackTrace();
}

}
}
public static void main(String[] args){
//-3x^2-16x+2
SerieB obj = new SerieB(0, 1, "+", -3, 2, "-", 16, 1, "+", 2);
obj.Procedure_xi();
obj.Procedure_x4();
}


}

此代码的结果是 2 但我想使用

ScriptEngineManager manager = new ScriptEngineManager();ScriptEngineManager manager = new ScriptEngineManager();

因为是一个库,我认为它更精确,我不想使用我的代码,因为有很多行而且我不知道是否 100% 有效。有人可以帮助我吗?或者给我一个解决这个数学函数的建议?非常感谢

最佳答案

您得到的结果是正确的。

之所以会产生混淆,是因为您假设的幂运算符 (^) 实际上是 bitwise XOR JavaScript 中的运算符(您正在使用 JavaScript 脚本引擎)。

因此,评估 0 ^ 2 会产生 2,而评估 Math.pow(0, 2) 会产生 0,因此有所不同。

要获得您期望的结果,表达式必须为:

-3*Math.pow(X,2)-16*X+2

您可以预处理表达式以调用 Math.pow() 来替换指数运算:

let X = 0;
let expression = "-3*X^2-16*X+2"
let processed = expression.replace(/(\w+)\^(\w+)/g, 'Math.pow($1,$2)');

console.log(processed); // prints "-3*Math.pow(X,2)-16*X+2"
console.log(eval(processed)); // prints "2"

使用脚本引擎,它看起来像:

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
engine.put("X", 0);
engine.put("expression", "-3*X^2-16*X+2");
engine.put("processed", engine.eval("expression.replace(/(\\w+)\\^(\\w+)/g, 'Math.pow($1,$2)')"));

System.out.println(engine.eval("eval(processed)")); // 2.0

或者,如果您更喜欢在 Java 中进行正则表达式替换:

String expression = "-3*X^2-16*X+2";
String processed = expression.replaceAll("(\\w+)\\^(\\w+)", "Math.pow($1,$2)");

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
engine.put("X", 0);

System.out.println(engine.eval(processed)); // 2.0

关于javascript - 如何获得数学函数的真实值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43383364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com