gpt4 book ai didi

java - 计算函数的偏导数

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:49:07 25 4
gpt4 key购买 nike

我需要计算用户指定函数的一阶导数。程序从文件中读取函数作为字符串,然后需要计算一个变量的导数。函数有更多的变量,可以是线性的也可以是非线性的。最简单的方法是什么?

可以调用 MATLAB(也许)吗?

程序没有任何互联网访问权限。

最佳答案

您可以使用符号代数库,例如 javacalculus .

import java.util.Scanner;
import javacalculus.core.CALC;
import javacalculus.core.CalcParser;
import javacalculus.evaluator.CalcSUB;
import javacalculus.struct.CalcDouble;
import javacalculus.struct.CalcObject;
import javacalculus.struct.CalcSymbol;

public class Demo
{
public static void main(String[] args) throws Exception
{
Scanner in = new Scanner(System.in);

System.out.println("Enter expression:");
String expression = in.nextLine();
// javacalculus uses uppercase function names
expression = expression.replace("sin", "SIN");
expression = expression.replace("cos", "COS");

System.out.println("Differentiate with respect to:");
String variable = in.nextLine();

// differentiate
String command = "DIFF(" + expression + ", " + variable + ")";
CalcParser parser = new CalcParser();
CalcObject parsed = parser.parse(command);
CalcObject result = parsed.evaluate();

// compute numerical value
result = subst(result, "a1", 0.0);
result = subst(result, "a2", 10.0);
result = CALC.SYM_EVAL(result);

System.out.println("Result:");
System.out.println(result);
}

static CalcObject subst(CalcObject input, String var, double number)
{
CalcSymbol symbol = new CalcSymbol(var);
CalcDouble value = new CalcDouble(number);
return CalcSUB.numericSubstitute(input, symbol, value);
}
}

示例输入和输出:

Enter expression:
sin(a1) * 4 * a2 + (a1 + 1)^2
Differentiate with respect to:
a1
Result:
42

关于java - 计算函数的偏导数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21966992/

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