1. 程式人生 > >進一步完善之後的一元N次方程求導算法

進一步完善之後的一元N次方程求導算法

array 輸出 導數 public 算法 ech pub urn []

祝大家節日快樂。。。。。。。寫代碼就是過節。。。。

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

}

}


}
}

進一步完善之後的一元N次方程求導算法