精华内容
下载资源
问答
  • java解方程

    千次阅读 2020-06-29 14:09:03
    一元多次方程求解 Java中可以使用common-math,python中可以使用sympy 依赖: import org.apache.commons.math.ConvergenceException; import org.apache.commons.math.FunctionEvaluationException; import org....

    一元多次方程求解

    Java中可以使用common-math,python中可以使用sympy

    依赖:

    import org.apache.commons.math.ConvergenceException;
    import org.apache.commons.math.FunctionEvaluationException;
    import org.apache.commons.math.analysis.UnivariateRealFunction;
    import org.apache.commons.math.analysis.polynomials.PolynomialFunction;
    import org.apache.commons.math.analysis.solvers.BisectionSolver;
    import org.apache.commons.math.analysis.solvers.UnivariateRealSolver;
    

    解一元多次方程X^3 + 2x^2 -x -42=0, 方程输入的参数依次是是常数项,一次系数,二次系数… , 求解器的求解范围是0~6,输出x=2.9999996423721313,非常接近预设值3。代码:

            double[] d=new double[]{-42.0,-1.0,2.0,1.0};
            UnivariateRealFunction f = new PolynomialFunction(d);
            UnivariateRealSolver solver = new BisectionSolver();
            try {
                System.out.println(solver.solve(f,0,6));
            } catch (ConvergenceException e) {
                e.printStackTrace();
            } catch (FunctionEvaluationException e) {
                e.printStackTrace();
            }
    

    多项式之间也可以进行计算,例如,下面定义一个和f一样的多项式,把他们相加:

            PolynomialFunction p = new PolynomialFunction(d);
            System.out.println(f.add(p));
    

    能够观察到,相加之后正好是两个d,输出:

    -84.0 - 2.0 x + 4.0 x^2 + 2.0 x^3
    

    其他方法,求度数,求导等:

            System.out.println(f.degree());
            System.out.println(f.derivative());
            System.out.println(f.polynomialDerivative());
    
    展开全文
  • Java解线性方程Java解线性方程组方法一:高斯消去法import java.util.Scanner;public class Gauss {/*** @列主元高斯消去法*/static double a[][];static double b[];static double x[];static int n;static int ...

    Java解线性方程组

    Java解线性方程组

    方法一:高斯消去法import java.util.Scanner;

    public class Gauss {

    /**

    * @列主元高斯消去法

    */

    static double a[][];

    static double b[];

    static double x[];

    static int n;

    static int n2; //记录换行的次数

    public static void Elimination(){ //消元

    for(int k=1;k<=n-1;k++)

    {

    Wrap(k);

    for(int i=k+1;i<=n;i++)

    {

    double l=a[i][k]/a[k][k];

    a[i][k]=0.0;

    for(int j=k+1;j<=n;j++)

    a[i][j]=a[i][j]-l*a[k][j];

    b[i]=b[i]-l*b[k];

    }

    System.out.println("第"+k+"次消元后:");

    PrintA();

    }

    }

    public static void Back()//回代

    {

    x[n]=b[n]/a[n][n];

    for(int i=n-1;i>=1;i--)

    x[i]=(b[i]-jisuan(i))/a[i][i];

    }

    public static double jisuan(int i){

    double he=0.0;

    for(int j=i+1;j<=n;j++)

    he=he+x[j]*a[i][j];

    return he;

    }

    public static void Wrap(int k){//换行

    double max=Math.abs(a[k][k]);

    int n1=k; //记住要交换的行

    for(int i=k+1;i<=n;i++) //找到要交换的行

    {

    if(Math.abs(a[i][k])>max){

    n1=i;

    max=Math.abs(a[i][k]);

    }

    }

    if(n1!=k)

    {

    n2++;

    System.out.println("当k="+k+"时,要交换的行是:"+k+"和"+n1);

    for(int j=k;j<=n;j++) //交换a的行

    {

    double x1;

    x1=a[k][j];

    a[k][j]=a[n1][j];

    a[n1][j]=x1;

    }

    double b1; //交换b的行

    b1=b[k];

    b[k]=b[n1];

    b[n1]=b1;

    System.out.println("交换后:");

    PrintA();

    }

    }

    public static void Determinant(){//求行列式

    double DM=1.0;

    for(int i=1;i<=n;i++)

    {

    double a2=a[i][i];

    DM=DM*a2;

    }

    double n3=(double)n2;

    DM=DM*Math.pow(-1.0, n3);

    System.out.println("该方程组的系数行列式:det A = "+DM);

    }

    public static void PrintA(){//输出增广矩阵

    System.out.println("增广矩阵为:");

    for(int i=1;i<=n;i++)

    {

    for(int j=1;j<=n;j++)

    System.out.print(a[i][j]+" ");

    System.out.print(b[i]+" ");

    System.out.print("\n");

    }

    }

    public static void Print(){//输出方程的根

    System.out.println("方程组的根为:");

    for(int i=1;i<

    展开全文
  • 该楼层疑似违规已被系统折叠隐藏此楼...import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;public class Test {public static void main(String...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    f3cedc61c0f4ad728ddd74732822a274.png

    以下是源码

    package jfc;

    import java.io.BufferedReader;

    import java.io.InputStreamReader;

    import java.util.ArrayList;

    import java.util.List;

    public class Test {

    public static void main(String[] args) throws Exception{

    List fcss = new ArrayList();

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    System.out.println("请以ax+b=c的形式输入方程,输入end表示结束!");

    String line = br.readLine();

    while(!"end".equals(line)) {

    fcss.add(FCS.analysis(line));

    System.out.println("请以ax+b=c的形式输入方程,输入end表示结束!");

    line = br.readLine();

    }

    for(FCS f:fcss) {

    System.out.println(f.getX()+":"+f.getR());

    }

    }}

    package jfc;

    public class FCS {

    //ax+b = c;

    private int a;

    private int b;

    private int c;

    private String r;

    private String x;

    public FCS(int a,int b,int c,String x,String r) {

    this.a = a;

    this.b = b;

    this.c = c;

    this.x = x;

    this.r = r;

    }

    public static FCS analysis(String line) {

    int a,b,c;

    String astr = null;

    line = line.replaceAll(" ", "");

    String[] lrs = line.split("=");

    c = Integer.parseInt(lrs[1]);

    String left = lrs[0];

    if(left.indexOf("+") > 0) {

    int index = left.indexOf("+");

    try {

    b = Integer.parseInt(left.substring(0,index));

    astr = left.substring(index+1);

    }catch(Exception e) {

    b = Integer.parseInt(left.substring(index+1));

    astr = left.substring(0,index);

    }

    }else if(left.indexOf("-") > 0){

    String[] nvs = left.split("-");

    try {

    b = Integer.parseInt(nvs[0]);

    astr = "-"+nvs[1];

    }catch(Exception e) {

    b = Integer.parseInt(nvs[1])*-1;

    astr = nvs[0];

    }

    }else {

    b = 0;

    astr = left;

    }

    a = Integer.parseInt(astr.substring(0,astr.length() -1));

    String x = astr.substring(astr.length() -1);

    int fm = c-b;

    String r = "";

    if(fm % a == 0) {

    r = fm/a + "";

    }else {

    boolean flag = false;

    if(a < 0 && fm > 0) {

    flag = true;

    a = a*-1;

    }

    if(fm < 0 && a > 0) {

    flag = true;

    fm = fm * -1;

    }

    int max = fm > a ? fm:a;

    int min = fm < a ? fm:a;

    int index = min/2;

    int maxgy = 1;

    for(int i=index;i>1;i--) {

    if(min % i == 0 && max % i == 0) {

    maxgy = i;

    break;

    }

    }

    r = (fm/maxgy)+"/" + (a/maxgy);

    if(flag) {

    r = "-"+r;

    }

    }

    return new FCS(a,b,c,x,r);

    }

    public int getA() {

    return a;

    } public void setA(int a) {

    this.a = a;

    } public int getB() {

    return b;

    } public void setB(int b) {

    this.b = b;

    } public int getC() {

    return c;

    } public void setC(int c) {

    this.c = c;

    } public String getX() {

    return x;

    } public void setX(String x) {

    this.x = x;

    } public String getR() {

    return r;

    } public void setR(String r) {

    this.r = r;

    }

    }

    展开全文
  • 1.定义解释迭代法也称辗转法,是一种逐次逼近方法,在使用迭代法解方程组时,其系数矩阵在计算过程中始终不变。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在...

    欢迎点击「算法与编程之美」关注我们!

    本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

    1.定义解释

    迭代法也称辗转法,是一种逐次逼近方法,在使用迭代法解方程组时,其系数矩阵在计算过程中始终不变。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或步骤)时,都从变量的原值推出它的一个新值。

    迭代法具有循环的计算方法,方法简单,适宜解大型稀疏矩阵方程组,在用计算机计算时只需存储A的非零元素(或可按一定公式形成系数,这样A就不需要存储)。

    (1)对于给定的方程组X =Bx+f,用式子

    逐步代入求近似解的方法称为迭代法(或称为一阶定常迭代法,这里与B和k无关)

    (2)如果limx(k), x∞存在(记作x* ),称此迭代法收敛,显然x就是方程组的解,否则称此迭代法发散。

    3ed1647aa3966363069c38c6d350bd14.png

    2.解法介绍

    牛顿迭代法是一种线性化方法,其基本思想是将非线性方程f(x)= 0逐步归结-为某种线性方程来求解.设已知方程f(x)=0有近似根X (假定f’(xk)≠ 0),将函数f(x)在点xk展开,有:

    f(x)≈f(xk)+f’(xk)(x-xk)于是方程f(x)=0可近似地表示为f(x)+ f’(xk)(x-xk)=0(是个线性方程),记其根为xk+1,则xk+1的计算公式为xk+1=xk-f(xk)f’(xk)(k=0,1,2……)

    3.例题讲解

    例:用牛顿迭代法三次求方程f(x)=x5-x2+x-30=0,在区间[1,3]中的近似值请详细解答

    解:

    f(1)=-29 f(3)=207所以[1,3]之间一定有零点。而且明显更靠近x=3。f (2) =-2 f(2. 5)=63.9 f(2.2)=19.2 f(2.1)=8.53 f(2. 01)=0.78 f(2 001)=0.08

    所以f(2. 0001)=0.008应该满足要求了。所以x=2.0001

    4.代码编写

    例:使用牛顿迭代法求方程的解,X3-2x-5=0,在区间[2,3]上的根。

    3c693d55ede10141061df2ff0ff70149.png

    END

    实习主编 | 王楠岚

    责 编 | 刘 连

    展开全文
  • 今天写了一个N元一次方程组的JAVA程序(矩阵),毕竟不是专业搞public class Matrix {/*** @param args* 必须为N行N+1列*/public static void main(String[] args) {int n = 4;float[][] matrix = { { 6, 0, 7, 9, 20...
  • 我正在尝试在Java中创建一个简单的SIR流行病模型仿真程序。基本上,SIR由三个微分方程组定义:S'(t)=-l(t)* S(t)I'(t)= l(t)* S(t)-g(t)* I(t)R'(t)= g(t)* I(t)S-易感人群,I-...如何在Java中求解此类微分方程?...
  • ④答题要规范,得分有技巧 ●简洁文字说明与方程式相结合 ●尽量用常规方法,使用通用符号 ●分步列式,不要用综合或连等式 ●对复杂的数值计算题,最后结果要先出符号表达,再代入数值进行计算。 切记: 1. 所有...
  • java解线性方程组 Java 解线性方程组 方法一:高斯消去法 import java.util.Scanner; public class Gauss { /*** @ 列主元高斯消去法*/ static double a[][]; static double b[]; static double x[]; static int n; ...
  • java解超越方程怎么解

    2016-10-11 06:23:35
    想用java编程解一个超越方程 一个极大似然方程组 不知道怎么做 求助
  • Java方程解

    2021-05-11 22:40:25
    //第六题 求方程Ax+B=0的;输入AB的值后输出原式和解; import java.util.; public class HelloWorld { public static void main(String[] args) { int a,b; double x; Scanner cin=new Scanner (System.in); a...
  • 线性方程组的迭代求解java.docx 线性方程组的迭代求解线性方程组的迭代求解摘要迭代法是一种逐次逼近方法,在使用迭代法解方程组时,其系数矩阵在计算过程中始终不变。它利用计算机运算速度快、适合做重复性操作的...
  • dI(t)/dt=G(t)*I(t-1/30)*S(t)-0.05*I(t)………………(1)dX(t)/dt=(0.06/360000)*S(t)*(I(t)+Y(t))…………(2)dY(t)/dt=0.05*I(t)…………………………………(3)G(t)=GdI(t)/dt=G(t)*I(t-1/30)*S(t)-0.05*I(t)……...
  • JAVA解线性方程

    2013-12-05 23:23:38
    本文档利用Java编程语言求解线性方程组,不是原创,但很有用
  • 我不确定我是否完全理解这个问题,并且提供一些示例数据会有所帮助,但您可以定义一个函数(fun_dyn_b),该函数在Lorenz函数中定义的时间t调用b值:parameters state func_dyn_b Lorenz with(as.list(c(state, ...
  • 对于软件专业学生而言,《数值方法》中高斯法解方程组 的代码,很实用! 本代码可以解任意可解得方程组, 不限未知数个数 呵呵 java编写!
  • /** * 计算 Ax+By=C */ function suan($A, $B, $C) { $A--; $B--; $str = str_repeat('-', $C); $search = '/^(.*)\1{' . $A . '}(.*)\2{' . $B .... preg_match($search, ... PS: 没有考虑无的情况,当无时 x和y都是0
  • matlab解方程系统默认用户浏览 5946如何用matlab解一系列类似的方程?例如tx-lnx+2=0,其中t=1,2,3……。这样的一系列方程在matlab有没有快捷的编程解法?...例如tx-lnx+2=0,其中t=1,2,3……。这样的一系列方程在...
  • importjava.text.DecimalFormat;...publicclass解方程组{@SuppressWarnings("unused")publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.i...import java.text.DecimalFormat;...
  • 如果没有解决方案,方法解决方案将返回null.如果有解决方案,则返回a(仅针对一个解决...例如,对于s = 24,x = 6求解的是a = 9,b = 15.二进制:9 = 100115 = 1111这些数字在2个位置上有所不同,因此总共有Math.pow(2...
  • 根据方程式估计出来的如果懒得估计,有2个方法,方法一: 基本上普通三元一次方程式的整数 不会超过int这个范围缺点:效率极其慢......intmax=Integer.MAX_VALUE;intmin=Integer.MIN_VALUE;方法二: 先在常规范围求值,...
  • 第n次对分后变为[an,bn],长度变为(b0 - a0)/2^n 我们取xc = (an + bn)/2 为根的近似, 则误差为:|xc - r| (b0 - a0)/2^(n+1) 我们定义:如果误差小于0.5x10^(-p),那么精确到P位小数 这样一来,我们就可以根据所...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 562
精华内容 224
关键字:

java解方程

java 订阅