| 查看: 3006 | 回复: 31 | |||
businiao412金虫 (正式写手)
|
[求助]
请教一个非线性方程非线性项转化为多项式的方法 已有2人参与
|
||
» 本主题相关价值贴推荐,对您同样有帮助:
matlab解非线性方程组
已经有3人回复
matlab解非线性方程组程序纠错与正确运行
已经有6人回复
非线性方程的线性化问题,大神们进来指教下!!!!感谢了!!!!!!!!!
已经有9人回复
1stopt/MATLAB 解非线性方程组问题
已经有4人回复
一个关于有约束非线性方程组的求解问题
已经有7人回复
求大神帮忙拟合一个非线性方程,求出模型参数
已经有15人回复
求助解复杂非线性方程组的好的方法
已经有24人回复
用matlab求解一个非线性方程组的解
已经有4人回复
非线性方程求解问题,求助各位兄弟姐妹们~~
已经有7人回复
sos!!1stopt解非线性方程组,一直出现常数定义错误的问题!求大神帮助!
已经有12人回复
MATLAB求解非线性方程组
已经有5人回复
求Matlab解非线性方程代码
已经有12人回复
matlab无约束非线性方程求最小值的问题
已经有7人回复
【求助】非线性方程组的求解问题
已经有6人回复
求助matlab 非线性方程组全部解!
已经有6人回复
使用fsolve求解非线性方程问题
已经有9人回复
需要换迭代方法吗?
已经有7人回复
非线性数据拟合的数学原理!!!!!????
已经有30人回复
急切求助!一个mathematica求解一个简单一元非线性方程的问题
已经有4人回复
1stopt或matlab如何求解以下的非线性方程并拟合出相应曲线?
已经有13人回复
matlab求解非线性方程组,求助!
已经有6人回复
【求助】用mathematica 5.0求解一个非线性方程组失败,特发帖求助!
已经有5人回复
非线性方程组的迭代法(数值计算高手请进)
已经有7人回复
【求助】求解非线性方程
已经有8人回复
guojiashun
铁杆木虫 (正式写手)
- 应助: 10 (幼儿园)
- 金币: 7191.2
- 散金: 82
- 红花: 12
- 帖子: 940
- 在线: 369.1小时
- 虫号: 933003
- 注册: 2009-12-25
- 性别: GG
- 专业: 机械动力学
【答案】应助回帖
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
businiao412: 金币+15, ★★★★★最佳答案, 衷心感谢您细致透彻的讲解,有种豁然开朗的感觉,我按照您的思路试做一下,有问题再向您请教。 2014-08-11 14:57:17
感谢参与,应助指数 +1
businiao412: 金币+15, ★★★★★最佳答案, 衷心感谢您细致透彻的讲解,有种豁然开朗的感觉,我按照您的思路试做一下,有问题再向您请教。 2014-08-11 14:57:17
|
对你的问题理解不是十分准确。仅仅就我的理解说一下: 摄动法的基本思想是把响应q看做多个不同量级的摄动的叠加,即:q(t,ε )=u0(t)+ε*u1(t)+ε ^2*u2(t)+......【1】(多尺度法还要把考虑不同的时间尺度,q(t,ε)=u0(t1,t2,...)+ε*u1(t1,t2,...)+ε ^2*u2(t1,t2,...)+.....),然后把q的近似表达式【1】代入原方程,通过整理和推导,根据方程两边 小参数 ε 的同次幂系数相等的条件,把原方程转化为分别关于u0、u1、u2.....的微分方程,然后分别逐次求得各摄动u0、u1、u2........最后,叠加可得方程q的近似解析解。 这个非线性微分方程的非线性项是(1-q)^3/2,而在运用摄动法把式【1】代入原方程中进行整理时,由于(1-q)^3/2这一项带有分数次幂,故【1】代入后其展开是非常困难的,即使展开其中也带有 ε 的分数次幂项,也就无法利用 ε 的同次幂系数相等的条件来求解(后面的套路步骤走不下去了)。所以,一般在求解此类非线性微分方程时,用多项式来近似表达诸如(1-q)^3/2这种难于处理的项,这样当式【1】代入后展开、整理就变得很简便了。类似的情况如齿轮动力学理论中,一个主要的非线性因素是齿侧间隙,间隙作用方式用分段函数来表达,而分段函数的存在也给摄动法、多尺度法等的运用带来困难,数学上难于展开处理,故也有学者用多项式来近似这个分段函数(当然还有其它处理方法,这个还要视造成困难的项的具体函数性质)。 这里提前预估了一个拟合区间q∈[1-Q, 1],Why?第一,方程首先要有稳态解;第二,也是为了数学处理上的便利性。(1)根据(1-q)^3/2可知,q必须小于等于1,否则出现复数项,方程无稳态解,故已知q的上限;(2)采用多项式来拟合(1-q)^3/2,取多少阶合适?我们当然是希望阶数越低越好。阶数越高,式【1】代入后的数学展开越复杂繁琐。根据数学知识易知拟合区间越小,就可以用越低的阶数来获得足够的拟合精度,所以根据已知条件提前划定一个尽量小的区间十分有益和必要。接下来要确定q的下限,其中Q是q所能预期到的最大的峰值(上限)和谷值(下限)之间的差值(peak-to-peak value,我想这里的Q可以通过数值求解、实验或者实际观测得到),那么已知q的上限是1,下限自然就是1-Q了。 最后,文中确定用三次多项式来拟合,接着就要确定多项式的系数a0、a1、a2、a3。这里采用“最小二乘法”来确定,最小二乘法是一种数值方法,必须基于已知的数据进行拟合。上面已经得到了拟合区间q∈[1-Q, 1],那么在这个区间内取一些点,如1-Q, 1-9*Q/10, 1-8*Q/10, 1-7*Q/10, ......, 1,依次代入(1-q)^3/2中,可得相应值Q^3/2, (9*Q/10)^3/2, (8*Q/10)^3/2, (7*Q/10)^3/2, ......, 0,已知了函数(1-q)^3/2的一组自变量和因变量,套用“最小二乘法”的套路解得多项式的系数a0、a1、a2、a3也就不难了吧? 总结,不论是摄动法,还是多项式拟合,都是无限逼近思想的体现。摄动法本身得到的就是方程的无限近似解,因此用多项式无限近似方程中复杂项也就变得无可厚非了。 PS:周日下午无事,多敲了些废话,纯属个人见解,限于水平,有误之处请各位指正。 |
3楼2014-08-10 19:43:10
herowolf
木虫 (正式写手)
- 应助: 25 (小学生)
- 金币: 3766.3
- 红花: 8
- 帖子: 731
- 在线: 381.1小时
- 虫号: 3283264
- 注册: 2014-06-19
- 性别: GG
- 专业: 流体力学
2楼2014-08-10 16:53:53
guojiashun
铁杆木虫 (正式写手)
- 应助: 10 (幼儿园)
- 金币: 7191.2
- 散金: 82
- 红花: 12
- 帖子: 940
- 在线: 369.1小时
- 虫号: 933003
- 注册: 2009-12-25
- 性别: GG
- 专业: 机械动力学
6楼2014-08-11 15:50:17
feixiaolin
荣誉版主 (文坛精英)
-

