matlab - 试图用Matlab找到两个函数相差5%的点

标签 matlab function intersection

正如我在标题中所写的,当两个函数开始在 Y 轴上彼此相差 5% 时,我试图找到精确的距离(在本例中为无量纲距离)。这两个函数在 X 轴的值 1 处相交,我需要找到相交之前而不是相交之后的描述距离(即,它必须小于 1)。我已经编写了一个 Matlab 代码,供您查看函数的形状和以下计算,我试图让它们工作,但它们不工作,我不知道为什么。 “找不到明确的解决方案”。

不知道我有没有解释清楚。如果您需要更详细的解释,请告诉我。

我希望您能对这个问题有所启发。

非常感谢您。

r=0:0.001:1.2;
ro=0.335;
rt=r./ro;
De=0.3534;
k=2.8552;
B=(2*k/De)^0.5;
Fm=2.*De.*B.*ro.*[1-exp(B.*ro.*(1-rt))].*exp(B.*ro.*(1-rt));
A=5;
b=2.2347;
C=167.4692;
Ftt=(C.*(exp(-b.*rt).*((b.^6.*rt.^5)./120 + (b.^5.*rt.^4)./24 + (b.^4.*rt.^3)./6 +         (b.^3.*rt.^2)./2 + b.^2.*rt + b) - b.*exp(-b.*rt).*((b.^6.*rt.^6)./720 + (b.^5.*rt.^5)./120 + (b.^4.*rt.^4)./24 + (b.^3.*rt.^3)./6 + (b.^2.*rt.^2)./2 + b.*rt + 1)))./rt.^6 - (6.*C.*(exp(-b.*rt).*((b.^6.*rt.^6)./720 + (b.^5.*rt.^5)./120 + (b.^4.*rt.^4)./24 + (b.^3.*rt.^3)./6 + (b.^2.*rt.^2)./2 + b.*rt + 1) - 1))./rt.^7 - A.*b.*exp(-b.*rt);
plot(rt,-Fm,'red')
axis([0 2 -1 3])
xlabel('Dimensionless distance')
ylabel('Force, -dU/dr')
hold on
plot(rt,-Ftt,'green')
clear rt
syms rt
%assume(0<rt<1)
r1=solve((Fm-Ftt)/Ftt==0.05,rt)
r2=solve((Ftt-Fm)/Fm==0.05,rt)

最佳答案

欢迎来到 float 据的关键。原因是因为对于您提供的 r 值,0.05 的精确解可能中的两个值之间您的 r 数组,因此您将无法获得精确解决方案。另外,FWIW,您的方程可能永远生成 0.05 的解,这就是您也会收到该错误的原因。无论哪种方式,都不建议对 float 据进行显式求解,除非您非常了解数据的形状以及您希望将数据应用到的函数的输出值是什么。

因此,始终建议您找到满足您的条件的最近值。因此,你应该这样做:

[~,ind] = min(abs((Fm-Ftt)./Ftt - 0.05)); 
r1 = r(ind);

第一行将查找 r 数组中满足 5% 标准的最近位置。然后,下一行代码将为您提供 r 数组中满足此条件的值。您可以通过以下方式对 r2 执行相同操作:

[~,ind2] = min(abs((Ftt-Fm)./Fm - 0.05)); 
r2 = r(ind2);

上面的代码基本上所做的是,它试图找出数组中的哪个点您的数据与 5% 之间的差异为 0。换句话说,就是您的 r 中的哪个点> 数组将足够接近以使上述关系等于 0,或者本质上当它尽可能接近 5% 时。

如果您想改进这一点,您可以随时更改r的步长...也许将其设为0.00001或其他。但是,步长越小,数组就越大,最终会耗尽内存!

关于matlab - 试图用Matlab找到两个函数相差5%的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24959981/

相关文章:

matlab - Matlab中具有不同维度的多个数据集的直方图

matlab:图形大小,相同的轴大小

python - 将Matlab代码转换为Python时的"data type not understood"

javascript - (this) 在函数声明之后

algorithm - 用于快速交叉操作的数据结构?

java - Java中二维ArrayList的交集

ios - 部分中的 tableViewCells 中的图像(swift 3- Xcode 8.3.2)

matlab - 如何消除子图和周围之间的差距

sql - 编写一个 SQL 触发器来比较旧值和新值

python - 在 Python 中计算最多两位小数