fajessmi 发表于 2007-5-9 12:51

计算数值积分的程序出了错,请帮忙看看

被积函数为-40*sin(x),积分下上限分别为k,k+2*pi,k的范围是0-2pi,我编了如下程序,结果出错,由于刚接触matlab,不知道错在哪里,请帮我看看,谢谢大家了。
w0=1;
w=5;
Omg=2;
D=1;
b1=0.08;
b2=0.005;
E=0.2;
e=0.5;
function f=fx(x)
f=exp(-2.*((Omg-2.*w0).*x+E.*sin(x)./(2.*w0))./b2);
y=0;
for k=0:2pi;
    g=k;
    gl=k+2.*pi;
    y=y+quad(fx,g,gl);
end
y

eight 发表于 2007-5-9 13:17

原帖由 fajessmi 于 2007-5-9 12:51 发表 http://forum.vibunion.com/forum/images/common/back.gif
被积函数为-40*sin(x),积分下上限分别为k,k+2*pi,k的范围是0-2pi,我编了如下程序,结果出错,由于刚接触matlab,不知道错在哪里,请帮我看看,谢谢大家了。
w0=1;
w=5;
Omg=2;
D=1;
b1=0.08;
b2=0.00 ...


建议先找本基础书看看,了解脚本文件和m文件的区别和用法

rocwoods 发表于 2007-5-9 13:38

function y=fajessmi(w0,w,Omg,D,b1,b2,E,e)
%利用内嵌函数(nested function)结构建立被积函数
function f=fx(x)
f=exp(-2.*((Omg-2.*w0).*x+E.*sin(x)./(2.*w0))./b2);
end
%给y预分配存储空间,大小等于下面k的循环次数;
y=zeros(size(0:20));
%计算积分
for k=0:20
    g=k*pi/10;
    gl=g+2*pi;
    y(k+1)=quad(@fx,g,gl);
end
%逐次累加y
y=cumsum(y);
end
把上面函数保存,运行
y=fajessmi(1,5,2,1,0.08,0.005,0.2,0.5)
应该是你想要的吧
不清楚的函数再help之

fajessmi 发表于 2007-5-9 14:06

不是,这些参数都是已知的数值,我想要得到的是这个函数在k到k+2pi上的积分值,能写个过程让我参考下吗?

rocwoods 发表于 2007-5-9 14:13

已经写的很清楚了。建议编程的时候多用m文件而少用脚本文件。虽然参数确定,但是还是要养成编写m文件的习惯,养成这样的习惯对你将来调试程序什么的都有很大好处。y=fajessmi(1,5,2,1,0.08,0.005,0.2,0.5)不就是固定参数w0=1;
w=5;
Omg=2;
D=1;
b1=0.08;
b2=0.005;
E=0.2;
e=0.5;
了吗?

fajessmi 发表于 2007-5-9 14:53

恩,知道了,谢谢你,可能有些小问题,不能运行,我去调试调试下。
页: [1]
查看完整版本: 计算数值积分的程序出了错,请帮忙看看