计算分段函数中的向量
Evaluate a vector in a piecewise function
我想像这样在分段函数中计算向量 xdata:
dat=load('k2.txt');
xdata = dat(:,1);
ydata = dat(:,2);
n=length(xdata);
p0=[0.0821 6.6 0.4];
y(p0,xdata)
function y_hat = y(p,t)
P=4.885;
T0 = 134.27426;
omega=2*pi/P;
gamma1=0.3539 ;gamma2=0.2851;
c1=0;c2=gamma1+2*gamma2;c3=0;c4=-gamma2;
c0=1-c1-c2-c3-c4;
z= p(2).*((sin(omega.*(t-T0))).^2+((p(3)/p(2)).*cos(omega.*(t-T0))).^2).^(1/2);
lambda1= 0;
lambda3=p(1).^2;
if ((1-p(1)<z) & (z<1+p(1)))
k1 = acos((1-p(1).^2 + z.^2)./(2*z));
k0 = acos(((p(1)).^2+z.^2-1)./(2.*z.*p(1)));
y_hat = 1-1./pi*(p(1).^2.*k0+k1-sqrt((4*z.^2-(1+z.^2-p(1).^2).^2)/4));
end
if (1+p(1)<=z)
y_hat=1-lambda1;
end
if (z<=1-p(1))
y_hat=1-lambda3;
end
end
问题是代码没有进入 if 循环的 none,returns 什么也没有。也许原因是该函数试图同时满足所有向量的条件?我应该如何进行,以便 y(p0,xdata) returns something?
顺便说一下,我需要这个,因为我必须将模型拟合到这样的数据中:
[theta] = lsqcurvefit(@y, p0, xdata, ydata);
你的代码不工作,因为当你写这样的东西时:
if [1 3 -1] > 0
%code
end
然后“%code”将不会被评估,因为它正在检查条件是否适用于向量中的每个值。
假设您要定义 Heaviside 函数并计算它的向量。然后,您要做的是使用 for 循环:
x_vals = [-1 1 5];
heav(x_vals)
function y = heav(x)
y = zeros(size(x));
for i = 1:length(x)
if x(i) >= 0
y(i) = 1;
else
y(i) = 0;
end
end
end
我想像这样在分段函数中计算向量 xdata:
dat=load('k2.txt');
xdata = dat(:,1);
ydata = dat(:,2);
n=length(xdata);
p0=[0.0821 6.6 0.4];
y(p0,xdata)
function y_hat = y(p,t)
P=4.885;
T0 = 134.27426;
omega=2*pi/P;
gamma1=0.3539 ;gamma2=0.2851;
c1=0;c2=gamma1+2*gamma2;c3=0;c4=-gamma2;
c0=1-c1-c2-c3-c4;
z= p(2).*((sin(omega.*(t-T0))).^2+((p(3)/p(2)).*cos(omega.*(t-T0))).^2).^(1/2);
lambda1= 0;
lambda3=p(1).^2;
if ((1-p(1)<z) & (z<1+p(1)))
k1 = acos((1-p(1).^2 + z.^2)./(2*z));
k0 = acos(((p(1)).^2+z.^2-1)./(2.*z.*p(1)));
y_hat = 1-1./pi*(p(1).^2.*k0+k1-sqrt((4*z.^2-(1+z.^2-p(1).^2).^2)/4));
end
if (1+p(1)<=z)
y_hat=1-lambda1;
end
if (z<=1-p(1))
y_hat=1-lambda3;
end
end
问题是代码没有进入 if 循环的 none,returns 什么也没有。也许原因是该函数试图同时满足所有向量的条件?我应该如何进行,以便 y(p0,xdata) returns something?
顺便说一下,我需要这个,因为我必须将模型拟合到这样的数据中:
[theta] = lsqcurvefit(@y, p0, xdata, ydata);
你的代码不工作,因为当你写这样的东西时:
if [1 3 -1] > 0
%code
end
然后“%code”将不会被评估,因为它正在检查条件是否适用于向量中的每个值。
假设您要定义 Heaviside 函数并计算它的向量。然后,您要做的是使用 for 循环:
x_vals = [-1 1 5];
heav(x_vals)
function y = heav(x)
y = zeros(size(x));
for i = 1:length(x)
if x(i) >= 0
y(i) = 1;
else
y(i) = 0;
end
end
end