matlab--找两条曲线交点并标注于图上的方法
·
matlab–找两条曲线交点并标注于图上的方法
无论是参加数学建模还是其他情况下,我们常常需要利用matlab的作图功能去更好的完成论文,这里介绍两种找出两条曲线的交点标注于图上的方法。
- 第一种方法:应用于两条曲线相差较大时
例如题目: 已知函数为y=exp(-0.5*x)*cos(x);
取x在[0,2π] 内1000 个点时的 y 值,同时对数据 y 叠加一个正弦干扰信号得到 y1。画出(x,y)(x,y1)图形并对交点标注。
matlab代码如下:
clear
x=linspace(0,2*pi,1000);
y=exp(-0.5*x).*cos(x);
yy=5*sin(x);
y1=yy+y;%叠加正弦干扰信号得到y1
k=find(abs(y1-y)<=0.02);%找出交点
x2=x(k);
y2=exp(-0.5*x2).*cos(x2);
%画出y和y1图形,并找出交点标注
figure
plot(x,y,'b',x,y1,'r',x2,y2,'*')
axis([0,2*pi,-6,6])%坐标轴控制
grid on %画出网格线
xlabel('x')
ylabel('y')
legend('y','y1','交点')
第一种方法是通过find函数设置合适的阈值(如这里的0.02)找到两条曲线对应值很小的点的x值,再将其代入到函数里得到y值,形成一个新的对应数组。再用plot函数将两条曲线和交点画出来。
最后得到的图形如下:
-
第二种方法:适用于两条曲线相差很近时
例如题目:设f1(x)=1/((x-2)^2+0.1);f2(x)=2exp(-0.5x)cos(pix);
在x的[0,2π]范围内取 1000 个点时,f1,f2 图形,并在图形中标注出两条曲线交点。
如果继续用find函数去找交点的话,阈值设置的大一些就会发现一个交点附近找到很多的点被认为是交点,阈值设置的小一些就会有由于取点的问题一些交点找不到。
阈值设置大:
阈值设置小:
所以在这种情况下,再用find函数是不合理的。
想到求两条曲线的交点其实就是求两个式子差的零点。所以用fzero函数来达到目的。
matlab代码:
由于fzero函数使用过程中需要零点的初始值,所以需要先画图找到零点附近的点组成零点向量。(在这里零点初始值向量为mm)
clear
x=linspace(0,2*pi,1000);
y1=1./((x-2).^2+0.1);
y2=2*exp(-0.5*x).*cos(pi*x);
xx=[];
mm=[1,3.5,4.5,5.5,7];%先通过观察图像,再在交点附近找的点
for i=mm %求两曲线的交点其实就是求两曲线方程差的零点
m=fzero('1./((x-2).^2+0.1)-(2*exp(-0.5*x).*cos(pi*x))',i);
xx=[m,xx];%在区间内用循环不断改变初值,就可以最完整的零点向量
end
% k=find(abs(y2-y1)<=0.001);
% xx=x(k);
yy=1./((xx-2).^2+0.1);
figure %在[0,2*pi]中画出f1,f2曲线图形,并标注交点
plot(x,y1,'b',x,y2,'r',xx,yy,'*')
axis([0,7,-2,10])%使得只显示在[0,2*pi]区间内的零点
grid on
xlabel('x');ylabel('y');legend('y1','y2','交点')
结果图如下:
(如果有问题的话,还请大家指正呀!)
推荐内容
阅读全文
AI总结
更多推荐
相关推荐
查看更多
DeepSeek-V3-0324

DeepSeek最新推出DeepSeek-V3-0324版本,参数量从6710亿增加到6850亿,在数学推理、代码生成能力以及长上下文理解能力方面直线飙升。
javascript

JavaScript 编程指南。
Python

All Algorithms implemented in Python
热门开源项目
活动日历
查看更多
直播时间 2025-03-13 18:32:35

全栈自研企业级AI平台:Java核心技术×私有化部署实战
直播时间 2025-03-11 18:35:18

从0到1:Go IoT 开发平台的架构演进与生态蓝图
直播时间 2025-03-05 14:35:37

国产工作流引擎 终结「996」开发困局!
直播时间 2025-02-25 14:38:13

免费开源宝藏 ShopXO,电商系统搭建秘籍大公开!
直播时间 2025-02-18 14:31:04

从数据孤岛到数据智能 - 企业级数据管理利器深度解析
目录
所有评论(0)