蘑菇会功夫 发表于 2012-11-11 16:28

新人求助:为什么我的被积函数积不出来?

计算S=∫(6378245*(1-0.0067)./((1-0.0067.*sin(x).^2).^1.5))dx
fesin.m
function f = fesin(x)
            f=6378245*(1-0.0067)./((1-0.0067.*sin(x).^2).^1.5)
command 窗口
quad(@fesin,0,pi/3)
为什么运行结果是f =

1.0e+006 *

    6.3355    6.3368    6.3405    6.3515    6.3660    6.3751    6.3836


f =

1.0e+006 *

    6.3358    6.3384


f =

1.0e+006 *

    6.3356    6.3362


f =

1.0e+006 *

    6.3355    6.3357


f =

1.0e+006 *

    6.3355    6.3356


f =

1.0e+006 *

    6.3356    6.3358
(后面还有很长,因为版面没有复制完)

向高人求解啊~~{:{12}:}
还有如果用符号积分的话
a=6378140;
b=6356755;
c=(a^2-b^2)/a^2;

pi=3.1415926;
syms x
M=a*(1-c)./((1-c.*(sin(x).^2)).^1.5)
S=int(M,x,0,pi/3)

结果是:
M =

850328590968027/134217728/(1-7718204252374611/1152921504606846976*sin(x)^2)^(3/2)



S =

1/1145203300354472365*(-52504077973801097849935420499976*sin(4716158420903303/4503599627370496)+52504077973801097849935420499976*sin(4716158420903303/4503599627370496)^3)/(1152921504606846976-1160639708859221587*sin(4716158420903303/4503599627370496)^2+7718204252374611*sin(4716158420903303/4503599627370496)^4)^(1/2)+7304266978122873893289984/1145203300354472365*EllipticE(sin(4716158420903303/4503599627370496),1/1073741824*7718204252374611^(1/2))

数值好像是对的,但是不知道怎么会这么会用这种分数表示...
求高人救命哪~~~~

蘑菇会功夫 发表于 2012-11-11 21:03

{:{16}:}难道是我的题目太长了么...只要把被积函数换成sin(x)都可以运行了...求大神啊~~~

happy 发表于 2012-11-12 09:29

f=6378245*(1-0.0067)./((1-0.0067.*sin(x).^2).^1.5)后面加上分号,否则每次运行该行,command窗口就会显示该行的运行结果

蘑菇会功夫 发表于 2012-11-12 21:04

happy 发表于 2012-11-12 09:29 static/image/common/back.gif
后面加上分号,否则每次运行该行,command窗口就会显示该行的运行结果

quad(@fesin,0,pi/3)

ans =

6.6542e+006

果然居然是这个分号的关系!!谢谢您了~特别感谢~!!^_^,还有下面的第二个问题也可以请教下么?

ChaChing 发表于 2012-11-12 22:08

本帖最后由 ChaChing 于 2012-11-12 22:15 编辑

个人水平有限,原来LZ是问重复显示这问题!?
符号积分我的版本(R2009a)是会出现
Warning: Explicit integral could not be found.

ChaChing 发表于 2012-11-12 22:14

本帖最后由 ChaChing 于 2012-11-13 09:12 编辑

其实个人更好奇的是, 为何函数值第一次为1*7, 而后都为1*2 ??
习惯上都已加上分号了, 所以反而没能注意到! 我想roc/bain应该知道
或许较有空档再研究下quad函数内容

蘑菇会功夫 发表于 2012-11-13 22:28

ChaChing 发表于 2012-11-12 22:08 static/image/common/back.gif
个人水平有限,原来LZ是问重复显示这问题!?
符号积分我的版本(R2009a)是会出现

我的matlab是7.0版的。它貌似是可以计算,比如说算出的M =

850328590968027/134217728/(1-7718204252374611/1152921504606846976*sin(x)^2)^(3/2)
对应着公式去找的话,850328590968027/134217728的值就是a*(1-c),两个值都是 算出的6.3354e+006,所以数值貌似是没有错的..只是不能理解为什么要用850328590968027/134217728这样一种表达方式..我同学的计算结果也是这样...不过我也没有对后面的值一一检验。

蘑菇会功夫 发表于 2012-11-13 22:45

ChaChing 发表于 2012-11-12 22:14 static/image/common/back.gif
其实个人更好奇的是, 为何函数值第一次为1*7, 而后都为1*2 ??
习惯上都已加上分号了, 所以反而没能注意到! ...

{:{15}:}quad函数是为了积这个函数才临时查的,就是照猫画虎地用,还不太清楚它到底是怎么运算的。所以我还不清楚为什么它的值是一个矩阵,也不知道它为什么会有这么多f值,也不知道它为什么第一个f值和和之后的f值的长度不同....

happy 发表于 2012-11-14 09:37

第二个问题,这是matlab运算的一个规定,不论数值矩阵的元素原先是用分数还是用浮点数表示,转化后的符号矩阵都将以最接近的精确 有理数形式给出,即显示的分数形式给出。

happy 发表于 2012-11-14 09:40

ChaChing 发表于 2012-11-12 22:14 static/image/common/back.gif
其实个人更好奇的是, 为何函数值第一次为1*7, 而后都为1*2 ??
习惯上都已加上分号了, 所以反而没能注意到! ...

算法决定的,quad先选定7个积分点,将积分区域分为三个区域分别进行积分
前面7个值是7个积分点的计算结果

后面quad就采用自适应辛普森积分公式分别对三个区域进行积分
2个值的就是这个过程中不断产生的

蘑菇会功夫 发表于 2012-11-14 11:30

happy 发表于 2012-11-14 09:37 static/image/common/back.gif
第二个问题,这是matlab运算的一个规定,不论数值矩阵的元素原先是用分数还是用浮点数表示,转化后的符号矩 ...

理解了~!谢谢您~~~~~~~~~~~~~
页: [1]
查看完整版本: 新人求助:为什么我的被积函数积不出来?