我想制作一个将获得2个数据点的函数: (x1, y1)
和 (x2, y2)
。
然后我想返回一个函数 f
,这是 N
点之间的直线。
如果我接收两个数据点的X和y坐标,那么我可以做:
step_size = (x2 - x1) / N;
range = x1:step_size:x2;
,然后:
f = ((y2 - y1)/(x2 - x1)) * range + ((y1/x1) * ((x2 - x1)/(y2 - y1)));
这足够了吗?
此外,我一直在网上搜索,找不到已经可以执行此操作的任何功能。但是如果有的话,请建议。
您正在寻找linspace
。例如,定义
x1 = 0; y1 = 0; x2 = 4; y2 = 4; npoints=6;
然后
[linspace(x(1),y(1),npoints);linspace(x(2),y(2),npoints)]
评估:
ans =
0 0.8000 1.6000 2.4000 3.2000 4.0000
0 0.8000 1.6000 2.4000 3.2000 4.0000
这可能不是您想要的,但我想您可以找出其余的。
此外,如果您键入edit linspace.m
,则可以看到如何在自己创建自己的版本的情况下实现该函数,该版本也可以在2元素向量上使用。
如果要返回另一个函数来创建行的函数,请查看匿名函数:
function fun = makelinefun(x1,y1,x2,y2)
fun = @(N) [linspace(x1,x2,N) ; linspace(y1,y2,N)];
end
您使用的是:
f = makelinefun(0,0,6,9);
xy = f(4)
xy =
0 2 4 6
0 3 6 9
或具有多个输出参数:
function fun = makelinefun(x1,y1,x2,y2)
fun = @(N) deal(linspace(x1,x2,N), linspace(y1,y2,N));
end
您使用的是:
f = makelinefun(0,0,6,9);
[x,y] = f(4)
x =
0 2 4 6
y =
0 3 6 9