作者ejialan (eji)
看板MATLAB
标题Re: [讨论] 积分上限
时间Thu Jun 20 11:00:53 2013
※ 引述《hsuanboy (压力)》之铭言:
: f(x)=0.000000000001602*x^5+0.000000003780060*x^4-0.000000034210106*x^3
: -0.000166783274301*x^2+0.000174904487267*x+1.103243573568212
: th1
: ∫ f(x)dx
: 0 1
: ------------- = --------- ==> 可求出th1
: 90 100
: ∫ f(x)dx
: 0
: th2
: ∫ f(x)dx
: th1 1
: ------------- = --------- ==> 可求出th2
: 90 100
: ∫ f(x)dx
: 0
: th3
: ∫ f(x)dx
: th2 1
: ------------- = --------- ==> 可求出th3
: 90 100
: ∫ f(x)dx
: 0
: 以上是我想表达的形式 第一次的积分下限初始值是0 每次求出积分上限值之後
: 会在带入到下一行的积分下限去做运算 之後又会再求出积分上限值
: 依此类推 做100次
: 下面是我自己写的程式 程式有跑出来 但是最後得到角度很怪
: 再做积分时 我是用径度去做就算 算出上限的值都为劲度
: for回圈的最後有再换成角度的形式 角度是以g表示
: 程式如下:
: syms x theatai
: th(1)=0;
: f=0.000000000001602*x^5+0.000000003780060*x^4-0.000000034210106*x^3-0.000166783274301*x^2+0.000174904487267*x+1.103243573568212;
: area=int(f,0,pi/2);
: integralf=@(s,t) int(f,x,s,t);
: for i=1:100
: sol = solve(integralf( th(i),theatai )-area*1/100);
: d = eval(sol);
: e = d(find( 0<d & d<pi/2 ));
: th(i+1) = e;
: g(i) = e*(180/pi);
: end
针对你的函数是多项式
matlab有几个函数是针对多项式写的
在定义多项式时只要把系数降羃排成列向量
之後可以用polyval计算多项式的值
polyint可以算反导函数的系数
计算会比使用符号运算快
另外solve也可改成fsolve或fzero
避免解出多解还要挑的情况
以下是照你的程式改写给你参考
th=zeros(1,100);
a=[0.000000000001602
0.000000003780060
-0.000000034210106
-0.000166783274301
0.000174904487267
1.103243573568212]';
ai=polyint(a);
area=polyval(ai,pi/2)-polyval(ai,0);
integralf=@(s,t) polyval(ai,t)-polyval(ai,s)-area/100;
for i=1:100
sol = fzero(@(t) integralf(th(i),t),th(i));
th(i+1) = sol;
g(i) = sol*(180/pi);
end
角度差距是先递减再递增
因为你的函数图形是先递增再递减
可以plot(diff(g))来看
: 奇怪的问题点在 : 实际用手去计算每个角度之间的间距值应该是会越来越大才对
: 但是我算完後 每个角度的间距都是差0.9度 程式哪边有写错呢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.121.146.175
1F:→ hsuanboy:有个问题想问一下 我用figure;plot(g)去画图来看 06/20 11:31
2F:→ hsuanboy:跟用plot(diff(g))来看 不一样的地放是在哪边呢 另外 06/20 11:32
3F:→ hsuanboy:这个函数本来应该是 -90~90度之间 中间y值最高 06/20 11:34
4F:→ hsuanboy:但是我只想取0~90度的范围就好 函数应该不是为递减形式吗 06/20 11:36
5F:→ ejialan:diff是把离散数据做差分 所以diff(g)可以看出你的角度差 06/20 11:46
6F:→ ejialan:所以你的f(x) 引数到底是径度还是弧度?因为你的说明和 06/20 11:54
7F:→ ejialan:程式写的不一致 06/20 11:54
8F:→ hsuanboy:真的很谢谢你喔 06/20 11:54
9F:→ ejialan:上面打错应该是径度还是角度 如果是角度的话积分上下限 06/20 11:57
10F:→ ejialan:就要改成用角度 06/20 11:58
11F:→ hsuanboy:每次再带入函数的时候 都是用劲度的 06/20 12:12
12F:→ hsuanboy:最後再把所有的劲度换成角度 06/20 12:13
13F:→ hsuanboy:不好意思 刚发现我想表示的有点错误 在分母的积分上限90 06/20 12:17
14F:→ hsuanboy:应该改成pi/2为劲度才对 再带入函数 求出的上限都是劲度 06/20 12:18
15F:→ hsuanboy:最後才把所有的劲度换成角度 06/20 12:18
16F:推 hsuanboy:不好意思 说明有点错误 06/20 12:29