祝大家节日快乐。。。。。。。写代码就是过节。。。。
package com.system.Tools;
/**
* 这个类,实现对函数的求导算法
* 最大目标 实现对任意多元函数的偏导数和全导数的求导算法
* 最小目标 实现对一元N次函数的求导算法
*
* @author Administrator
*/
public class SystemMathTools {
/*
* 还不是很完善,需要进一步修改。。。
*
* by comsci 2019.2.4 经过进一步的修改,完善了一些,但是算符的替换仍然有点问题
*
* x*x+3*x+1
* 一元N次方程组的导数,给出字符串变量的导数形式,用导数公式来生成导数
*
* DerivedFunction(原函数)
* 输出 导数函数
* n*x*x+n*x+1 类似这种一元N次方程的导数,先计算出指数,在进行求导公式演算
*
* 1: 分割字符串,读出子字符串
2: 读入子字符串,统计变量X相乘的个数是几个?统计出指数
* 3: 用指数乘以子字符串,然后删除一个变量X,形成子串导数
* 4: 用新的子串导数替换原来的子串函数
*
*
*/
public static int counter(String string, String a) {
int m;
int i = string.length() - string.replace(a, "").length();
m = i / a.length();
// System.out.println("x指数为:" + m);
return m;
}
public static String deleteString(String str1, String str2) {
StringBuffer sb = new StringBuffer(str1);
String str3;
int index = sb.indexOf(str2);
if (index == -1) {
}
str3 = sb.delete(index, index + str2.length()).toString();
return str3;
}
public static void main(String[] args) {
String str = "n*x*x*x+m*x*x-s*x+1";//一元三次方程
String str1 = "n*x*x+m*x-2";//一元二次方程
String str2 = "n*x*x*x*x+m*x*x*x-s*x*x+k*x+3";//一元四次方程
StringBuffer str4 = new StringBuffer();
System.out.println("原函数为:" + str2);
String[] strArray = str2.split("\\+|\\-");//分割为子串,以便分别求导
//如果字符串的子串有N个,那么需要增加一个FOR循环,完全读出所有的子串
for (int i = 0; i < strArray.length; i++) {
if (strArray[i].trim().indexOf("x") != -1) {
System.out.println(strArray[i].trim() + " x指数为:" + counter(strArray[i].trim(), "x"));
str4.append(counter(strArray[i].trim(), "x") + "*" + deleteString(strArray[i].trim(), "*x") + "+");
if (i == strArray.length - 2) {
str4.deleteCharAt(str4.length() - 1);
System.out.println("导数为:" + str4);
}
}
}
}
}
原文地址:https://www.cnblogs.com/comsci/p/10351468.html