ncc198611 发表于 2009-5-22 20:44

一个问题两种编程方法,为什么结果不一样呢

程序一:syms x
format long e
for k=1:6;
for l=1:6;
ak=(k-1/2)*pi;
al=(l-1/2)*pi;
xl=(-sinh(al)+sin(al))/(cosh(al)+cos(al));
xk=(-sinh(ak)+sin(ak))/(cosh(ak)+cos(ak));
aa=(1-x)*sinh(ak*x)*sinh(al*x);
bb=(1-x)*sin(al*x)*sinh(ak*x);
cc=(1-x)*xl*sinh(ak*x)*cosh(al*x);
dd=-(1-x)*xl*sinh(ak*x)*cos(al*x);
ee=(1-x)*sinh(al*x)*sin(ak*x);
ff=(1-x)*sin(ak*x)*sin(al*x);
gg=xl*(1-x)*sin(ak*x)*cosh(al*x);
hh=-xl*(1-x)*sin(ak*x)*cos(al*x);
ii=xk*(1-x)*sinh(al*x)*cosh(ak*x);
jj=xk*(1-x)*sin(al*x)*cosh(ak*x);
kk=xl*xk*(1-x)*cosh(al*x)*cosh(ak*x);
ll=-xl*xk*(1-x)*cos(al*x)*cosh(ak*x);
mm=-xk*(1-x)*sinh(al*x)*cos(ak*x);
nn=-xk*(1-x)*sin(al*x)*cos(ak*x);
oo=-xl*xk*(1-x)*cosh(al*x)*cos(ak*x);
pp=xl*xk*(1-x)*cos(al*x)*cos(ak*x);
qq=ak*al*(aa+bb+cc+dd+ee+ff+gg+hh+ii+jj+kk+ll+mm+nn+oo+pp);
ss(k,l)=quadl(inline(qq),0,1);
aa1=cosh(ak*x)*cosh(al*x);
bb1=cosh(ak*x)*cos(al*x);
cc1=xl*cosh(ak*x)*sinh(al*x);
dd1=xl*cosh(ak*x)*sin(al*x);
ee1=-cos(ak*x)*cosh(al*x);
ff1=-cos(ak*x)*cos(al*x);
gg1=-xl*cos(ak*x)*sinh(al*x);
hh1=-xl*cos(ak*x)*sin(al*x);
ii1=xk*sinh(ak*x)*cosh(al*x);
jj1=xk*sinh(ak*x)*cos(al*x);
kk1=xk*xl*sinh(ak*x)*sinh(al*x);
ll1=xk*xl*sinh(ak*x)*sin(al*x);
mm1=-xk*sin(ak*x)*cosh(al*x);
nn1=-xk*sin(ak*x)*cos(al*x);
oo1=-xk*xl*sin(ak*x)*sinh(al*x);
pp1=-xk*xl*sin(ak*x)*sin(al*x);
qq1=al*al*(aa1+bb1+cc1+dd1+ee1+gg1+hh1+ii1+jj1+kk1+ll1+mm1+nn1+oo1+pp1);
ss1(k,l)=quadl(inline(qq1),0,1);
ww(k,l)=-4*ss(k,l)-14*ss1(k,l);
s(k,l)=ak^4;
if k==l;
p(k,l)=s(k,l);
else
p(k,l)=0;
end
rr(k,l)=ww(k,l)+p(k,l);
end
end
disp(rr)
d=eig(rr)
c=sqrt(sqrt(d))

运行结果:Columns 1 through 5

-3.826506610578764e+001 1.336826372499305e+002 -3.283883447797543e+002 4.679795253210178e+002 -6.451913910944917e+002
-2.039776406078337e+001 4.918166119148536e+002 1.234341444335428e+002 -4.153743839103046e+002 4.877218118342345e+002
-1.296824695495351e+001 -5.242414244144165e+001 3.915883814188706e+003 8.293010103946119e+001 -4.804928774066645e+002
-8.794412289361510e+000 -6.361538034450521e+001 -9.299890232673261e+001 1.495016487452171e+004 3.355889357573842e+001
-7.063587338894296e+000 -3.993798845676370e+001 -1.286347347776099e+002 -1.423705727738096e+002 4.059581780127689e+004
-5.656973820520911e+000 -4.332065096263072e+001 -6.838513310512552e+001 -1.973180059164957e+002 -2.055911666111458e+002