专家经验: +518 - 应助: 942 (博后)
- 贵宾: 1.275
- 金币: 3430
- 散金: 58785
- 红花: 532
- 沙发: 11
- 帖子: 24215
- 在线: 2601.8小时
- 虫号: 2139575
- 注册: 2012-11-21
- 专业: 光学信息获取与处理
- 管辖: 数学
7楼2014-08-11 16:08:40
guojiashun
铁杆木虫 (正式写手)
- 应助: 10 (幼儿园)
- 金币: 7191.2
- 散金: 82
- 红花: 12
- 帖子: 940
- 在线: 369.1小时
- 虫号: 933003
- 注册: 2009-12-25
- 性别: GG
- 专业: 机械动力学
|
那是因为matlab的ones函数中不支持符号运算,合法的数据类包括: 'double', 'single', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', or 'uint64',不包括符号类:sym(详见关于ones函数的help文件)。matlab的符号运算功能还是比较弱,你可以试试用maple。 由于我没装maple,我直接用具体数值替你做了几组验证,证明我说的基本是正确的: (1)令Q=1,则x=[0,0.1,0.2,......,0.9,1],对应的y=-(1.-x).^(3/2)=[-1,-0.853814968245462,-0.715541752799933,....,0],p=polyfit(x,y,3)=-0.264788988716828 -0.187032536397084 1.452896005112752 -0.998323698149733,根据论文知: a3=-8/(33*Q^(3/2))=-0.242424242424242; a2=-(72*Q-56)/(77*Q^(3/2))=-0.207792207792208; a1=(24*Q^2+144*Q-56)/(77*Q^(3/2))=1.454545454545455; a0=(8*Q^3-360*Q^2-1080*Q+280)/(1155*Q^(3/2))=-0.997402597402597; (2)令Q=0.5,则x=[0.5,0.55,0.6,......,1],对应的y=-(1.-x).^(3/2)=[-0.3535,-0.3018,-0.2529,......,-0.0111,0],p=polyfit(x,y,3)=-0.748936358020765 0.858900587453328 0.730154298636324 -0.839145979819353,则 a3=-8/(33*Q^(3/2))=-0.685679302968773; a2=-(72*Q-56)/(77*Q^(3/2))=0.734656396037972; a1=(24*Q^2+144*Q-56)/(77*Q^(3/2))=0.808122035641769; a0=(8*Q^3-360*Q^2-1080*Q+280)/(1155*Q^(3/2))=-0.854650274057507; 结论:可见在区间[1-Q,1]内取点进行拟合得到的多项式系数a3,a2,a1,a0的值与利用论文中a3,a2,a1,a0公式得到的数值是能够对上的。中间有些误差,主要原因一是取点的疏密对拟合精度有影响;二是论文中得到的表达式也是近似的。 |
13楼2014-08-14 01:43:25
guojiashun
铁杆木虫 (正式写手)
- 应助: 10 (幼儿园)
- 金币: 7191.2
- 散金: 82
- 红花: 12
- 帖子: 940
- 在线: 369.1小时
- 虫号: 933003
- 注册: 2009-12-25
- 性别: GG
- 专业: 机械动力学
15楼2014-08-14 01:55:19
guojiashun
铁杆木虫 (正式写手)
- 应助: 10 (幼儿园)
- 金币: 7191.2
- 散金: 82
- 红花: 12
- 帖子: 940
- 在线: 369.1小时
- 虫号: 933003
- 注册: 2009-12-25
- 性别: GG
- 专业: 机械动力学
|
解方程组的方法应该和点取多少没关系,四个未知量,凑够四个方程就行。我试了一下:取x=[1-Q,1-6*Q/10,1-3*Q/10,1],y=[-Q^(3/2),-(6*Q/10)^(3/2),-(3*Q/10)^(3/2),0], X=[x(1)^3,x(1)^2,x(1),1; x(2)^3,x(2)^2,x(2),1; x(3)^3,x(3)^2,x(3),1; x(4)^3,x(4)^2,x(4),1;] a=inv(X)*y' =25/7/Q^3*conj(Q^(3/2))-5/3/Q^3*3^(1/2)*5^(1/2)*conj(Q^(3/2))+10/21/Q^3*3^(1/2)*10^(1/2)*conj(Q^(3/2)) 15/14/Q^3*(-10+3*Q)*conj(Q^(3/2))-1/6/Q^3*(-30+13*Q)*3^(1/2)*5^(1/2)*conj(Q^(3/2))+2/21/Q^3*(-15+8*Q)*3^(1/2)*10^(1/2)*conj(Q^(3/2)) 3/14/Q^3*(50-30*Q+3*Q^2)*conj(Q^(3/2))-1/6/Q^3*(30-26*Q+3*Q^2)*3^(1/2)*5^(1/2)*conj(Q^(3/2))+2/21/Q^3*(15-16*Q+3*Q^2)*3^(1/2)*10^(1/2)*conj(Q^(3/2)) -1/14/Q^3*(50-45*Q+9*Q^2)*conj(Q^(3/2))+1/6/Q^3*(10-13*Q+3*Q^2)*3^(1/2)*5^(1/2)*conj(Q^(3/2))-2/21/Q^3*(5-8*Q+3*Q^2)*3^(1/2)*10^(1/2)*conj(Q^(3/2)) 根据论文知道Q必然大于0,所以conj(Q^(3/2))=Q^(3/2),这样整理符号运算所得第一项:a3=(25/7-5*sqrt(15)/3+10*sqrt(30)/21)/Q^(3/2)=-0.2753/Q^(3/2)≈ -8/(33*Q^(3/2)),其它不再逐一整理。符号运算得到的a3表达式和论文中还是有误差,这应该是matlab矩阵求逆算法的误差造成的。四元一次方程组应该也不难解,如果手工解是不是应该完全精准? |
19楼2014-08-14 14:27:18
guojiashun
铁杆木虫 (正式写手)
- 应助: 10 (幼儿园)
- 金币: 7191.2
- 散金: 82
- 红花: 12
- 帖子: 940
- 在线: 369.1小时
- 虫号: 933003
- 注册: 2009-12-25
- 性别: GG
- 专业: 机械动力学
|
我用最小二乘法做了一下: syms Q x=[1-Q:0.001*Q:1]; y=-(1.-x).^(3/2); N=length(x); syms A for n=1:N for m=1:4 A(m,n)=x(n)^(m-1); end end a=(A*A')\(A*y'); 其中a(1)=a0; a(2)=a1; a(3)=a2; a(4)=a3;然后得到很长很长很长一串a关于Q的表达式,人工化简基本不可能了.............然后用eval函数化简最简单的 a3 项,得 eval(a(4))=-1230776300378990335736947704895/5070602400912917605986812821504/conj(Q)^3*conj(Q^(3/2))= -0.2427/Q^(3/2)= -8/(33*Q^(3/2)) 但是其它几项太复杂了,化简不动......... |
29楼2014-08-14 19:03:52
guojiashun
铁杆木虫 (正式写手)
- 应助: 10 (幼儿园)
- 金币: 7191.2
- 散金: 82
- 红花: 12
- 帖子: 940
- 在线: 369.1小时
- 虫号: 933003
- 注册: 2009-12-25
- 性别: GG
- 专业: 机械动力学
|
把取点密度减小:x=[1-Q:0.1*Q:1]; 可得: eval(a(4))=-23980501898594795/90564573756653568/conj(Q)^3*conj(Q^(3/2)) =-0.2648/Q^(3/2); eval(a(3))=-1/1716*conj(Q^(3/2))*(-2997562737324347/2199023255552-12000*conj(Q)-500*conj(Q)*2^(1/2)+3008*conj(Q)*5^(1/2)+1116*conj(Q)*10^(1/2)+721*conj(Q)*7^(1/2)*10^(1/2)-704*conj(Q)*2^(1/2)*5^(1/2)-381*conj(Q)*3^(1/2)*10^(1/2)+624*conj(Q)*3^(1/2)*5^(1/2))/conj(Q)^3 =-(1.6841e+003*Q-1.3631e+003)/(1716*Q^(3/2)) =-(0.9814*Q-0.7943)/Q^(3/2) ≈ -(72*Q-56)/(77*Q^(3/2)) 后面实在整不动了,说明最小二乘可定是可行的,但是这个论文作者采用何等手段获得如此整齐精准的表达式呢? |
30楼2014-08-14 19:28:03
businiao412
金虫 (正式写手)
- 应助: 2 (幼儿园)
- 金币: 1431.3
- 红花: 9
- 帖子: 469
- 在线: 58.9小时
- 虫号: 1496676
- 注册: 2011-11-17
- 专业: 石油天然气开采
4楼2014-08-11 14:59:13
businiao412
金虫 (正式写手)
- 应助: 2 (幼儿园)
- 金币: 1431.3
- 红花: 9
- 帖子: 469
- 在线: 58.9小时
- 虫号: 1496676
- 注册: 2011-11-17
- 专业: 石油天然气开采
5楼2014-08-11 15:14:27
businiao412
金虫 (正式写手)
- 应助: 2 (幼儿园)
- 金币: 1431.3
- 红花: 9
- 帖子: 469
- 在线: 58.9小时
- 虫号: 1496676
- 注册: 2011-11-17
- 专业: 石油天然气开采
8楼2014-08-11 16:33:54
businiao412
金虫 (正式写手)
- 应助: 2 (幼儿园)
- 金币: 1431.3
- 红花: 9
- 帖子: 469
- 在线: 58.9小时
- 虫号: 1496676
- 注册: 2011-11-17
- 专业: 石油天然气开采
9楼2014-08-13 11:34:35
guojiashun
铁杆木虫 (正式写手)
- 应助: 10 (幼儿园)
- 金币: 7191.2
- 散金: 82
- 红花: 12
- 帖子: 940
- 在线: 369.1小时
- 虫号: 933003
- 注册: 2009-12-25
- 性别: GG
- 专业: 机械动力学
10楼2014-08-13 16:23:32













回复此楼