一元三次方程解析视频怎么解?

查看: 1497|回复: 7|关注: 0
(求助)一元三次方程的求根问题l
<h1 style="color:# 麦片财富积分
新手, 积分 6, 距离下一级还需 44 积分
各位大神,我用solve函数求解了一个含参数的一元三次方程,得到根的表达式之后,我把参数值带了进去,发现是三个复根,其中一对共轭复根,另一个根为169+2.84e-14*i(虚部接近于零)。正常来说我应该得到一对共轭复根及一个实数根,这是怎么回事呢?求大神指导。。。
<h1 style="color:# 麦片财富积分
是由于计算误差导致的么?有人了解么
<h1 style="color:#74 麦片财富积分
关注者: 204
有可能啊。。。计算机计算的时候有舍入误差什么的。。。
<h1 style="color:# 麦片财富积分
有可能啊。。。计算机计算的时候有舍入误差什么的。。。
那请问,169+2.84e-14*i这样的复根可以当做实根来用么
<h1 style="color:#74 麦片财富积分
关注者: 204
那请问,169+2.84e-14*i这样的复根可以当做实根来用么
我觉得可以啊。虚数已经可以忽略不计了啊。。。你可以反带入原式,看下结果啊
<h1 style="color:# 麦片财富积分
我觉得可以啊。虚数已经可以忽略不计了啊。。。你可以反带入原式,看下结果啊 ...
恩 非常感谢 我试一下
帖子最佳答案
关注者: 432
|此回复为最佳答案
对于多项式方程的根,建议用 roots 函数直接求解,通常会比solve更方便
<h1 style="color:# 麦片财富积分
对于多项式方程的根,建议用 roots 函数直接求解,通常会比solve更方便
哦哦,灰常感谢,那我用roots和solve都做一下,然后对比看看
站长推荐 /2
Powered by小木虫 --- 500万硕博科研人员喜爱的学术科研平台
&&查看话题
用计算机解一元三次方程的方法及源码
  做毕业设计,遇到一个很麻烦的一元三次方程,就有做一个计算程序的想法。网上说的什么盛金公式,不好用啊,算了半天,结果竟然不对,无语……求人,不如求己,就写了这个,求大神指点!
  另外附件里面是编译好的程序。
  本人学水利的,QQ: 求交流,最好是美女!:D
计算原理:
  方程:aX^3+bX^2+cX+d=0
  f(x)=aX^3+bX^2+cX+d,两边同除以a
  f(x)/a=X^3+b/a*X^2+c/a*X+da
  令u(x)=X^3+b/a*X^2+c/a*X+da
  当x趋近于正无穷时,u(x)趋近于正无穷
  当x趋近于负无穷时,u(x)趋近于负无穷
  又因u(x)在正无穷到负无穷连续
  所以u(x)至少有一零点(中值定理)
****************************************************************************
  求导:F(x)=df/dx=3aX^2+abX+c
  三次函数0值得讨论问题,肯定不陌生,不再赘述。
  F(x)=3aX^2+2bX+c=0 的根的判别式 deta=b^2-3ac
  deta&o时,F(x)=3aX^2+2bX+c=0的两个根为X1,X2
  有如下结论:
  一个根:deta&=0
  一个根:deta&0且f(X1)*f(X2)&0
  两个根:deta&0且f(X1)*f(X2)=0
  三个根:deta&0且f(X1)*f(X2)&0
  f(X1),f(x2)为极值。
  给X附初值P开始循环试算,每次循环令X=X+T,T为步长;算到|f(x)|&eps (一个小数,如0.00001,满足要求的精度)
  考虑到精度要求较高,解的范围较广时,计算效率不高;而且还有两个或三个实根的可能,故采用下面的优化算法。
  刚开始时取大步长(如T=100),调用循环计算函数,当f(X)*f(X+T)&0时,由中值定理,可知(X,X+T)之间必有一值,此时令循环初值P=X,步长缩小u倍(u为收缩系数)T=T/u,继续循环;当f(X)*f(X+T)&0时,再次重置初值,缩小步长……直到|f(x)|&eps
  这样做的优点是迅速缩小根取值的范围!
  比如,一个方程的根为99你界定根的取值范围为(-),如果精度为0.0001,直接做循环试算,要循环试算1=次
  用优化的方法,假定初始步长为100,收缩系数为10;当把根的范围界定为(0,100)需;(90,100) 90/10=9
  得出根99: 9/1=9
  所以只做11+9+9=29次循环就搞定了…… 很快诶…… ^_^
  两个根的计算:
  当用上面方法得出一个根后,将这个根(这种情况也是极值点)设为初值P,此时的步长要小心啦,如果取的不合适,可能出现得不到结果的死循环,因为,如果步长过大 X+P&G2(假定G2为方程的另一个根),f(X)*f(X+T)恒大于0……取的过小也不行,取得过小了|f(x+T)|&eps成立,将是死循环……所以选一个合适的步长很重要,这里取|X1-X2|-eps,应该比较合适,这样两边都逃不出手掌心!
  三个根的计算:
  算第二大的根的情况和上面的类似,只不过算出第一个根后循环初值P要设为Min{X1,X2}两极值点中的较小者,步长同样为|X1-X2|-eps。算出第二个根后,循环初值P要设为Max{X1,X2}两极值点中的较大者,步长同样为|X1-X2|-eps
  …………
  两个根的那种情况,没有找到合适的方程测试,结果尚不明确,一个和三个根的都测试通过……求测试,求指点!!
  俺的水平很次,错误在所难免,不要鄙视俺……
