一道关于牛顿迭代法的数值问题,题目是英文的,没有头绪,
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/09/22 18:29:08
一道关于牛顿迭代法的数值问题,题目是英文的,没有头绪,
In celestial mechanics,Kelper `s equation is important.It reads x=y-msiny,in which x is a planet`s mean anomaly,y is eccentric anomaly,and m is the eccentricity of its orbit.Taking m=0.9,construct a table of y for 30 equally spaced values of x in the interval 0
In celestial mechanics,Kelper `s equation is important.It reads x=y-msiny,in which x is a planet`s mean anomaly,y is eccentric anomaly,and m is the eccentricity of its orbit.Taking m=0.9,construct a table of y for 30 equally spaced values of x in the interval 0
y-msiny-x=0,其中m=0.9,0<=x<=π,x所属区间分成30等份,对每个x用牛顿法求y.
Java代码:
public class Newton {
public static final double EPSILON = 1e-15;
private static double f(double x, double y) {
return y - 0.9 * Math.sin(y) - x;
}
// y - 0.9*Math.sin(y) - x,x取固定值,对y求导后为 1 - 0.9 * Math.cos(y)
private static double d(double y) {
return 1 - 0.9 * Math.cos(y);
}
public static double root(double x) {
double y = 1;
while (Math.abs(f(x, y) / d(y)) > EPSILON) {
y = y - f(x, y) / d(y);
}
return y;
}
public static void main(String[] args) {
double xStep = Math.PI / 30;
for (int i = 0; i <= 30; i++) {
double x = xStep * i;
double y = root(x);
System.out.println("x: " + x + ", y=: "+ y);
}
}
}
再问: 亲,这时java代码是么?跟matlab语言是一样的么?因为我刚修了数值计算,我们用的是matlab,我忘了在提问中说,我也没有学过java,看不懂。。
再答: matlab不是很懂啊。function result = f(x, y)
result = y - 0.9 * sin(y) - xfunction result = d(y)
result = 1 - 0.9 * cos(y);function result = root(x)
y = 1.0;
while (abs(f(x, y) / d(y)) > 1e-15)
y = y - f(x, y) / d(y);
end
result = y;xStep = pi / 30;
for i = 0:30
x = xStep * i;
y = root(x);
end大概这样吧,不知道是否正确。
再问: 我用你给我的思路编程,现在实现了求解x 等分的数值,但是解决不了求对应y的问题。
再答: y = root(x);不就是求y吗?我写的matlab程序没测试过,但大概步骤就是这样。
再问: 我把我写的程序给你看看,我知道不应该给两个初值x,y,但是只有一个初值的我不会写
再答: matlab我不懂。
Java代码:
public class Newton {
public static final double EPSILON = 1e-15;
private static double f(double x, double y) {
return y - 0.9 * Math.sin(y) - x;
}
// y - 0.9*Math.sin(y) - x,x取固定值,对y求导后为 1 - 0.9 * Math.cos(y)
private static double d(double y) {
return 1 - 0.9 * Math.cos(y);
}
public static double root(double x) {
double y = 1;
while (Math.abs(f(x, y) / d(y)) > EPSILON) {
y = y - f(x, y) / d(y);
}
return y;
}
public static void main(String[] args) {
double xStep = Math.PI / 30;
for (int i = 0; i <= 30; i++) {
double x = xStep * i;
double y = root(x);
System.out.println("x: " + x + ", y=: "+ y);
}
}
}
再问: 亲,这时java代码是么?跟matlab语言是一样的么?因为我刚修了数值计算,我们用的是matlab,我忘了在提问中说,我也没有学过java,看不懂。。
再答: matlab不是很懂啊。function result = f(x, y)
result = y - 0.9 * sin(y) - xfunction result = d(y)
result = 1 - 0.9 * cos(y);function result = root(x)
y = 1.0;
while (abs(f(x, y) / d(y)) > 1e-15)
y = y - f(x, y) / d(y);
end
result = y;xStep = pi / 30;
for i = 0:30
x = xStep * i;
y = root(x);
end大概这样吧,不知道是否正确。
再问: 我用你给我的思路编程,现在实现了求解x 等分的数值,但是解决不了求对应y的问题。
再答: y = root(x);不就是求y吗?我写的matlab程序没测试过,但大概步骤就是这样。
再问: 我把我写的程序给你看看,我知道不应该给两个初值x,y,但是只有一个初值的我不会写
再答: matlab我不懂。