打印

【求助】一元三次方程和一元四次方程的MCU求解法

[复制链接]
6720|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
emailli|  楼主 | 2007-9-8 10:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
做热阻的时候

发现PT100和PT10在0~850℃的区间内是一个一元二次方程。这个好办,直接求解就可以 由电阻值 得到温度。

但是,PT100和PT10在-200~0℃的区内是一个三次方程。不知道怎么求解。公司以前的做法是用曲线拟合公式。(a+cx+ex2)/(1+bx+dx2)来做

虽然,利用曲线拟合工具计算得到的这五个系数后,可以达到我们想要的精度来拟合这一段曲线。

但是,我还还想知道,是否可以利用求解一元三次方程来做!

另外,Cu50和Cu100的温度,电阻关系是一个一元四次方程。本来也是用上面的拟合公式来做的。

我也想了解一下一元四次方程的根如何求解!看看是否可以利用到MCU中。

相关帖子

沙发
zhaoyu2005| | 2007-9-8 10:18 | 只看该作者

用C语言编一个很简单的

怎么计算编译器自己弄,它有自己的函数库,只要单片机的RAM够用,能计算出来的,你想学习的话,可以看对应生成的汇编

使用特权

评论回复
板凳
lixun00| | 2007-9-8 13:20 | 只看该作者

老早时在文曲星上做过一个。。。

(省事。。。转贴) 
一元三次方程的求根公式用通常的演绎思维是作不出来的,用类似解一元二次方程的求根公式的配方法只能将型如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)只是一元三方程的一个实根解,按韦达定理一元三次方程应该有三个根,不过按韦达定理一元三次方程只要求出了其中一个根,另两个根就容易求出了。 
三次方程x^3+px+qx=0(任何一元三次方程都可化为此形式) 其根为:x1=A+B;x2=wA+w^2B;x3=w^2A+wB. 其中,A=三次根号下{-q/2+二次根号下[(q^2)/4+(p^3)/27]}; B=三次根号下{-q/2-二次根号下[(q^2)/4+(p^3)/27]}; w=[-1+根号3)i]/2;i=根号下-1.(希望你学过虚数) 一元三次方程和四次方程的求根公式(用系数表示其根)在16世纪完全得到解决.五次以上的方程没有一般的求根公式,也在19世纪被证明.
   想起用在文曲星上编程(PC1000),哪个累啊,几十k代码,basic的。全部在文曲星上输的,可以处理高中课程以内大部分内容,后来又陆续加了高等数学大部分的内容,本来要参加文曲星比赛的,可惜,后来坏了,资料全部丢失,一年多心血啊!关于一元三次方程的求解历史很有趣,有点像武林中比武一样,有兴趣的可以看下数学史。
   说了这么多,只是想起毕业时去应聘一份电脑工作,当时招聘人员一听是数学系的马上不要,牙的。

使用特权

评论回复
地板
emailli|  楼主 | 2007-9-8 13:29 | 只看该作者

这个公式我也搜到了

但是计算太麻烦

一个8K的MCU无法做这么多事情的。

我想要的是否有一个简单的,可以用于单片机比较方便的实现。

又不超过1K代码计算量的那种

使用特权

评论回复
5
awey| | 2007-9-8 13:36 | 只看该作者

查表,插值 不行吗?

使用特权

评论回复
6
lixun00| | 2007-9-8 13:42 | 只看该作者

应该不要1k巴,可能当时乘法和除法是调用库函数的。。

3次方程必有一个实根。虚根是成对出现的,除法和乘法优化一下,应该可以的

使用特权

评论回复
7
lixun00| | 2007-9-8 16:25 | 只看该作者

研究了一下,当a,b,c,d,为任意值时,要求得实数根。。。

在1k以内,对普通51来说不太可能。请问emailli,a,b,c,d有什么规律没有?最后要求保留几位小数?

使用特权

评论回复
8
doob| | 2007-9-8 21:11 | 只看该作者

数学系的牛啊,招聘的人sb

  现在招聘的人很sb

  1:前一段时间去应聘,我一看那家公司招聘蛮适合的就把
