首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算函数的偏导数

计算函数的偏导数
EN

Stack Overflow用户
提问于 2014-02-23 10:21:06
回答 3查看 6.7K关注 0票数 3

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

调用MATLAB (也许)是可能的吗?

程序没有任何互联网接入。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-23 11:46:19

您可以使用符号代数库(如javacalculus )。

代码语言:javascript
复制
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);
    }
}

样本输入和输出:

输入表达式: sin(a1) * 4 * a2 + (a1 + 1)^2 在以下方面作出区分: a1 结果: 42

票数 3
EN

Stack Overflow用户

发布于 2014-02-24 22:33:54

各位,如果你能告诉我更多的事情,我会非常感激:)我有函数(和上面一样),并且需要用相同的值来计算。但我不能把它当作CalcObject,然后用它来代替和评估它。

代码语言:javascript
复制
    CalcObject result = parsed.evaluate();

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

以及从第(.)款

代码语言:javascript
复制
    CalcSymbol symbol = new CalcSymbol(var);
    CalcDouble value = new CalcDouble(number);
    return CalcSUB.numericSubstitute(input, symbol, value);

在这里,我需要将CalcObeject传递给subst(...),然后我可以计算函数。但怎么做呢?从字符串到CalcObject

对于我的问题,还有其他的解决方案或功能吗?

编辑

我需要从以前的帖子中评估功能。我的问题是,怎么做,我能不能用汤姆的方法来做这件事。我有函数,变量,和它们的值。不需要区分功能,只需要对其进行评估。

下决心

也许不是最好的方法,但有效。我从(a1+a2+a3)*q中将函数设为a1+a2+a3,然后通过q将其区分开来。现在,我的导数,如果需要的话,我现在可以用汤姆的方法来计算。:)

不管怎样,谢谢。如果有些人有更好的方法,我就在这里。

票数 0
EN

Stack Overflow用户

发布于 2014-05-10 13:41:00

我有点晚了,但是。

如果我想告诉你关于MathParseKit的事。https://github.com/B3rn475/MathParseKit

它是一个C++库,可用于解析和解决函数。

在所有功能中,允许您通过变量派生函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21966992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档