新手请教:编写一个计算二次方程ax^2+bx+c=0的根

6302573 2003-09-30 08:42:04
编写一个计算二次方程ax^2+bx+c=0的根,希望写的清楚一些因为是新手谢谢了
...全文
641 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
icecloud 2003-10-01
  • 打赏
  • 举报
回复
啊,刚才翻了翻书,发现叙述太复杂了
我看你们还是自己看书找资料去吧

大意是先根据方程组建立迭代公式

Xi = 1-n累加 dijXij + fi(i=1,2,....n)
Xi (k+1)次幂 = 1-n累加dijXij(k次) + fi(i=1,2,....n)
其中 dii = 0, dij=-aij/aii, fi =bi/aii

(上面的公式写的太烂了没办法,有时间这位兄弟自己看看书吧)

上面是雅可比迭代法,最简单的

然后取x1=x2=....=xn=0,带入迭代公式
不断用Xi(k+1)来迭代(递归)计算
直到最后得到稳定的逼近值(书上的例子一般是在10次迭代之内稳定)


以上方法是计算数学领域中常用的迭代法的最简单例子
用计算机编写程序很容易实现这种规律性极强的算法

嘿,献丑了,我是计算机系,不是数学系的。这些早就忘光了
刚找出书来复习了一下
peng14331 2003-10-01
  • 打赏
  • 举报
回复
对啊,我只懂二次的,楼上的如果知道高次的不妨说说思路
tomcatjava 2003-10-01
  • 打赏
  • 举报
回复
楼上的是数学系的吧,同门中人!!!!!
icecloud 2003-10-01
  • 打赏
  • 举报
回复

2次的是可以这样算。但是n次的不能在这么算了

当年有一门课程叫做数值分析,就是讲如何解线性方程组

用到迭代法,插值法等

嗯...已经忘记了...得查查书

peng14331 2003-10-01
  • 打赏
  • 举报
回复
import java.io.*;
class InputData
{static private String s="";
static public void input()
{BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
try{
s=br.readLine();
}catch(IOException e){}
static public float getFloat()
{input();
return Float.parseFloat(s);
}
}
class Equation //表示方程式的类
{float a,b,c,disc=0;
void input()
{System.out.println("请输入三个参数a,b,c");
System.out.print("a=");
a=InputData.getFloat();
System.out.print("b=");
b=InputData.getFloat();
System.out.print("c=");
c=InputData.getFloat();
}
void getRoots()
{double x1=0,x2=0;
double realpart=0,imagpart=0;
if(Math.abs(a)<=1e-5)
{System.out.print("此方程式不是一元二次方程");
System.exit(0);
}
else
{System.out.println("一元二次方程");
disc=b*b-4*a*c;
}
if(Math.abs(a)<=1E-5)
System.out.print("此方程有两个相等的根:"+(-b/(2*a)));
else if(disc>1E-5)
{x1=(-b+Math.sqrt(disc))/(2*a);
x2=(-b-Math.sqrt(disc))/(2*a);
System.out.print("此方程有两个不相等的根:"+"\nx1="+x1+" x2="+x2);
}
else
{realpart=-b/(2*a);
imagpart=Math.sqrt(-disc)/(2*a);
System.out.println("有两个复数根:");
System.out.print("x1="+realpart+"+"imagpart+"i");
System.out.print("\nx2="+realpart+"-"imagpart+"i");
}
public class Roots(){
public static void main(String args[]) throws IOException{
Equation e=new Equation();
e.input();
e.getRoots();
}
}

我这也是恰巧有源程序,打的匆忙,若有小的错误,还望你自己去纠正
希望能有所帮助.


mhz 2003-10-01
  • 打赏
  • 举报
回复
同意
wawaxp 2003-10-01
  • 打赏
  • 举报
回复
回复人: maoqi2232(maoqi2232

是作业题吧,要自己做!

--------------------------
同意
tomcatjava 2003-10-01
  • 打赏
  • 举报
回复
自己根据求根公式写吧,应该不难的!!
主要是分情况讨论!!
maoqi2232 2003-10-01
  • 打赏
  • 举报
回复
是作业题吧,要自己做!
homerzhou 2003-10-01
  • 打赏
  • 举报
回复
可以参考清华那本<C程序设计>,里面不是有方法么。类似的算法,JAVA和C差不多的。只要把C里面的sqrt(x)换成Math.sqrt(x)之类的就OK了
jianlin 2003-09-30
  • 打赏
  • 举报
回复
UP
6302573 2003-09-30
  • 打赏
  • 举报
回复
up

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