简历呈上去,我主要做单片机软件,所以简历写的应聘
软件,可那家公司把高级语言vc dephi 叫软件,单片机arm编程叫硬件
我说“应聘硬件”,他看了一下简历,说“你上面写的应聘软件啊!
不适合!”
  我说“我应聘硬件”
  他头都没抬,"说不适合".
 
  2:刚毕业那会,去人才市场,一家公司招聘计算机。
   一个农业大学的把简历递过去,那人一看农业大学
  简历都没看,“不适合”!那哥们说“我学的计算机”
  招聘的人很不耐烦,“农业大学我就是不要”
  呵呵,那哥们气得干咂嘴。呵呵
  
  

使用特权

评论回复
9
emailli|  楼主 | 2007-9-8 23:10 | 只看该作者

常数项变化

如果说ax4+bx3+cx2+dx+e=0的话
e发生变化,因为e就是电阻值有关的变量
x是对应的温度。
误差要在0.01℃以下。

使用特权

评论回复
10
lixun00| | 2007-9-9 00:49 | 只看该作者

a,b,c,d,不变?e的变化范围?

使用特权

评论回复
11
emailli|  楼主 | 2007-9-9 11:09 | 只看该作者

变化范围没有仔细算过

电阻阻值大概是从 1.8Ω到400Ω左右的变化

具体的变化范围你可以参考看一下 热阻的分度表手册

手册后面给出了一个计算公式

不顾该公式是 温度对应电阻

而我们现在需要的是其反函数,也就是电阻对应温度。

所以就有了 求解 一元三次,一元四次方程的说法。

PT100零下温度的时候是一元三次方程

Cu100的方程是 一元四次方程。

使用特权

评论回复
12
gyt| | 2007-9-9 11:26 | 只看该作者

8楼的故事很有趣啊:)

使用特权

评论回复
13
lixun00| | 2007-9-9 11:49 | 只看该作者

呵呵,数学系的不转行也不好办。。。a,b,c,d也无规律变化?

使用特权

评论回复
14
emailli|  楼主 | 2007-9-9 15:08 | 只看该作者

a,b,c,d是常数啊

除了常数项和电阻有关

其他系数均为常数

使用特权

评论回复
15
emailli|  楼主 | 2007-9-9 15:10 | 只看该作者

正确的说

正确的说 应该是 系数 a,b,c,d是 常数。

方程的常数项 e 和电阻有关

使用特权

评论回复
16
lixun00| | 2007-9-9 17:42 | 只看该作者

那好办多了。。。ls能否公布方程

使用特权

评论回复
17
yewuyi| | 2007-9-9 19:32 | 只看该作者

同意5楼

不然的话,速度恐怕……

使用特权

评论回复
18
emailli|  楼主 | 2007-9-12 16:10 | 只看该作者

公式

Rt = R0*(1+A*t+B*t^2)
PT100和PT10在0~800℃之间的温度--电阻函数。
Rt为该温度下的电阻,R0为0℃下的电阻,A,B为常系数。
可以看到,该函数可以看成是一元二次方程。只要利用求根公式就可以了。

Rt = R0*(1+A*t+B*t^2+C*(t-100℃)*t^3)
这个是在-200℃~0℃之间的温度--电阻函数
Rt为该温度下的电阻,R0为0℃下的电阻,A,B,C为常系数。
可以看到,该函数可以看成一元四次方程,其中常数项和Rt有关。
=====所以希望知道一元四次方程的求根公式======
=====希望有简单点的,适合MCU计算的,又可以达到精度的====
=====至少根的精度要达到万分之一吧======

Rt = R0*(1+A+B*t(t-100)+C*t^2*(t-100))
这个是Cu100和Cu50的温度--电阻函数。
Rt为该温度下的电阻,R0为0℃下的电阻,A,B,C为常系数。
可以看出,该函数可以看成一个一元三次方程。其常数项和Rt有关。
====所以,这里需要一个一元三次方程的求根公式===
====同时能够方便MCU使用的=====


============================================
目前一元三次和一元四次的求解
我们用的是曲线拟合公式来做的。
效果还不错。
用t = (a+c*R+e*R^2)/(1+b*R+d*R^2)来拟合
其中拟合系数 通过一个 曲线拟合软件得到的。
============================================



使用特权

评论回复
19
5_0_5| | 2007-9-12 20:41 | 只看该作者

关注

使用特权

评论回复
20
谈的元| | 2007-9-12 21:26 | 只看该作者

就是,查表有什么不可以呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

98

主题

1172

帖子

55

粉丝