声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2793|回复: 13

[编程技巧] 关于matlab积分的问题

[复制链接]
发表于 2007-12-3 10:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
急问论坛各位大侠,目前一个带参数积分问题,我也参看了论坛已有帖子,但总还是出现如下问题:
被积函数表达式:
    fun = 1/a .*(10.^(-8.0395 .*x.^2 + 1.4)) .*exp(-1.414.*abs(57.2958 .*x-b)./8 + i .* 3.414 .*sin(x))
其中,a,b为参数,x为被积分变量。我根据xjzuo的示例贴,程序如下,

fun = strcat('(1 / ',num2str(a),'* 10.^(-8.0395 .*.^2 + 1.4) .* exp(-1.414 .* abs(57.2958 .*x-',num2str(b),') ./ 8 + i .* 3.1416 .* sin(x))');
output = quadl(inline(fun), -pi/2,pi/2);

总是提示:

Too many input arguments

多谢高手指点!

[ 本帖最后由 eight 于 2007-12-3 11:09 编辑 ]

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2007-12-3 10:31 | 显示全部楼层
a,b 的值给了吗...
程序也不完整
发表于 2007-12-3 10:33 | 显示全部楼层
变量x没有给积分域。
而且要考虑abs(...)的积分。
 楼主| 发表于 2007-12-3 10:38 | 显示全部楼层
 楼主| 发表于 2007-12-3 10:40 | 显示全部楼层
原帖由 studyboy 于 2007-12-3 10:33 发表
变量x没有给积分域。
而且要考虑abs(...)的积分。

我用int积分方式可以获得数值结果,但不知道为什么,循环比如200次左右,就出现错误,所以我现在想用quad,即数值积分方式求解。
abs的积分不好单独考虑,因为根据被积表达式,不好做。
x没有给定积分域,什么意思?
发表于 2007-12-3 10:41 | 显示全部楼层

回复 #4 snakehl 的帖子

a,b 是一个循环,还是就一个数
如果就一个数,直接代就行了
 楼主| 发表于 2007-12-3 10:47 | 显示全部楼层
原帖由 sigma665 于 2007-12-3 10:41 发表
a,b 是一个循环,还是就一个数
如果就一个数,直接代就行了

