关于matlab的积分问题,积不出来怎么办

symsx;>>y=3251*exp(-(x-8555)^2/2550^2)+378.4*exp(-(x-1.178e+004)^2/1281^2)+5.157e+017... syms x;
>> y=3251*exp(-(x-8555)^2/2550^2)+378.4*exp(-(x-1.178e+004)^2/1281^2)+ 5.157e+017*exp(-(x-5.89e+005)^2/1.007e+005^2)

y =

515700000000000000/exp((x - 589000)^2/10140490000) + 1892/(5*exp((x - 11780)^2/1640961)) + 3251/exp((x - 8555)^2/6502500)
>> int(sqrt(diff(y,x)^2+1),x)
Warning: Explicit integral could not be found.
> In sym.int at 64

ans =

int((((515700000000000000*(x/5070245000 - 31/266855))/exp((x - 589000)^2/10140490000) + (1892*((2*x)/1640961 - 23560/1640961))/(5*exp((x - 11780)^2/1640961)) + (3251*(x/3251250 - 1711/650250))/exp((x - 8555)^2/6502500))^2 + 1)^(1/2), x)
积不出来怎么办
展开
 我来答
tianxiawulang
2013-06-24 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2584万
展开全部

像这类曲线积分的表达式很难求出解析表达式的,没有办法。

 

从计算定积分的角度来说,你没必要过于纠结解析表达式,其实只要知道这是一个函数,只要给定了自变量,都能够求出函数值来,就够了。例如,按照你的要求,上限是一个具体的数例如8133.2,但下限是a,那么我们就可以定义一个匿名函数J(a):

syms x;
y=3251*exp(-(x-8555)^2/2550^2)+378.4*exp(-(x-1.178e+004)^2/1281^2)...
    + 5.157e+017*exp(-(x-5.89e+005)^2/1.007e+005^2);
b = 8133.2;
J = @(a) quadl( @(t) subs(sqrt((diff(y,x))^2+1),x,t), a, b);

然后,只要你指定a的值,就可以计算出定积分的结果来,例如

>> J(7500)
ans =
  842.4111
追问
J = @(a) quadl(@(t)subs(sqrt((diff(y,x))^2+1),x,t),a,b)
这句是什么意思
追答

我把这句分解开解释:

 

首先,这一句

subs(sqrt((diff(y,x))^2+1),x,t)

应该不难懂吧?曲线积分的微元是关于x的函数,将x替换成变量t。注意:x是符号变量,而t可以是一个数值类型的量,相应的,返回的结果也会是数值类型。

 

然后,往外一层,定义一个匿名函数(自变量为t)

@(t)subs(sqrt((diff(y,x))^2+1),x,t)

函数的参数是t,这样,就把原来的符号表达式转换成了数值表达式(与t的数值有关)。

 

再向外一层,又定义一个关于积分下限a的匿名函数

J = @(a) quadl(@(t)subs(sqrt((diff(y,x))^2+1),x,t),a,b)

也就是,对于上面的关于t的函数进行积分,积分限为a和b,其中b由前面的赋值语句给定,而a则是匿名函数的参数——要理解这个概念:定义一个匿名函数,就意味着匿名函数的参数对于函数内部来说是已知的量。

 

其实,匿名函数和普通函数的作用一样,只不过,其定义形式更为简单(不需要function声明),而且,可以在脚本中使用,这对于不存在复杂逻辑判断的表达式来说是非常方便的。我在最近回答你的提问时多次用到了匿名函数,如果不搞清楚这个概念,我写的那些代码你是很难看懂的。

百度网友687a7d0
2013-06-23 · TA获得超过9403个赞
知道大有可为答主
回答量:2021
采纳率:85%
帮助的人:824万
展开全部
你的积分表达式太复杂了,sqrt(diff(y,x)^2+1)的符号表达式有很多项,非线性特别强,matlab无法求出的符号解,在这种情况下,只能先求出sqrt(diff(y,x)^2+1)的符号表达式,然后转换为函数表达式,再用数值解法求解。
例如,我修改建议如下:
syms x;
y=3251*exp(-(x-8555)^2/2550^2)+378.4*exp(-(x-1.178e+004)^2/1281^2)+ 5.157e+017*exp(-(x-5.89e+005)^2/1.007e+005^2);
y1=sqrt((diff(y,x))^2+1)
y2=inline(y1)
quad(y2,0,1)

再0-1内的定积分结果:
ans =
1.0035

希望对你有帮组
追问
我可不可以上限是一个具体的数,不如说:8133.2,但下限是a,想求出表达式可以吗
追答
数值积分不能带有变量符号。
主要是这个表达式sqrt((diff(y,x))^2+1),太复杂,
y1 =

(((515700000000000000*(x/5070245000 - 31/266855))/exp((x - 589000)^2/10140490000) + (1892*((2*x)/1640961 - 23560/1640961))/(5*exp((x - 11780)^2/1640961)) + (3251*(x/3251250 - 1711/650250))/exp((x - 8555)^2/6502500))^2 + 1)^(1/2)

matlab对x积分积不出符号解,我也给你试过了,int解不出,数值解是一种近似解,只能是具体的数值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式