matlab有两列值,对应x,y,比如X 是12345 ,Y是6789,10,plot(X,Y)后,想找到Y的中间值对应的X,谢谢

有没有好办法,数值只是举个列子
急,在线等

要找到某一个x值时的y值, 首先得需要知道x和y的函数关系, 即y = f(x).


函数关系的确立一般可通过插值或者拟合得到, 分别举个插值和拟合的例子:

(1) 插值的例子: 比如用样条插值

>> x=[1,2,3,4,5];
>> y=[6,7,8,9,10];
>> interp1(x,y,4.5,'spline')
ans =
9.5000

x=4.5时, y=9.5.


(2) 拟合的例子: 比如用polyfit来拟合, 用polyval来计算

>> x=[1,2,3,4,5];
>> y=[6,7,8,9,10];
>> coef=polyfit(x,y,2);
>> polyval(coef,4.5)
ans =
9.5000

x=4.5时, y=9.5

追问

谢谢,那我现在像把这个4.5加到x轴上,不改变之前的坐标,有没有法子!

追答

有一个笨办法, 不是最好的, 但可行

>> x=[1,2,3,4,5];
>> y=[6,7,8,9,10];
>> xval=4.5;
>> yval=interp1(x,y,xval,'spline');
>> plot(x,y,'ro-')
>> hold on
>> plot(xval,yval,'bs')
>> hold off

追问

还是要谢谢你!辛苦了~~只能采纳一个

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-20
x = [...];
y = [...];

p=polyfit(y,x,2);%拟合成二次曲线,如x=a*y.^2+b*y+c,p存放的是a,b,c的值,可根据你的需要改变
z=polyval(p,3);
得出的z值就是y=3,所对应的x值追问

谢谢,那我现在像把这个z值加到x轴上,不改变之前的坐标,有没有法子!

第2个回答  2013-04-20
>> x=1:0.1:4;
>> y=x.^3+x.^2;
>> ymed=median(y);
>> xmed=x(find(y==ymed))
>> plot(x,y)

>> hold on
>> plot(xmed,ymed,'o')

>> text(xmed,ymed,'\leftarrow{this is the median}')

>>追问

谢谢,学习了,那我现在像把这个中值对应的x坐标加到x轴上,不改变之前的坐标,有没有法子!

追答

接着上面的程序:

>> set(gca,'xtick',[1:4])

>> plot([xmed,xmed],ylim,':')

>> ym=ylim;
>> h=text(xmed,ym(1),num2str(xmed));
>> set(h,'HorizontalAlignment','center','VerticalAlignment','top')

追问

试了下,你这可行,就是有点看不懂~~

追答

>> x=1:0.1:4;
>> y=x.^3+x.^2;
>> ymed=median(y);%利用取中值函数得到y的中值
>> xmed=x(find(y==ymed))%利用find函数找到y中值对应的地址,然后找到这个地址对应的x
>> plot(x,y) %绘制图形曲线
>> hold on %保持图像
>> plot(xmed,ymed,'o') %绘制标记点
>> text(xmed,ymed,'\leftarrow{this is the median}') %在标记点旁边添加说明
>> set(gca,'xtick',[1:4]) %更改坐标轴刻度(由于这个原始刻度已有,所以给去掉,其他时候可以不用)
>> plot([xmed,xmed],ylim,':')%绘制标记点的x坐标虚线
>> ym=ylim; %得到y坐标轴刻度的最大最小值
>> h=text(xmed,ym(1),num2str(xmed)); %在x轴上添加文本注释框
>> set(h,'HorizontalAlignment','center','VerticalAlignment','top') %挪动文本框到合适的位置

本回答被提问者采纳
大家正在搜