嗨,我正在努力使用 matlab 求解以变量为极限的积分,我遇到的两个最大问题是 matlab 无法明确地找到积分,而且很多数值方法都不会,除了变量
我要解决
0=H/2R - integral (z(x) between b and 1)
z(x)= (((x/((a*x*x)+1-a))^2)-1)^-0.5
b= (sin(t)+sqrt(t^2 + 4a(a-1)))/2a
我知道 H、R 和 t,我的想法是求解积分然后求解 a 的非线性方程,我知道对非线性方程使用 fzero/fsolve 但我正在努力求解积分
最佳答案
您可以尝试一种射击方法 - 猜测 a 的值并从那里进行数值求解,直到找到可以求解最后一个方程式的 a 值。这是一些应该起作用的东西(尽管我随机猜测了数值并且没有让它收敛)
function test
a_guess = .1
fzero(@(a) solveWithA(a), a_guess)
function res = solveWithA(a)
t = .9;
H = 1.5;
R = 1.1;
z = @(x) (((x/((a*x*x)+1-a))^2)-1)^-0.5;
b = (sin(t)+sqrt(t^2 + 4*a*(a-1)))/(2*a);
lower_limit = b;
integrand = z;
[T, Y] = ode45(@(t, x) integrand(x),[lower_limit 1],0);
res = norm((H/2/R - Y(end)))
end
end
但是对于...的解析表达式我认为它是笔和纸 :) 尝试手工计算不定积分,然后应用极限?但是,从被积函数中删除 a 仍然会留下令人讨厌的结果。可能有一个“技巧”可以更好地解决数学溢出问题。
关于matlab - 具有可变限制的积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13788154/