关于matlab的积分问题,积不出来怎么办
>> 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)
积不出来怎么办 展开
像这类曲线积分的表达式很难求出解析表达式的,没有办法。
从计算定积分的角度来说,你没必要过于纠结解析表达式,其实只要知道这是一个函数,只要给定了自变量,都能够求出函数值来,就够了。例如,按照你的要求,上限是一个具体的数例如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声明),而且,可以在脚本中使用,这对于不存在复杂逻辑判断的表达式来说是非常方便的。我在最近回答你的提问时多次用到了匿名函数,如果不搞清楚这个概念,我写的那些代码你是很难看懂的。
例如,我修改建议如下:
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解不出,数值解是一种近似解,只能是具体的数值