进一步完善之后的一元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);
                }

}

}

}
}

原文地址:https://www.cnblogs.com/comsci/p/10351468.html

时间: 2024-11-05 21:42:51

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

一元N次方程的字符串形式导数输出

代码如下  .........网上给出的求导数的方法是数值方法,这个方法是字符串方法 public class SystemMathTools { /* *  还不是很完善,需要进一步修改...     *      *  x*x+3*x+1      *  一元N次方程组的导数,给出字符串变量的导数形式,用导数公式来生成导数     *     *  DerivedFunction(原函数)     *  输出 导数函数     *  n*x*x+n*x+1 类似这种一元N次方程的导数,先计算

1040: 方程求零点

1040: 方程求零点 时间限制: 1 Sec  内存限制: 128 MB提交: 276  解决: 108[提交][状态][讨论版] 题目描述 设函数f(x)是在区间[a,b]内的连续函数,且f(a)f(b)<0, 根据Role定理,f(x)在区间内必存在零点.已知f(x)=x3-x-1, 输入区间端点的值,令精确度为eps=10-5, 判断是否存在零点,如果存在,输出该零点的近似值,否则输出No zero point. 输入 输入包括若干行,表示该区间端点 输出 每行对应每个区间的计算结果,如

关于方程求根的解决方案

对于方程求根主要的思想主要采取迭代的思想,通过条件判断,循环执行直到满足条件以后直接跳出循环输出 下面以x-cos(x)=0:为例  采用do-while 循环,输出Root: #include "stdio.h"#include "math.h"#include "stdio.h"double fun(){ double x1=0,x0; do { x0=x1; x1=cos(x0); } while(fabs(x0-x1)>=1e-6)

方程求根——牛顿迭代法

这段代码实现了牛顿切线法.简化牛顿法和牛顿下山法这三种方程求解法,由于输出结果较长,只以牛顿下山法为例写一段例题 1.代码 %%牛顿迭代法 %%method为-1时为牛顿切线法,method为0时为简化牛顿法,method为1时为牛顿下山法 %%f是表达式f(x) = 0,X0是初值,epsilon是精度,interval是包含解的区间 function NM = Newton_method(f,X0,epsilon,interval,method) Y0 = subs(f,X0); %%作图

元素和结点的区别(待进一步完善)

1.区别介绍 Element是Node的扩展,所以也更实用一些. 例如,用Element可以方便的获得Node的属性getAttribute(String attrName),如果用Node,可以得到一个属性集,还要进一步检索才可得到想要的属性. 一个结点不一定是一个元素,而一个元素一定是一个结点.Element是Node的子集,XmlNode表示一个节点,包括XmlElement(元素)和XmlAttribute(属性)等.如: <Alarm lock="true"> /

第三次作业---四则运算的进一步完善

这次作业的要求是让对上次作业的四则运算进一步改善,不能在减法中出现负数,不能出现除不尽的情况. 就像这种情况,不知道怎么规定一个数值必须是正整数,所以我们就采用最笨的方法来做,定义一个f,其值为e,d的倍数. 而d做为除数,f做为被除数,所以无论如何f都是d的e倍,而我们定义的e的取值范围又为(1,10)之间的正整数,所以不管怎么随机,f都是d的正整数倍数,不会存在有余数的情况. using System;using System.Collections.Generic;using System

等价类测试——进一步完善的Web输入合法验证

问题描述: 在等价类测试——Web开发中对于用户名输入的合法性验证(http://www.cnblogs.com/iProg/p/4356599.html)的基础上进行的进一步拓展,增加两个输入框,使三个输入同时进行等价类判断,只有当三个输入全部有效时才可判定成功,若存在某个输入或者多个输入非法,则判定失败,为了完成该目标,测试用例要同时考虑到三个输入的情况. 等价类划分: 有效等价类 无效等价类 length:1-6 length: ..-0&&7-..     char:  a-z&a

一个简单线程池的实现---需进一步完善

1.定义一个任务结构体,和一个线程池结构体 struct task{ void *(*p)(void*);//需要实现的函数: void *arg;//函数所带的参数 struct task *next;};struct pthread_pool{ pthread_mutex_t mutex;//线程锁 pthread_cond_t cond;//条件变量 pthread_t *tids;//线程id int thread_nums;//需创建的线程的数量 struct task *head;任

SpriteKit可摧毁物理场景的进一步完善

例子举了一个早期DOS下的双人游戏,类似于百战天虫类型.不过有趣的是游戏中实现了可摧毁的物理场景,而且只用了很少的代码: 游戏实现起来十分巧妙和简单,利用了CoreGraphic中的clear混合模式,将香蕉炸弹以中心位置的纹理全部消除,从而实现"摧毁"效果. 游戏中为建筑物单独创建一个类,继承于SKSpriteNode,其中有一个currentImage用来存放当前楼体的纹理: class BuildingNode: SKSpriteNode { var currentImage:U