公告:本站正式转型为非交互式静态网站!
转型:本站将通过笔记和博客的形式继续为大家服务,关于 Mathematica 问答服务请移步至QQ群:365716997
联系:如有问题请联系QQ群管理员,或发送邮件至:lixuan.xyz@qq.com。
感谢:最后非常感谢大家多年来的支持与帮助!
参考《互联网跟帖评论服务管理规定》《中华人民共和国网络安全法》《网络信息内容生态治理规定》《互联网用户账号信息管理规定》

—— 2022-11-27

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

0 投票
896 浏览
tpop = {{10, 211}, {98, 209}, {106, 208}, {113, 206}, {123,
    204}, {131, 199}, {138, 194}, {143, 188}, {150, 181}, {154,
    175}, {161, 167}, {168, 160}, {176, 155}, {182, 150}, {191,
    143}, {201, 139}, {207, 134}, {216, 130}, {227, 124}, {234,
    119}, {242, 113}, {249, 107}, {257, 101}, {264, 95}, {270,
    89}, {277, 81}, {283, 73}, {287, 64}, {290, 56}, {293, 46}, {296,
    34}, {297, 9}};

c = Table[{200, y}, {y, 0, 200, 0.01}];

ListLogLogPlot[{tpop, c}, Joined -> True]



请问如何得到两条线的交点?

分类:绘图 | 用户: 4765993422qq.com (16 分)
修改于 用户:野鹤

1个回答

+2 投票
 
已采纳

使用线性拟合,下面的例子只考虑点集tpop中离直线x=200最近的两点,当然也可以取多个点用线性拟合,改一下n就好了:

(*运行代码前先输入tpop*)
n = 2;
y = Fit[tpop[[Flatten[
       FirstPosition[tpop[[;; , 1]], #] & /@ 
        Nearest[tpop[[;; , 1]], 200, n]]]], {1, x}, x] /. x -> 200;
yourPoint = {200, y}

也可以使用多个附近的点,使用其它函数拟合(自己选)。比如取4个点或更多,使用3次多项式拟合:

(*运行代码前先输入tpop*)
n = 4;
y = Fit[tpop[[Flatten[
       FirstPosition[tpop[[;; , 1]], #] & /@ 
        Nearest[tpop[[;; , 1]], 200, n]]]], {1, x, x^2, x^3}, x] /. 
   x -> 200;
yourPoint = {200, y}

 

用户: 野鹤 (5.1k 分)
采纳于 用户:野鹤
ListLogLogPlot的Join->True使用的仅仅是线性插值。例如
data = {{1, 1}, {2, 3}, {3, 8}, {4, 15}, {5, 100}};
x0 = Log@2.7;
y0 = Interpolation[Log@N@data, InterpolationOrder -> 1][x0];
ListLogLogPlot[data, Joined -> True, Mesh -> All,
 Epilog -> {Red, PointSize[0.02], Point[{x0, y0}]}]
插值函数用挺好的。那只用第一种n=2的方法就行了。
...