!****************************************************************************
!&&FUNCTIONS:
!&&ZWJ_3Ci - Entry point of console application.
!****************************************************************************
!&&PROGRAM: ZWJ_3Ci
!&&SUBROUTINE fc& && &&&function
!&&SUBROUTINE f& && && &out data
!&&SUBROUTINE ff& & & && &&&cycle function
!&&PURPOSE:&&Entry point for the console application.
!****************************************************************************
!&&Powered by ZWJ
!****************************************************************************
program ZWJ_3Ci
implicit none
& & real(8),dimension(1:4)::p
& & real(8),dimension(1:13)::q
& & p(1)=0.78& & !!!三次项系数
& & p(2)=-5&&!!!二次项系数
& & p(3)=4& & !!!一次项系数
& & p(4)=1& &!!!常数项系数
& & q(1)=-1000000& &!!!根范围的下限
& & q(2)=1000000& & !!!根范围的上限
& & q(3)=1000& & !!!初始试算步长
& & q(4)=1e-8& && &!!!精确度
& & q(5)=10& && && &!!!计算收缩系数不能小于等于或太接近于 1
& & q(6)=q(2)
& & call fc(p,q)
& & print*
& & write(*,'(&按 ENTER 键继续...&,\)')
end program ZWJ_3Ci
subroutine fc(p,q)
& & implicit none
& & real(8),dimension(1:4)::p
& & real(8),dimension(1:13)::q
& & real(8)::a,b,c,d,f0,f1,deta,x,x1,x2,fp1,fp2,fx1,fx2,tmp
& & a=p(1);b=p(2);c=p(3);d=p(4)
& & if(a==0)then
& && &&&write(*,'(&三次项系数为0时是二次方程,如果输错,请重新输入:&,\)')
& && &&&read*,p(1)
& & if(q(5)&1.09)then
& && &&&write(*,'(&计算收缩系数不能小于等于或太接近于 1,(建议2~20之间),请重新输入:&,\)')
& && &&&read*,q(5)
& & deta=b**2-3*a*c
& & write(*,'(& 方程:&f8.3,&*X^3&,sp,f8.3,&*X^2&,sp,f8.3,&*X&,sp,f8.3,&=0&/)')a,b,c,d
& & print*,&判别式:&&b^2-3ac=&,deta
& & print*
& & if(deta&0)then
& && &&&x1=(-b-sqrt(deta))/3/a
& && &&&x2=(-b+sqrt(deta))/3/a
& && &&&fx1=a*x1**3+b*x1**2+c*x1+d
& && &&&fx2=a*x2**3+b*x2**2+c*x2+d
& && &&&print*,&极值点:&,x1,x2
& && &&&print*,&极值:&&&,fx1,fx2
& && &&&print*
& && &&&q(8)=q(9)=x1 ; q(10)=x2 ; q(11)=fx1 ; q(12)=fx2
& && &&&call f(p,q)
& && &&&if(deta&=0.or.(deta&0.and.fx1*fx2&0))then
& && && && &exit
& && &&&endif
& && &&&if(deta&0.and.fx1*fx2==0)then
& && && && &if(q(1)&=min(x1,x2))exit
& && && && &q(2)=q(6)
& && && && &q(3)=abs(q(3))-q(4)
& && &&&endif
& && &&&if(deta&0.and.fx1*fx2&0)then
& && && && &if(q(1)&=max(x1,x2))exit
& && && && &if(q(1)&min(x1,x2))then
& && && && && & q(1)=min(x1,x2)
& && && && && & q(2)=q(6)
& && && && && & q(3)=abs(x1-x2)-q(4)
& && && && &endif
& && && && &if(q(1)&min(x1,x2))then
& && && && && & q(1)=max(x1,x2)
& && && && && & q(2)=q(6)
& && && && && & q(3)=abs(x1-x2)-q(4)
& && && && &endif
& && &&&endif
end subroutine fc
subroutine f(p,q)
& & implicit none
& & real(8),dimension(1:4)::p
& & real(8),dimension(1:13)::q
& & real(8)::a,b,c,d,f0,f1,deta,x,x1,x2,fp1,fp2,fx1,fx2,tmp
& & a=p(1);b=p(2);c=p(3);d=p(4);deta=q(8);x1=q(9);x2=q(10);fx1=q(11);fx2=q(12)
& && &&&call ff(p,q,q)
& && &&&if(abs(q(7))&q(4).and.q(13)/=0)then
& && && && && & print*,&解:& & x=&,q(1),&eps=&,q(7)
& && && && && & exit
& && &&&endif
end subroutine f
subroutine ff(p,q,o)
implicit none
& & real(8),dimension(1:4)::p
& & real(8),dimension(1:13)::q,o
& & real(8)::a,b,c,d,f0,f1,deta,x,x1,x2,fp1,fp2,fx1,fx2,tmp
& & a=p(1);b=p(2);c=p(3);d=p(4);deta=q(8);x1=q(9);x2=q(10);fx1=q(11);fx2=q(12)
& & do x=q(1),q(2),q(3)
& && &&&f0=a*x**3+b*x**2+c*x+d
& && &&&f1=a*(x+q(3))**3+b*(q(3)+x)**2+c*(x+q(3))+d
& && &&&o(7)=f0 ; o(13)=f1& &
& && &&&if(f0*f1&0.or.f0==0.0)then
& && && && &q(1)=x
& && && && &q(2)=x+q(3)
& && && && &q(3)=q(3)/q(5)
& && && && &exit
& && &&&endif
& & o(1)=q(1) ; o(2)=q(2) ; o(3)=q(3) ; o(4)=q(4) ; o(5)=q(5) ; o(6)=q(6)
end subroutine ff
matlab太大了,电脑上没有装……:shuai:
感觉这个思想很有用。不仅局限用于三次方程的解。。。
这个一点儿都不麻烦呀……我在网上看到有卡丹公式,太麻烦了,还不如这样利用计算机的强大计算能力来解决,而且还可以控制精度……
还有一个盛金公式,算了两遍,我擦,结果不对……不知道是公式有问题还是我算错了……:shuai:
搜索 一元三次方程求根公式及其Fortran代码
大神,请教你一个问题,为什么我用matlab编写了卡单公式,无法求出一个实根两个虚根的情况(当有三个实根时是没有问题的,当就是那个判别式大于零时,明显结果不对)
那种情况下要特殊处理, 不能单纯地套公式
研究生必备与500万研究生在线互动!
扫描下载送金币
浏览器进程
打开微信扫一扫
随时随地聊科研您未被授权查看该页
您未被授权查看该页
您不具备使用所提供的凭据查看该目录或页的权限。
请尝试以下操作:
如果您认为自己应该能够查看该目录或页面,请与网站管理员联系。
单击按钮,并使用其他凭据重试。
HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝。Internet 信息服务 (IIS)
技术信息(为技术支持人员提供)
转到 并搜索包括&HTTP&和&401&的标题。
打开&IIS 帮助&(可在 IIS 管理器 (inetmgr) 中访问),然后搜索标题为&身份验证&、&访问控制&和&关于自定义错误消息&的主题。君,已阅读到文档的结尾了呢~~
一元三次方程的解法(已处理)
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
一元三次方程的解法(已处理)
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口如何解一元三次方程有求根公式? - 爱问知识人
(window.slotbydup=window.slotbydup || []).push({
id: '2491531',
container: s,
size: '150,90',
display: 'inlay-fix'
如何解一元三次方程
有求根公式。
一元三次方程的求根公式用通常的演绎思维是作不出来的,用类似解一元二次方程的求根公式的配方法只能将型如ax^3+bx^2+cx+d+0的标准型一元三次方程形式化为x^3+px+q=0的特殊型。
  一元三次方程的求解公式的解法只能用归纳思维得到,即根据一元一次方程、一元二次方程及特殊的高次方程的求根公式的形式归纳出一元三次方程的求根公式的形式。归纳出来的形如 x^3+px+q=0的一元三次方程的求根公式的形式应该为x=A^(1/3)+B^(1/3)型,即为两个开立方之和。归纳出了一元三次方程求根公式的形式,下一步的工作就是求出开立方里面的内容,也就是用p和q表示A和B。方法如下:
  (1)将x=A^(1/3)+B^(1/3)两边同时立方可以得到
  (2)x^3=(A+B)+3(AB)^(1/3)(A^(1/3)+B^(1/3))
  (3)由于x=A^(1/3)+B^(1/3),所以(2)可化为
  x^3=(A+B)+3(AB)^(1/3)x,移项可得
  (4)x^3-3(AB)^(1/3)x-(A+B)=0,和一元三次方程和特殊型x^3+
有求根公式。
一元三次方程的求根公式用通常的演绎思维是作不出来的,用类似解一元二次方程的求根公式的配方法只能将型如ax^3+bx^2+cx+d+0的标准型一元三次方程形式化为x^3+px+q=0的特殊型。
  一元三次方程的求解公式的解法只能用归纳思维得到,即根据一元一次方程、一元二次方程及特殊的高次方程的求根公式的形式归纳出一元三次方程的求根公式的形式。归纳出来的形如 x^3+px+q=0的一元三次方程的求根公式的形式应该为x=A^(1/3)+B^(1/3)型,即为两个开立方之和。归纳出了一元三次方程求根公式的形式,下一步的工作就是求出开立方里面的内容,也就是用p和q表示A和B。方法如下:
  (1)将x=A^(1/3)+B^(1/3)两边同时立方可以得到
  (2)x^3=(A+B)+3(AB)^(1/3)(A^(1/3)+B^(1/3))
  (3)由于x=A^(1/3)+B^(1/3),所以(2)可化为
  x^3=(A+B)+3(AB)^(1/3)x,移项可得
  (4)x^3-3(AB)^(1/3)x-(A+B)=0,和一元三次方程和特殊型x^3+px+q=0作比较,可知
  (5)-3(AB)^(1/3)=p,-(A+B)=q,化简得
  (6)A+B=-q,AB=-(p/3)^3
  (7)这样其实就将一元三次方程的求根公式化为了一元二次方程的求根公式问题,因为A和B可以看作是一元二次方程的两个根,而(6)则是关于形如ay^2+by+c=0的一元二次方程两个根的韦达定理,即
  (8)y1+y2=-(b/a),y1*y2=c/a
  (9)对比(6)和(8),可令A=y1,B=y2,q=b/a,-(p/3)^3=c/a
  (10)由于型为ay^2+by+c=0的一元二次方程求根公式为
  y1=-(b+(b^2-4ac)^(1/2))/(2a)
  y2=-(b-(b^2-4ac)^(1/2))/(2a)
  可化为
  (11)y1=-(b/2a)-((b/2a)^2-(c/a))^(1/2)
  y2=-(b/2a)+((b/2a)^2-(c/a))^(1/2)
  将(9)中的A=y1,B=y2,q=b/a,-(p/3)^3=c/a代入(11)可得
  (12)A=-(q/2)-((q/2)^2+(p/3)^3)^(1/2)
  B=-(q/2)+((q/2)^2+(p/3)^3)^(1/2)
  (13)将A,B代入x=A^(1/3)+B^(1/3)得
  (14)x=(-(q/2)-((q/2)^2+(p/3)^3)^(1/2))^(1/3)+(-(q/2)+((q/2)^2+(p/3)^3)^(1/2))^(1/3)
  式 (14)只是一元三方程的一个实根解,按韦达定理一元三次方程应该有三个根,不过按韦达定理一元三次方程只要求出了其中一个根,另两个根就容易求出了。
为了方便看,我上传个pdf,里面用数学公式更好的表示出求根公式。
x2+y2+z2=(x+y+z)2-2(xy+yz+zx)=10,
x3+y3+z3=(x+y+z)3-3(x+y+z)(xy+yz+zx)...
四次及四次以下的代数方程都是有求根公式的,即有一般的解法,都是可以求出准确解的,五次及五次以上的代数方程是没有求根公式的,即没有一般的解法,通常情形下是求不出准...
有求根公式。
一元三次方程的求根公式用通常的演绎思维是作不出来的,用类似解一元二次方程的求根公式的配方法只能将型如ax^3+bx^2+cx+d+0的标准型一元...
首先有判定定理:(除x外,所有字母均为整数)
若f(x)=ax^n+a1x^(n-1)+……+b
(x按降幂排列,中间的项省略了)有因式mx+n,则m是a...
大家还关注

我要回帖

更多关于 解一元三次方程 的文章

 

随机推荐