找回密码
 注册
Simdroid-非首页
查看: 95|回复: 6

MATLAB求助帖:同时含有根号和三角函数的符号积分

[复制链接]
发表于 2015-3-24 16:17:45 | 显示全部楼层 |阅读模式 来自 湖北武汉

求各路大神指导如何对这个式子积分,直接 用 int 函数不能积出来。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2015-3-25 21:38:40 | 显示全部楼层 来自 加拿大
Simdroid开发平台
如果确定符号积分 int 求不出来,那就用数值积分把,这个数值积分很容易计算的
回复 不支持

使用道具 举报

 楼主| 发表于 2015-3-26 11:08:00 | 显示全部楼层 来自 湖北武汉
winner245 发表于 2015-3-25 21:38
如果确定符号积分 int 求不出来,那就用数值积分把,这个数值积分很容易计算的 ...

用数值积分可以求出来,结果有点复杂啊,不利于下一步的运算,有没有其他方法呢?
比如用这个复合梯形求积公式:
function s = trapr1(f,a,b,n)
h=(b-a)/n;
s=0;
for k=1:(n-1)
    x=a+h*k;
    s=s+feval('f',x);
end
s=h*(feval('f',a)+feval('f',b))/2+h*s;
————————————————
function y = f(x)
syms sita t k x;
y=sqrt(1-((2*t/k)^2)*((x/sita)^2))*cos(x);
end
—————————————————
trapr1('f',0,sita,n)  这里n取 20 的话,结果:
(sita*(cos(sita)*(1 - (4*t^2)/k^2)^(1/2) + 1))/40 + (sita*(cos(sita/2)*(1 - t^2/k^2)^(1/2) + cos(sita/4)*(1 - t^2/(4*k^2))^(1/2) + cos((3*sita)/4)*(1 - (9*t^2)/(4*k^2))^(1/2) + cos(sita/5)*(1 - (4*t^2)/(25*k^2))^(1/2) + cos(sita/10)*(1 - t^2/(25*k^2))^(1/2) + cos((3*sita)/10)*(1 - (9*t^2)/(25*k^2))^(1/2) + cos((2*sita)/5)*(1 - (16*t^2)/(25*k^2))^(1/2) + cos((3*sita)/5)*(1 - (36*t^2)/(25*k^2))^(1/2) + cos((7*sita)/10)*(1 - (49*t^2)/(25*k^2))^(1/2) + cos((4*sita)/5)*(1 - (64*t^2)/(25*k^2))^(1/2) + cos(sita/20)*(1 - t^2/(100*k^2))^(1/2) + cos((9*sita)/10)*(1 - (81*t^2)/(25*k^2))^(1/2) + cos((3*sita)/20)*(1 - (9*t^2)/(100*k^2))^(1/2) + cos((7*sita)/20)*(1 - (49*t^2)/(100*k^2))^(1/2) + cos((9*sita)/20)*(1 - (81*t^2)/(100*k^2))^(1/2) + cos((11*sita)/20)*(1 - (121*t^2)/(100*k^2))^(1/2) + cos((13*sita)/20)*(1 - (169*t^2)/(100*k^2))^(1/2) + cos((17*sita)/20)*(1 - (289*t^2)/(100*k^2))^(1/2) + cos((19*sita)/20)*(1 - (361*t^2)/(100*k^2))^(1/2)))/20

看到都头晕啊。。 n取值小了的话,又怕结果不准。。
回复 不支持

使用道具 举报

发表于 2015-3-26 21:14:39 | 显示全部楼层 来自 加拿大
独孤神宇 发表于 2015-3-26 11:08
用数值积分可以求出来,结果有点复杂啊,不利于下一步的运算,有没有其他方法呢?
比如用这个复合梯形求 ...

什么叫“数值积分不利于下一步运算”?

你这里表面上虽然用的是符号计算,可算法还是近似的数值方法,只不过你把数值结果表示为了符号表达式,这跟数值计算有什么区别?而且梯形公式的精度也很低,很可能无法满足你的要求,如果你提高 n,那么效率会很低。所以,完全可以用真正的数值计算来求解
回复 不支持

使用道具 举报

 楼主| 发表于 2015-3-27 14:17:18 | 显示全部楼层 来自 湖北武汉
winner245 发表于 2015-3-26 21:14
什么叫“数值积分不利于下一步运算”?

你这里表面上虽然用的是符号计算,可算法还是近似的数值方法,只 ...

其实这个积分是可以求出来的,只是不知道如何积分,最简单的 int 函数无法积分出来,不知道还有什么积分函数/方法没有?
数值解是无法或者很难进行下一步运算的,因为要求最后能够得到解析解。(式中的t,k,sita 只是在积分时当做常数,实际上他们都是关于其他变量的函数)
一般数值积分就知道 龙贝格、高斯公式这些常用的,也不知道 你所说的的 “真正的数值积分方法”到底指的什么方法?
回复 不支持

使用道具 举报

发表于 2015-3-27 22:14:34 | 显示全部楼层 来自 加拿大
独孤神宇 发表于 2015-3-27 14:17
其实这个积分是可以求出来的,只是不知道如何积分,最简单的 int 函数无法积分出来,不知道还有什么积分 ...

我没有说高斯积分不是数值积分,我是说你不该用符号计算的办法来实现数值积分,这样虽然会得到一个符号表达式,但它不是解析解(如果这也算解析解的话,那任何积分都存在这种解),另外这样做也导致效率很低。真正的解析解是说你可以用显式表达式或一些虽不存在显式但工程中已经可以很好量化的特殊函数来精确表达,是不存在近似的表达式。

我建议你直接用数值计算来实现数值积分,而你却误解了我的意思。不要以为数值计算只是给你一个数值结果就不能参与下一步计算,事实上对于计算机终端而言,根本不用关心是根据解析表达式来进行下一步计算还是根据数值结果来进一步计算,它最终需要的就是一个结果,从这个意义上讲,数值计算不会阻碍你进行下一步计算。这一点在《MATLAB高效编程:25个案例分析》一书中有过清楚的阐述
回复 不支持

使用道具 举报

发表于 2015-3-27 23:32:20 | 显示全部楼层 来自 辽宁沈阳
本帖最后由 bainhome 于 2015-3-27 23:51 编辑

赞同winner245观点,其实如在数值积分程序里看到“syms”,才是不利于下步计算的method,MATLAB符号计算机制相比几个其他软件难说犀利,但话说回来图片里被积函数粗看是超越函数,这能有解析解?很久没看数学,记不清了...
新版本参阅integral之类的函数,老版本好像是quad系列,至于复杂带规律表达式,就用匿名函数构造,粗看后来楼主发的那段程序,感觉好像就是往积分里动态传递参数没弄利索(猜测,也不一定对)。如果是这样,详见匿名函数传递参数方法,以前也有些传统的解决办法,论坛类似总结解答太多,不妨搜索参数传递,不光是积分,其他如:微分方程、优化、非线性方程等等,只要调用句柄的格式,参数传递思路大同小异,解决这问题,一元函数的积分求解估计容易。25个案例里的积分写得相当经典,里面部分内容可在论坛精华帖搜索,总之...算了,还是不总之了。
ps:论坛最近一顿no zuo no die why you try的折腾,现在居然不能加分...

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-30 09:29 , Processed in 0.036874 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表