该例子是通过调节步长和精度进行逼近,不是精确解,也不是很完善,如果精度选择太大,而步进值选择太小可能一个点坐标被输出两次,仅作为一个练习用。
Technorati 标签: MATLAB
%% Settings
prec = 0.01; %精度
step = 0.02;
start = -100;
stop = 100;
%% plot
x=start:step:stop;
L1=3*x+5;
L2 = -0.1*x.^2+50;
plot(x,L1,'red',x,L2,'blue');
legend({'L1','L2'},'location','NorthWest');
title({'Joint of two curves', 'L1=1-(1/x)sinx','L2=-0.1x^2+50'});
xlabel('x');
ylabel('y');
%% find joint
jCount = 0;
joint = [-inf inf];
for i=1:length(x)
if(abs(L1(i)-L2(i)) < prec)
jCount = jCount + 1;
joint=[x(i) L1(i)]
display('The joint point is:');
display(strcat('(',num2str(x(i)),',',num2str(L1(i)),')'));
lh = line([min(x) x(i)],[L1(i) L1(i)]); %纵坐标
set(lh,{'DisplayName','color','LineStyle'},{num2str(joint(1)),'green','--'});
lh = line([x(i) x(i)],[min(min(L1),min(L2)) L1(i)]); %横坐标
set(lh,'color','green');
set(lh,'LineStyle','--');
text(joint(1)+5,joint(2)+5,strcat('P_',num2str(jCount),'(',num2str(joint(1)),',',num2str(joint(2)),')'));
end
end