24小时热门版块排行榜    

查看: 3045  |  回复: 31

businiao412

金虫 (正式写手)

引用回帖:
10楼: Originally posted by guojiashun at 2014-08-13 16:23:32
可以,matlab有符号运算,或者用maple也可以。...

多谢,我再试试,今天没有成功。

[ 发自小木虫客户端 ]
11楼2014-08-13 21:42:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

businiao412

金虫 (正式写手)

引用回帖:
10楼: Originally posted by guojiashun at 2014-08-13 16:23:32
可以,matlab有符号运算,或者用maple也可以。...

syms Q
x=[1-Q,1-0.9*Q,1-0.8*Q,1-0.7*Q,1-0.6*Q,1-0.5*Q];
y=[Q^(3/2),(0.9*Q)^(3/2),(0.8*Q)^(3/2),(0.7*Q)^(3/2),(0.6*Q)^(3/2),(0.5*Q)^(3/2)];
P=polyfit(x,y,3)我用这样的表达式,但是一直出错,如下信息:
Error using ==> ones
Trailing string input must be a valid numeric class name.

Error in ==> polyfit at 63
V(:,n+1) = ones(length(x),1,class(x));
12楼2014-08-13 22:45:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

guojiashun

铁杆木虫 (正式写手)

引用回帖:
12楼: Originally posted by businiao412 at 2014-08-13 22:45:37
syms Q
x=;
y=;
P=polyfit(x,y,3)我用这样的表达式,但是一直出错,如下信息:
Error using ==> ones
Trailing string input must be a valid numeric class name.

Error in ==> polyfit at 63
V(: ...

那是因为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
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

guojiashun

铁杆木虫 (正式写手)

在实数范围内随便取Q的值,进行拟合验证,基本都能和论文中公式得到的系数值对上,根据归纳法可知论文中的推导是正确的。你自己也可以多试试几组。
14楼2014-08-14 01:47:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

guojiashun

铁杆木虫 (正式写手)

内容已删除
15楼2014-08-14 01:55:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

guojiashun

铁杆木虫 (正式写手)

说明论文中的公式还是很精准的。
16楼2014-08-14 01:56:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

guojiashun

铁杆木虫 (正式写手)

突然想起来,其实不用最小二乘法,区间内找四个点,比如[1-Q,1-3*Q/10,1-6*Q/10,1],就得到一个四元一次方程组X*a=Y,a=inv(X)*Y,a是系数向量。不知可行否,明天试试。
17楼2014-08-14 02:05:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

businiao412

金虫 (正式写手)

引用回帖:
17楼: Originally posted by guojiashun at 2014-08-14 02:05:45
突然想起来,其实不用最小二乘法,区间内找四个点,比如,就得到一个四元一次方程组X*a=Y,a=inv(X)*Y,a是系数向量。不知可行否,明天试试。

您解答的太给力了,再次表示感谢,您用数据验证了文献的方法的正确性,希望能够用您说的解方程组的形式解出来,不过我心里也有同样的疑问,解出来的结果会不会跟去的数值点的大小跟疏密有关系?
18楼2014-08-14 02:40:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

guojiashun

铁杆木虫 (正式写手)

引用回帖:
18楼: Originally posted by businiao412 at 2014-08-14 02:40:30
您解答的太给力了,再次表示感谢,您用数据验证了文献的方法的正确性,希望能够用您说的解方程组的形式解出来,不过我心里也有同样的疑问,解出来的结果会不会跟去的数值点的大小跟疏密有关系?...

解方程组的方法应该和点取多少没关系,四个未知量,凑够四个方程就行。我试了一下:取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
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

guojiashun

铁杆木虫 (正式写手)

由此可见数值方法里面还是最小二乘法最准确
20楼2014-08-14 14:28:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 businiao412 的主题更新
信息提示
请填处理意见