在解一个上限带有x的积分方程(如下),遇到了用int函数无法化简函数、去掉积分符号的问题,学习后了解到可能是无法求出表达式。请问在这种情况下如何能够求出x的值?
以下为将该函数输入命令行情况
syms t x
(18014398509481984*int((1 - t)^(4539/2500)/t^(937/10000), t, 0, x))/7606397992644417-0.9
ans =
piecewise(x == 1, (8891927280406637922222080000*gamma(2039/2500)*gamma(9063/10000))/(8578570489011604021249041801*gamma(7219/10000)) - 9/10, x ~= 1, (18014398509481984*int((1 - t)^(4539/2500)/t^(937/10000), t, 0, x))/7606397992644417 - 9/10)
答案:
通过参考资料中的MATLAB符号计算方法06的介绍,我们可以使用符号积分的int()函数来解决这个问题。其中一重定积分和第一类曲线积分在这里不适用,多重积分和第二类曲线积分也不是这个问题需要的,那么我们要选择的就是符号计算方法06中的不定积分。不过这里的积分上限不是一个常数而是含有x,因此不能直接使用int()函数简化,我们可以尝试使用带有限制条件的int()函数来解决这个问题。具体讲解和代码如下:
syms t x;
f = (1 - t)^(4539/2500)/t^(937/10000);
F = 18014398509481984*int(f, t, 0, x)/7606397992644417 - 0.9;
solve(F, x);
首先我们定义符号t、x和f,其中f表示要求的函数。然后我们使用符号积分的int()函数来计算在[0,x]区间内f的不定积分,同样得到一个含有x的表达式。接下来定义F,将我们要求的表达式代入其中,得到一个包含x的函数。最后使用MATLAB自带的solve()函数求解equal to 0的解,就可以得到x的值。
由于这里用到的是带有限制条件的int()函数,所以MATLAB的解方程函数solve()需要花费一些时间来计算该方程的根。如果需要更快速的结果,可以考虑使用数值方法来求解x的值。
有用希望点一下采纳,可以用二分法求解的嘛。首先把x = 0带入,得到函数值为-0.9,再把x=1带入,得到函数值为0.1。所以可以确定(0,1)之间存在零点,可以使用二分法进行确定,matlab代码如下:
clc
clear
syms t
x0 = 0; % 区间初始左端点
x1 = 1; % 区间初始右端点
f0 = fun(x0,t) % 区间左端点函数值
f1 = fun(x1,t) % 区间右端点函数值
e = 0.0001; % 误差精度
x2 = (x0 + x1)/2;
f2 = fun(x2,t);
% 通过二分法求零点
while abs(f2) >= e
x2 = (x0 + x1)/2;
f2 = fun(x2,t);
if f2 < 0
f0 = f2;
x0 = x2;
else
f1 = f2;
x1 = x2;
end
end
disp(['函数的零点为x=',num2str(x2)])
function f = fun(x,t)
f =(18014398509481984*int((1 - t)^(4539/2500)/t^(937/10000), t, 0, x))/7606397992644417-0.9;
f = double(f);
end
运行结果: