进一步完善之后的一元N次方程求导算法

 

祝大家节日快乐。。。。。。。写代码就是过节。。。。

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);
                }

            }

        }


    }
}

猜你喜欢

转载自www.cnblogs.com/comsci/p/10351468.html