進一步完善之後的一元N次方程求導算法
阿新 • • 發佈:2019-02-04
array 輸出 導數 public 算法 ech pub urn [] * 一元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);
}
}
}
}
}
祝大家節日快樂。。。。。。。寫代碼就是過節。。。。
package com.system.Tools;
/**
* 這個類,實現對函數的求導算法
* 最大目標 實現對任意多元函數的偏導數和全導數的求導算法
* 最小目標 實現對一元N次函數的求導算法
*
* @author Administrator
*/
public class SystemMathTools {
/*
* 還不是很完善,需要進一步修改。。。
*
* by comsci 2019.2.4 經過進一步的修改,完善了一些,但是算符的替換仍然有點問題
*
* x*x+3*x+1
*
* DerivedFunction(原函數)
* 輸出 導數函數
* n*x*x+n*x+1 類似這種一元N次方程的導數,先計算出指數,在進行求導公式演算
*
* 1: 分割字符串,讀出子字符串
2: 讀入子字符串,統計變量X相乘的個數是幾個?統計出指數
* 3: 用指數乘以子字符串,然後刪除一個變量X,形成子串導數
* 4: 用新的子串導數替換原來的子串函數
*
*
*/
public static int counter(String string, String a) {
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次方程求導算法