a,b是循环中的取值,每次循环取值不同。假如不做循环,我修改如下:
%a = 3;
%b = 2;
%fun = strcat('(1 / a,'* 10.^(-8.0395 .*.^2 + 1.4) .* exp(-1.414 .* abs(57.2958 .*x- b',') ./ 8 + i .* 3.1416 .* sin(x))');
fun = strcat('(1 / 3','* 10.^(-8.0395 .*.^2 + 1.4) .* exp(-1.414 .* abs(57.2958 .*x- 2',') ./ 8 + i .* 3.1416 .* sin(x))');

output = quadl(inline(fun), -pi/2,pi/2);

也提示同样错误。

[ 本帖最后由 snakehl 于 2007-12-3 10:48 编辑 ]
发表于 2007-12-3 11:06 | 显示全部楼层

回复 #7 snakehl 的帖子

??? Error using ==> inlineeval at 15
Error in inline expression ==> (1 / 3* 10.^(-8.0395 .*.^2 + 1.4) .* exp(-1.414 .*
abs(57.2958 .*x- 2) ./ 8 + i .* 3.1416 .* sin(x))
??? Error: Unexpected MATLAB operator.

Error in ==> inline.feval at 36
        INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr,
        INLINE_OBJ_.expr);

Error in ==> quadl at 70
y = feval(f,x,varargin{:}); y = y(:).';

好象是说里面的符号用错了
发表于 2007-12-3 11:12 | 显示全部楼层
fun = strcat('(1 / ',num2str(a),'* 10.^(-8.0395 .*.^2 + 1.4) .* exp(-1.414 .* abs(57.2958 .*x-',num2str(b),') ./ 8 + i .* 3.1416 .* sin(x))');

表达式错了
发表于 2007-12-3 11:20 | 显示全部楼层
你的方程是这个吗??
未命名.JPG
 楼主| 发表于 2007-12-3 11:22 | 显示全部楼层
原帖由 sigma665 于 2007-12-3 11:12 发表
fun = strcat('(1 / ',num2str(a),'* 10.^(-8.0395 .*.^2 + 1.4) .* exp(-1.414 .* abs(57.2958 .*x-',num2str(b),') ./ 8 + i .* 3.1416 .* sin(x))');

表达式错了

我参看其他例子,实在没看出来区别,该如何修改?
非常感谢你的解答!再一次谢谢!
 楼主| 发表于 2007-12-3 11:23 | 显示全部楼层
原帖由 sigma665 于 2007-12-3 11:20 发表
你的方程是这个吗??

恩,是的,
发表于 2007-12-3 12:37 | 显示全部楼层
% a=3;b=2;
fun=strcat('1/3*(10.^(-8.0395*x.^2+1.4)).*exp(-1.414*abs(57.2958*x-2)./8 + i*3.414.*sin(x))');
output = quadl(inline(fun), -pi/2,pi/2);


% 循环
for a=1:10
    for b=1:10
        num2str(a);
        fun=strcat('1/',num2str(a),'*(10.^(-8.0395*x.^2+1.4)).*exp(-1.414*abs(57.2958*x-',num2str(b),')./8 + i*3.414.*sin(x))');
        output(a,b)=quadl(inline(fun), -pi/2,pi/2);
    end
end


结果:
3.76728362966662 + 0.156004872614524i 3.71292841053851 + 0.307724327002373i 3.62420674643242 + 0.451080473964131i 3.50381833548057 + 0.582395834984161i 3.35533888050403 + 0.698558110002389i 3.18303800072701 + 0.797147177117504i 2.99166352148383 + 0.876514683741419i 2.78622172177921 + 0.935817726774348i 2.57174647589772 + 0.974998805634349i 2.35310004934373 + 0.994728884983318i
1.88364181482657 + 0.0780024363102973i 1.85646420526360 + 0.153862163503730i 1.81210337321147 + 0.225540236984197i 1.75190916774029 + 0.291197917492080i 1.67766944025202 + 0.349279055001195i 1.59151900036351 + 0.398573588558752i 1.49583176074191 + 0.438257341870709i 1.39311035681233 + 0.467908603809923i 1.28587323795734 + 0.487499402809035i 1.17655002467722 + 0.497364442489007i
1.25576107003913 + 0.0520016159940107i 1.23764280350143 + 0.102574775665714i 1.20806891546520 + 0.150360157985361i 1.16793944516019 + 0.194131944994720i 1.11844609794617 + 0.232852643439720i 1.06101266690900 + 0.265715725705835i 0.997221173835990 + 0.292171561239412i 0.928740237879969 + 0.311939069204097i 0.857248825303503 + 0.324999601876006i 0.784366683118148 + 0.331576294992671i
0.941820802529346 + 0.0390012119955080i 0.928232102626073 + 0.0769310817492859i 0.906051686598900 + 0.112770118489021i 0.875954583861985 + 0.145598958742367i 0.838834573468224 + 0.174639482571537i 0.795759499755340 + 0.199286794205431i 0.747915880375509 + 0.219128670933101i 0.696555178409977 + 0.233954301903073i 0.642936618977627 + 0.243749701407005i 0.588275012338611 + 0.248682221244503i
0.753456642023477 + 0.0312009695964064i 0.742585682100858 + 0.0615448653994287i 0.724841349279120 + 0.0902160947912167i 0.700763667097793 + 0.116479166986015i 0.671067658765100 + 0.139711586057759i 0.636607599804272 + 0.159429435364345i 0.598332704300407 + 0.175302936746481i 0.557244142727982 + 0.187163441522458i 0.514349295182102 + 0.194999761125604i 0.470620009870888 + 0.198945776995603i
0.627880535019564 + 0.0260008079970053i 0.618821401750715 + 0.0512873878328572i 0.604034457740760 + 0.0751800789848458i 0.583969722579813 + 0.0970659724923585i 0.559223048970917 + 0.116426321714799i 0.530506333162481 + 0.132857862800134i 0.498610586907763 + 0.146085780617906i 0.464370118939985 + 0.155969534602049i 0.428624412651752 + 0.162499800938003i 0.392183341559074 + 0.165788147496336i
0.538183315731055 + 0.0222864068545760i 0.530418344366102 + 0.0439606181344352i 0.517743820918932 + 0.0644400677054004i 0.500545476496983 + 0.0831994049934501i 0.479334041975072 + 0.0997939900412560i 0.454719714139270 + 0.113878168114400i 0.427380503063797 + 0.125216383386777i 0.398031530519987 + 0.133688172516042i 0.367392353701501 + 0.139285543661145i 0.336157149907777 + 0.142104126425430i
0.470910401273388 + 0.0195006059893861i 0.464116051318544 + 0.0384655408719160i 0.453025843304065 + 0.0563850592422253i 0.437977291934860 + 0.0727994793692688i 0.419417286728188 + 0.0873197412860990i 0.397879749871861 + 0.0996433971001005i 0.373957940180822 + 0.109564335463430i 0.348277589196716 + 0.116977150947813i 0.321468309488814 + 0.121874850703502i 0.294137506169305 + 0.124341110622252i
0.418587023354122 + 0.0173338719905655i 0.412547601172039 + 0.0341915918861476i 0.402689638492503 + 0.0501200526597558i 0.389313148386542 + 0.0647106483282390i 0.372815365980611 + 0.0776175478098658i 0.353670888774988 + 0.0885719085334226i 0.332407057938509 + 0.0973905204119376i 0.309580079285970 + 0.103979689731389i 0.285749608425726 + 0.108333200621385i 0.261455561039383 + 0.110525431664224i
0.376728321016996 + 0.0156004847955999i 0.371292841054835 + 0.0307724326975328i 0.362420674643252 + 0.0451080473937803i 0.350381833547888 + 0.0582395834954151i 0.335533829382550 + 0.0698557930288793i 0.318303799897489 + 0.0797147176800804i 0.299166352144658 + 0.0876514683707439i 0.278622071357373 + 0.0935817207582500i 0.257174647583154 + 0.0974998805592467i 0.235310004926020 + 0.0994728884935589i

评分

1

查看全部评分

 楼主| 发表于 2007-12-3 12:39 | 显示全部楼层
原帖由 sigma665 于 2007-12-3 12:37 发表
% a=3;b=2;
fun=strcat('1/3*(10.^(-8.0395*x.^2+1.4)).*exp(-1.414*abs(57.2958*x-2)./8 + i*3.414.*sin(x))');
output = quadl(inline(fun), -pi/2,pi/2);

% 循环
for a=1:10
    for b=1:10
       ...

哇塞,非常感谢,好的,我基于你给的程序修改下。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-17 11:17 , Processed in 0.070342 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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