首页 > 解决方案 > 当我使用积分函数时,Matlab 没有给出结果

问题描述

当试图计算两个变量的积分时,我什么也没得到!

这是代码:

syms x;
a=0.4;
theta=(9 - 4*x*(5*x - 141/25))^(1/2)/2 - 3/2;
theta_prime=-(40*x - 564/25)/(4*(9 - 4*x*(5*x - 141/25))^(1/2));
g=(1/theta)*theta_prime
s=(1+a*(theta-1))*(g)^2
sgen = int(s,x,0.1,1) %x=0.1:0.1: 1

我的错误是什么?它应该是一个值,例如“4.86”。请指教。

标签: matlabintegral

解决方案


sgen是一个符号对象,表示您的函数的积分s。您可以将其转换为 double 以获得积分的数值:

syms x;
a=0.4;
theta=(9 - 4*x*(5*x - 141/25))^(1/2)/2 - 3/2;
theta_prime=-(40*x - 564/25)/(4*(9 - 4*x*(5*x - 141/25))^(1/2));
g=(1/theta)*theta_prime;
s=(1+a*(theta-1))*(g)^2;
sgen = double(int(s,x,0.1,1)) % returns 4.8694

但是,如果您对积分的符号方程不感兴趣,那么使用符号工具箱确实没有意义。数值计算积分要快得多。一种方法是创建一个函数s(x),然后使用它integral来查找数值积分。请注意,s(x)必须对x变量进行矢量化才能使其工作(integral将使用x值向量调用它以节省时间)。对于矢量化计算,需要在一些*,/^运算符前面添加点。这是结果:

a = 0.4;
theta = @(x) (9 - 4*x.*(5*x - 141/25)).^(1/2)/2 - 3/2;
theta_prime = @(x) -(40*x - 564/25)./(4*(9 - 4*x.*(5*x - 141/25)).^(1/2));
g = @(x) (1./theta(x)).*theta_prime(x);
s = @(x) (1+a*(theta(x)-1)).*g(x).^2;
sgen = integral(s,0.1,1.0) % returns 4.8694

推荐阅读