matlab离散点拟合曲线与直线y=6*x的交点怎么求

 我来答
lhmhz
高粉答主

2018-04-20 · 专注matlab等在各领域中的应用。
lhmhz
采纳数:7263 获赞数:16989

向TA提问 私信TA
展开全部
这类问题,应该先将离散点用数据拟合的方法(如,nlinfit函数)拟合出其符合离散点的曲线方程y(x),然后用solve函数命令解出曲线与直线交点的坐标点(x,y)。
2021同步求职
2019-02-23
知道答主
回答量:26
采纳率:0%
帮助的人:13.7万
展开全部
% P=intp(X1,Y1,X2,Y2)
% 求两组离散点序列的交点
% X1,Y1为第一组的横纵坐标,X2,Y2为第二组横纵坐标,横坐标必须为有序数列。
% 返回值P为交点坐标,两列矩阵,第一列为横坐标,第二列为纵坐标。
function P=intp(X1,Y1,X2,Y2)
X1=X1(:); % 变为列向量
X2=X2(:);
Y1=Y1(:);
Y2=Y2(:);
if max(X1)<min(X2) || max(X2)<min(X1)
P=[]; % 两个区间没有重叠,不可能有交点
return;
end
a=max(min(X1),min(X2));
b=min(max(X1),max(X2));
a1=find(X1>=a); a1=a1(1);
a2=find(X2>=a); a2=a2(1);
b1=find(X1<=b); b1=b1(end);
b2=find(X2<=b); b2=b2(end);
x=unique([X1(a1:b1); X2(a2:b2)]);
y1=interp1(X1,Y1,x,'linear');
y2=interp1(X2,Y2,x,'linear'); % 找出公共部分
d=y1-y2;
ind0=find(d==0); % 差为0的是交点。
P1=[x(ind0), y1(ind0)];
d1=sign(d); % 求符号,负数为-1,正数为1, 0为0
d2=abs(diff(d1));
ind1=find(d2==2); % 相邻符号相差2的,交点在此区间内
P2=zeros(length(ind1),2);
for k=1:length(ind1)
i1=ind1(k);
i2=ind1(k)+1;
x1=x(i1);
x2=x(i2);
ya1=y1(i1);
ya2=y1(i2);
yb1=y2(i1);
yb2=y2(i2); % 两条线段四个端点坐标
A=[ ya1-ya2, -(x1-x2)
yb1-yb2, -(x1-x2)]; % 二元一次方程组系数矩阵
B=[ (ya1-ya2)*x1-(x1-x2)*ya1
(yb1-yb2)*x1-(x1-x2)*yb1]; % 常数项矩阵
P2(k,:)=(A\B)'; % 解方程组,得到交点坐标
end
P=[P1;P2]; % 两种情况的交点合并
P=sortrows(P,1); % 按横坐标排序
% 函数到此结束,保存到intp.m文件中
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式