You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab与Desmos绘制双曲线的图形差异问题排查

问题根源:Matlab代码的逻辑与公式错误,和Desmos无关

你的问题完全出在Matlab代码的编写上,不是Desmos的操作导致的差异。我帮你拆解一下代码里的两处关键错误:

1. 距离公式符号写错,导致根号下表达式可能为负

双曲线的定义依赖两点间的距离公式,正确形式是sqrt((x1-x2)^2 + (y1-y2)^2)——平方项之间是加号,但你代码里的deltaD表达式把加号写成了减号:

% 错误写法:平方项用了减号
deltaD = sqrt((95-x).^2-(0-y).^2)-sqrt((0-x).^2-(0-y).^2);

当|y| > |95-x|或者|y| > |x|时,根号里的结果会是负数,Matlab无法计算实数解,自然会出现图形间断、绘制异常的情况。

2. deltaD的定义逻辑错误,导致方程不是标准双曲线

TDoA中的deltaD是固定的距离差常数(比如两个接收站收到信号的距离差),但你把它定义成了关于x、y的函数(两个距离的差),再代入双曲线标准方程,最终得到的f是一个复杂的隐函数,而非标准的双曲线方程。这种情况下fcontour无法正确解析出双曲线的完整图形。

修正后的Matlab代码

下面是调整后的代码,按照TDoA的正确逻辑定义双曲线,能得到和Desmos一致的图形:

function TDoACalculation()
syms x y;
% 两个基站的坐标
s1x = 95; s1y = 0; s2x = 0; s2y = 0;

% 两基站(焦点)之间的距离
D = sqrt((s1y - s2y).^2 + (s1x - s2x).^2);
% 设定固定的距离差deltaD(根据你的实际场景调整数值)
deltaD_val = 30;

% 双曲线参数计算
a = deltaD_val / 2;
b_squared = (D^2 / 4) - a^2;
% 双曲线中心坐标(两焦点的中点)
center_x = (s1x + s2x) / 2;
center_y = (s1y + s2y) / 2;

% 平移后的双曲线标准方程
f = ((x - center_x).^2 / a^2) - ((y - center_y).^2 / b_squared) - 1;

disp(f);
figure
% 调整绘图范围以显示完整双曲线
fcontour(f, [-100 200 -100 100]);
grid on;
title('TDoA 双曲线');
xlabel('x');
ylabel('y');
end

验证说明

把deltaD_val设为和你Desmos里一致的常数,运行修正后的代码,就能得到和Desmos完全一致的连续双曲线图形了。

内容的提问来源于stack exchange,提问作者Bikki Geisler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:29:53