请问怎样在matlab中得到直线方程与plot出的曲线之间的交点坐标

我现在有一系列的[x,y]值如下

x=[1,113,334,361,440,964,964,1];
y=[1,107,324,323,400,400,471,471];
请问怎样得到这一系列[x,y]值plot出的曲线与y=x-25之间的交点的确切坐标?

首先需要明确:用plot画图其实是折线图,即每相邻两点之间用直线连接。

画出图形来,从图中可见,有两个交点:

一个交点位于折线的最后一段,纵坐标已知为471,则横坐标易得x=y+25=496;

另一个交点位于点(334,324)和(361,323)连接的折线上,可以使用solve求解得到(9422/27, 8747/27)。

参考代码:

x=[1,113,334,361,440,964,964,1];

y=[1,107,324,323,400,400,471,471];

plot(x,y,'.-')

x1=[0 1000];

y1=x1-25;

hold on

plot(x1,y1,'r')

 

y2=471;

x2=y2+25;

[x3,y3]=solve('y=324+(323-324)/(361-334)','y=x-25');

x3=double(x3);y3=double(y3);

plot([x2, x3],[y2,y3],'mo')

 

legend('plot数据','y=x-25', '交点',2)

 

 

追问

非常感谢您的回答,那如果我得到了一系列的[x,y]值(plot出以后如上图中间的那根黄线),我想要得到黄线与红线(同样也是y=x+25)的交点的确切坐标,请问应该怎么办呢?

追答

你的意思是不是说,数据点很多,不太适合先画图判断和哪段相交再计算具体坐标,而是给定一组坐标,直接由程序作判断并计算吗?
另外,我看你的那根红线不像是y=x+25或y=x-25啊?是使用图像坐标(y轴逆向)?

追问

是的,这里的y轴是逆向的。
这个图中所得到的(x,y)值都是利用灰度差得出的轮廓线,所以点很多,也不可能得到前面您说的方程。我想要知道能不能用什么方法求得红线与黄线的交点坐标?
黄线的[x,y]值是通过x一个像素点一个像素点增加扫出来的,比如其中的一段
297 280
298 280
298 281
299 281
299 282
300 282
300 283
301 283
302 283
下面还有很多

追答

把程序改了一下,可以自动判断(注意,之前的回答solve第一个方程错误):
x=[1,113,334,361,440,964,964,1];
y=[1,107,324,323,400,400,471,471];
plot(x,y,'.-')
x1=[0 1000];
y1=x1-25;
hold on
plot(x1,y1,'r')

for i=1:length(x)-1
% 分垂直和非垂直两种情况
if x(i+1)~=x(i)
eq=sprintf('y=%g+(%g-%g)/(%g-%g)*(x-%g)',y(i),y(i+1),y(i),x(i+1),x(i),x(i) );
[x3,y3]=solve(eq,'y=x-25');
else
x3=x(i);
y3=x(i)-25;
end
x3=double(x3);y3=double(y3);
% 判断交点是否在线段范围内(不计延长线)
if ( (x3-x(i))*(x3-x(i+1)) <= 0 ) && ( (y3-y(i))*(y3-y(i+1)) <= 0 )
fprintf('交点坐标: (%g, %g)\n', x3, y3);
end
end

输出如下:
交点坐标: (348.464, 323.464)
交点坐标: (496, 471)

温馨提示:内容为网友见解,仅供参考
无其他回答

请问怎样在matlab中得到直线方程与plot出的曲线之间的交点坐标
首先需要明确:用plot画图其实是折线图,即每相邻两点之间用直线连接。画出图形来,从图中可见,有两个交点:一个交点位于折线的最后一段,纵坐标已知为471,则横坐标易得x=y+25=496;另一个交点位于点(334,324)和(361,323)连接的折线上,可以使用solve求解得到(9422\/27, 8747\/27)。参考代码...

Matlab如何求plot画的曲线和line画的折线的交点?
首先,将方程组改写为 sin(x)-x+1.5=0 然后,自定义函数文件,fun.m function y = fun(x)y=sin(x)-x+1.5;end 最后,执行下列命令程序 x0=2;x1=3;tol=1.0e-5;secant(x0,x1,tol) %secant 割线法 得到结果为 x=2.26717200866193,y=-1.5 ...

matlab如何提取一条曲线与y=50直线的交点坐标?
1、如果已知曲线的表达式,那么可以直接使用solve()函数求解方程得到交点坐标。2、如果曲线由散点给出,则可以使用插值函数interp1()近似得到交点坐标 下面分别演示这两种情形:一、求曲线y=2*x^2与直线y=50的交点 1、分析:求曲线y=2*x^2与直线y=50的交点,只需要求解方程2*x^2=50即可 2、求...

MATLAB中怎么求两条曲线的交点并标注
1、利用plot()绘制两条颜色不同、线型不同的曲线,y1和y2有几个交点。x=0:pi\/100:4*pi;y1=sin(x);y2=cos(x);plot(x,y1,'g--',x,y2,'b')2、取y1,y2相等点的坐标,并将两条曲线相等的点表示为y3。x1=x(k);y3=sin(x1);3、将y3与前面的y1,y2合并得到两条曲线相交的点。...

悬赏20!用matlab求直线和椭圆的交点坐标!
这个其实就是以t为未知量,把两点坐标代入直线方程求解。可以直接用solve求解,但得到的结果可能会包含t0自身(有很小的误差),需要将其过滤。参考代码:常数定义a=2;b=1;t0=11\/18*pi;x0=a*cos(t0);y0=b*sin(t0);kx=3;ky=-2;解方程syms tt1=solve(ky*(a*cos(t)-x0)-kx*(b*sin...

matlab中怎么求两曲线交点
你的问题,应该分三步来求解。第一步:求出两条曲线方程;第二步:自定义所求的曲线方程,然后用fsolve()函数求出两条曲线的交点坐标。第三步:绘出两条曲线的图形和交点坐标的位置。实现过程:第一步:你已完成。第二、三步:运行结果 如需要详细代码,可以通过私信给你。

MATLAB中怎么求两条曲线的交点并标注?
解题方法建立自定义函数文件,tx_fun.m。文件包含两条曲线函数方程。用fsolve()函数,求解两条曲线的交点。用plot()函数,画出两条曲线。用text()函数,在两条曲线的交点附近标注交点坐标值。MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据...

请问怎样在MATLAB里面把两个函数的交汇点找出来?
x);plot(x,y1,x,y2);hold on r0=abs(y2-y1)<=0.05;yy=r0.*y1;xx=r0.*x;tx=xx(r0~=0);%交点横坐标 ty=yy(r0~=0);%交点纵坐标 plot(tx,ty,'r.')t=[];for i=1:length(tx)t=[sprintf('(%.2f,%.2f)',tx(i),ty(i))];text(tx(i),ty(i),t);end ...

matlab中如何求两直线交点?
xy = inv([k1,1;k2,1])*[b1;b2]例如:x=1:100;自变量的范围 k=find(abs(y1-y2)<1e-2); 查找Y1与Y2相等点的下表 x1=x(k);取y1与y2相等点的x坐标 y3=f(x1);求y1与y2值相等点的y坐标 plot(x1,y3,'dp') 标记交叉点。

matlab怎样自动标出交点坐标
axis([0,2*pi,-6,6])%坐标轴控制 grid on %画出网格线 xlabel('x')ylabel('y')legend('y','y1','交点')第一种方法是通过find函数设置合适的阈值(如这里的0.02)找到两条曲线对应值很小的点的x值,再将其代入到函数里得到y值,形成一个新的对应数组。再用plot函数将两条曲线和交点画...

相似回答