-1

我在用任何语言编写程序方面都是全新的,我正在尝试编写一个简单的 Newton-Raphson 方法,我认为该方法在 C 中有效(尚未编译,但从前面的示例开始,所以我正在制作这个假设)但意识到我不确切知道如何从 Java 调用方法......我收到这些错误:

NewtRaphEx.java:5: class, interface, or enum expected
double f = (double); 
^
NewtRaphEx.java:6: class, interface, or enum expected
double df = (double); 
^
NewtRaphEx.java:39: class, interface, or enum expected
double f(double x) {
^

我假设我错误地调用了 f 和 df 方法?这不是作业问题,只是我自己的练习!

到目前为止,我的程序是:

/* Newton Raphson Method*/

import Scanner.java.util; 

double f = (double); 
double df = (double); 

public class NewtRaphEx {

    public static void main (String[] args) {

        double xn, e_allow, fn, fnew, eps, dfn, dfnew; 
        int n;
        int nMax = 10000;

        e_allow = 0.001;
        xn = 0.6;

        while (eps <= e_allow || n < nMax) {
            for (n = 0; n <= nMax; n++) {
                fn = f(xn); 
                dfn = df(xn);
                dx = -(fn / dfn); 
                xnew = xn + dx; 
                eps = Math.abs(dx / xn);
                n = n + 1; 
                System.out.println("N" + "\t" + "X" + "\t" + "F(x)" + "\t" + "dF(x)" + "\t" + "delX" + "\t" + "X_new" + "\t" + "Epsilon");
                System.out.println(n + "\t" + xn + "\t" + fn + "\t" + dfn + "\t" + dx + "\t" + xnew + "\t" + eps);
            }
        }
    }
}



// Creating Function f = x - cos(3.5x)

double f(double x) {
    return (x - cos(3.5 * x)) 
}

double df (double x) {
    return (1 + sin(3.5 * x))
}
4

4 回答 4

1

Java 在许多方面与 C/C++ 不同,包括(特别是这个问题)你需要类定义的大部分内容,例如

package ...

import ...

public class NewtRaphEx {
   ...
}

所以包定义了命名空间,导入定义了范围内的命名空间,然后类定义(与文件名相同的名称.java)包含其他所有内容。请注意,文件中只能有一个公共类.java(Java 在这种方式下是有限制的)

鉴于您上面的问题,我认为一个很好的起点是将所有内容放在一个main()方法中(类似于main在 C 程序中)。

public class NewtRaphEx {
   public static void main(String[] args) {
       // put your code here...
   }
}
于 2014-02-13T15:09:24.290 回答
1

您打算声明 2 个函数,f然后df在函数之前main定义fdf。你可以在 C 中做这种事情,但这不是 C,是 Java

在Java中,你只能在顶层声明类和接口,方法是在其中定义的。因此,这些函数以及它们在类下面的定义是无效的:

import Scanner.java.util; 

//invalid
double f = (double);
//invalid
double df = (double); 

public class NewtRaphEx {
    //class content...
}
//invalid
// Creating Function f = x - cos(3.5x)
double f(double x) {
    return (x - cos(3.5 * x)) 
}
//invalid
double df (double x) {
    return (1 + sin(3.5 * x))
}

要使您的应用程序正常工作,一种方法是将这些函数重新定义为static类中的方法。

import Scanner.java.util; 

public class NewtRaphEx {
    //valid
    // Creating Function f = x - cos(3.5x)
    static double f(double x) {
        return (x - cos(3.5 * x)) 
    }
    //valid
    static double df (double x) {
        return (1 + sin(3.5 * x))
    }
    //class content...
}

我强烈建议您按照The Java Tutorials复习 Java 编程的基础知识。

于 2014-02-13T15:14:29.720 回答
0

方法fdf在类之外。它们必须在其中声明。它们应该是static,因为它们没有绑定到实例,您将从静态方法调用它们。

double f = (double);是非法的。您必须提供一个值或什么都不提供double f;

sin并且cos应该是java.lang.Math.sin并且java.lang.Math.cos除非您使用静态导入。

于 2014-02-13T15:14:02.670 回答
0

对不起我的最后一个答案(我没有仔细阅读)。

有2个问题:

(1) d 和 df 是函数/方法,而不是变量。然后,您可以安全地删除顶部声明,因为函数/方法是在文件底部声明的:

//Delete this
double f = (double);
double df = (double); 

(2) 您试图在静态函数(main)中调用成员函数(f 和 df)。那是行不通的。然后,您应该将这些函数声明为静态并将其移动到类中:

 static double f(double x) {
        return (x - cos(3.5 * x)) 
    }

    static double df (double x) {
        return (1 + sin(3.5 * x))
    }
}
于 2014-02-13T15:19:03.850 回答