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

2024-12-02 04:24:56
推荐回答(2个)
回答(1):

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

 

从计算定积分的角度来说,你没必要过于纠结解析表达式,其实只要知道这是一个函数,只要给定了自变量,都能够求出函数值来,就够了。例如,按照你的要求,上限是一个具体的数例如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

回答(2):

你的积分表达式太复杂了,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

希望对你有帮组