Column 6

7.938246964857071e+002
-7.468812579744941e+002
4.594015674806003e+002
-5.491782604859986e+002
-2.977448599348290e+001
9.036180052932144e+004


d =

9.036330379552041e+004
4.059682710852583e+004
1.494976719545028e+004
-3.408937453706960e+001
4.869678975944947e+002
3.914441942563935e+003


c =

1.733796114002226e+001
1.419459556466023e+001
1.105754224925543e+001
1.708597475766710e+000 +1.708597475766710e+000i
4.697589714875252e+000
7.909835726311629e+000
程序二:syms x;
for k=1:6;
for l=1:6;
ak=(k-1/2)*pi; al=(l-1/2)*pi; num2str(ak);
xl=(-sinh(al)+sin(al))/(cosh(al)+cos(al));
xk=(-sinh(ak)+sin(ak))/(cosh(ak)+cos(ak));
num2str(xl);
num2str(xk);
aa=strcat('(sinh((',num2str(ak),')*x).*(1-x).*sinh((',num2str(al),')*x))');
bb=strcat('(sin((',num2str(al),')*x).*(1-x).*sinh((',num2str(ak),')*x))');
cc=strcat(' (',num2str(xl),').*(1-x).*(sinh((',num2str(ak),')*x).*cosh((',num2str(al),')*x))');
dd=strcat(' -(',num2str(xl),').*(1-x).*(sinh((',num2str(ak),')*x).*cos((',num2str(al),')*x))');
ee=strcat('(1-x).*(sinh((',num2str(al),')*x).*sin((',num2str(ak),')*x))');
ff=strcat('(1-x).*(sin((',num2str(al),')*x).*sin((',num2str(ak),')*x))');
gg=strcat(' (',num2str(xl),').*(1-x).*(sin((',num2str(ak),')*x).*cosh((',num2str(al),')*x))');
hh=strcat(' -(',num2str(xl),').*(1-x).*(sin((',num2str(ak),')*x).*cos((',num2str(al),')*x))');
ii=strcat(' (',num2str(xk),').*(1-x).*(sinh((',num2str(al),')*x).*cosh((',num2str(ak),')*x))');
jj=strcat(' (',num2str(xk),').*(1-x).*(sin((',num2str(al),')*x).*cosh((',num2str(ak),')*x))');
kk=strcat(' (',num2str(xl),').*(',num2str(xk),').*(1-x).*(cosh((',num2str(ak),')*x).*cosh((',num2str(al),')*x))');
ll=strcat(' -(',num2str(xl),').*(',num2str(xk),').*(1-x).*(cosh((',num2str(ak),')*x).*cos((',num2str(al),')*x))');
mm=strcat(' -(',num2str(xk),').*(1-x).*(sinh((',num2str(al),')*x).*cos((',num2str(ak),')*x))');
nn=strcat(' -(',num2str(xk),').*(1-x).*(sin((',num2str(al),')*x).*cos((',num2str(ak),')*x))');
oo=strcat(' -(',num2str(xl),').*(',num2str(xk),').*(1-x).*(cosh((',num2str(al),')*x).*cos((',num2str(ak),')*x))');
pp=strcat(' (',num2str(xl),').*(',num2str(xk),').*(1-x).*(cos((',num2str(ak),')*x).*cos((',num2str(al),')*x))');
qq=strcat('(',num2str(ak),').*(',num2str(al),').*(',aa,'+',bb,'+',cc,'+',dd,'+',ee,'+',ff,'+',gg,'+',hh,'+',ii,'+',jj,'+',kk,'+',ll,'+',mm,'+',nn,'+',oo,'+',pp,')');
ss(k,l)=quadl(inline(qq),0,1);
aa1=strcat('(cosh((',num2str(ak),')*x).*cosh((',num2str(al),')*x))');
bb1=strcat('(cosh((',num2str(ak),')*x).*cos((',num2str(al),')*x))');
cc1=strcat(' (',num2str(xl),').*(sinh((',num2str(al),')*x).*cosh((',num2str(ak),')*x))');
dd1=strcat(' (',num2str(xl),').*(cosh((',num2str(ak),')*x).*sin((',num2str(al),')*x))');
ee1=strcat('-(cos((',num2str(ak),')*x).*cosh((',num2str(al),')*x))');
ff1=strcat('-(cos((',num2str(al),')*x).*cos((',num2str(ak),')*x))');
gg1=strcat(' -(',num2str(xl),').*(cos((',num2str(ak),')*x).*sinh((',num2str(al),')*x))');
hh1=strcat(' -(',num2str(xl),').*(cos((',num2str(ak),')*x).*sin((',num2str(al),')*x))');
ii1=strcat(' (',num2str(xk),').*(sinh((',num2str(ak),')*x).*cosh((',num2str(al),')*x))');
jj1=strcat(' (',num2str(xk),').*(sinh((',num2str(ak),')*x).*cos((',num2str(al),')*x))');
kk1=strcat(' (',num2str(xl),').*(',num2str(xk),').*(sinh((',num2str(ak),')*x).*sinh((',num2str(al),')*x))');
ll1=strcat(' (',num2str(xl),').*(',num2str(xk),').*(sinh((',num2str(ak),')*x).*sin((',num2str(al),')*x))');
mm1=strcat('-(',num2str(xk),').*(sin((',num2str(ak),')*x).*cosh((',num2str(al),')*x))');
nn1=strcat(' -(',num2str(xk),').*(sin((',num2str(ak),')*x).*cos((',num2str(al),')*x))');
oo1=strcat('-(',num2str(xl),').*(',num2str(xk),').*(sinh((',num2str(al),')*x).*sin((',num2str(ak),')*x))');
pp1=strcat(' -(',num2str(xl),').*(',num2str(xk),').*(sin((',num2str(ak),')*x).*sin((',num2str(al),')*x))');
qq1=strcat('(',num2str(ak),').*(',num2str(al),').*(',aa1,'+',bb1,'+',cc1,'+',dd1,'+',ee1,'+',ff1,'+',gg1,'+',hh1,'+',ii1,'+',jj1,'+',kk1,'+',ll1,'+',mm1,'+',nn1,'+',oo1,'+',pp1,')');
ss1(k,l)=quadl(inline(qq1),0,1);
ww(k,l)=-4*ss(k,l)-14*ss1(k,l);
s(k,l)=ak^4;
if k==l;
p(k,l)=s(k,l);
else
p(k,l)=0;
end
rr(k,l)=ww(k,l)+p(k,l);
end
end
disp(rr);
d=eig(rr)
c=sqrt(sqrt(d))
运行结果:1.0e+004 *

