Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 函数偏导数的计算_Java_Matlab_Math_Partial_Derivative - Fatal编程技术网

Java 函数偏导数的计算

Java 函数偏导数的计算,java,matlab,math,partial,derivative,Java,Matlab,Math,Partial,Derivative,我需要计算用户指定函数的一阶导数。程序从文件中以字符串形式读取函数,然后需要计算一个变量的导数。函数有更多的变量,可以是线性的,也可以是非线性的。 最简单的方法是什么 调用MATLAB(可能)是可能的吗 程序没有任何Internet访问。您可以使用符号代数库,如 输入和输出示例: 输入表达式: sin(a1)*4*a2+(a1+1)^2 区别于: a1 结果: 42 各位,如果你们能多告诉我一点,我将不胜感激:) 我有一个函数(和上面一样),需要用相同的值来计算它。 但我不能将它作为CalcOb

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

调用MATLAB(可能)是可能的吗


程序没有任何Internet访问。

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

输入和输出示例:

输入表达式:
sin(a1)*4*a2+(a1+1)^2

区别于:
a1

结果:
42


各位,如果你们能多告诉我一点,我将不胜感激:) 我有一个函数(和上面一样),需要用相同的值来计算它。 但我不能将它作为
CalcObject
进行比较,然后替换和评估它

    CalcObject result = parsed.evaluate();

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

在这里,我需要将
CalcObeject
传递到
subst(…)
,然后我可以计算函数。但如何做到这一点呢?从字符串到
CalcObject

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

编辑

我需要从以前的帖子中评估功能。我的问题是,如何做到这一点,我可以用汤姆的方法做到这一点。我有函数、变量和它们的值。不需要区分函数,只需要评估它

    CalcObject result = parsed.evaluate();

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

也许不是最好的方法,但它是有效的。我从
a1+a2+a3
生成函数a
(a1+a2+a3)*q
,然后通过
q
对其进行区分。现在,如果需要的话,我的导数函数,我现在可以用tom的方法来计算:)

谢谢你。
如果有更好的方法,我就在这里。

我有点晚了,但是

如果我想告诉你MathParseKit的事。

是一个C++库,可以用来解析和求解函数。


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

启动UI实现是您的问题吗?如果我理解您的意思,我可以将该函数理解为字符串,但不知道如何计算函数变量的偏导数。我对Apache有些了解,但不明白它到底是怎么回事……如何使用
^
“非线性”是非常不具体的。如果它涉及到标准分析函数以外的任何东西,那可能会使解决方案更难获得。可以指定的“最难”的函数是:(sin(a1)*sin(a2)*sin(a3)*sin(a4))/(sin(a1+a5)*sin sin(a2+a6)*sin sin(a3+a7)*sin sin(a4+a8)),(非线性),最简单的是a5+a6+a7+a8。(线性)它是一些网络最小二乘平滑的函数模型…非常感谢:)它现在可以工作:)但是,这是符号解。你知道我现在如何用我已经存储在数组中的值替换变量并获得导数的数值吗?@Aleksandar欢迎你。我更新了我的答案来计算数值。再次感谢:)我认为在Java中差分是不可能的,这是放弃tih项目的一步:)一般来说,您会使用自动响应。此任务的算法差异,正如上面针对“DIFF(expr,a1)”的解析器所做的那样,希望能够构建一个解析树并扩展它以用于派生操作。有关各种编程环境中的库、工具和论文,请参见()。它没有专门的sqrt函数,因此必须用POWER(x,0.5)替换sqrt(x)。有一个定义功能,也许你可以用这个内容定义一个用户函数SQRT。请重新表述,你的问题不清楚。要从字符串中获取CalcObject,必须使用解析器类CalcParser。在表达式
expression
上或在计算导数的扩展表达式
命令
上。@LutzL重新格式化(可能是…),然后直接在表达式“(a1+a2+a3)”上使用CalcParser,而不添加其他变量或DIFF指令。我将尝试。谢谢有用。
    CalcSymbol symbol = new CalcSymbol(var);
    CalcDouble value = new CalcDouble(number);
    return CalcSUB.numericSubstitute(input, symbol, value);