代码如下 。。。。。。。。。网上给出的求导数的方法是数值方法,这个方法是字符串方法
public class SystemMathTools {
/*
* 还不是很完善,需要进一步修改。。。
*
* 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+n*x-1";//一元二次方程组
System.out.println("原函数为:"+str);
String[] strArray = str.split("\\+|\\-");//分割为子串,以便分别求导
System.out.println(strArray[0].trim() + " x指数为:" + counter(strArray[0].trim(), "x"));
System.out.println(strArray[1].trim() + " x指数为:" + counter(strArray[1].trim(), "x"));
System.out.println(strArray[2].trim() + " x指数为:" + counter(strArray[2].trim(), "x"));
String str1 = counter(strArray[0].trim(), "x") + deleteString(strArray[0].trim(),"x");
String str2 = counter(strArray[1].trim(), "x") + deleteString(strArray[1].trim(),"x");
String str3 = deleteString(str1,"*");
System.out.println("子串导数为"+str3);
String str4 = deleteString(str2,"*");
System.out.println("子串导数为:"+str4);
System.out.println("导数为:"+str3+"+"+str4);
}
}
原文地址:https://www.cnblogs.com/comsci/p/10348137.html