-0.0021 0.0046 -0.0063 0.0034 -0.0033 0.0037
-0.0067 0.0647 0.0071 -0.0089 0.0080 -0.0096
-0.0078 -0.0082 0.4347 -0.0039 -0.0143 0.0093
-0.0097 -0.0153 -0.0164 1.5878 -0.0125 -0.0156
-0.0063 -0.0154 -0.0217 -0.0210 4.2099 -0.0206
-0.0100 -0.0186 -0.0206 -0.0316 -0.0292 9.2654


d =

1.0e+004 *

9.2656
4.2099
1.5878
-0.0017
0.0644
0.4346


c =

17.4469
14.3241
11.2253
1.4446 + 1.4446i
5.0367
8.1192
检查不出两个程序方法有什么错误,一样的问题,一样的参数,为什么结果不一样呢?求高手指教,积分后的结果不一样,即产生的矩阵对应位置上数据有差异,本来应该是相等的,为什么会出现差异呢? 具体的所求问题见附件,谢谢,这里好像粘贴不了公式。
http://www.labfans.com/bbs/images/statusicon/user_online.gif http://www.labfans.com/bbs/images/buttons/reputation.gif http://www.labfans.com/bbs/images/buttons/report.gif   http://www.labfans.com/bbs/images/misc/progress.gif

[ 本帖最后由 ncc198611 于 2009-5-22 22:20 编辑 ]

ChaChing 发表于 2009-5-22 22:07

想想这若是别人的帖, LZ会看吗?
修饰下并说明那差异

ncc198611 发表于 2009-5-22 22:24

回复 沙发 ChaChing 的帖子

谢谢你的意见
页: [1]
查看完整版本: 一个问题两种编程方法,为什么结果不一样呢