【问题标题】:Evaluate a vector in a piecewise function计算分段函数中的向量
【发布时间】:2020-02-15 22:42:48
【问题描述】:

我想以这样的分段函数评估向量 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 循环,也没有返回任何内容。也许原因是该函数试图一次满足所有向量的条件?我应该如何继续,以便 y(p0,xdata) 返回一些东西?

顺便说一句,我需要这个,因为我必须为这样的数据拟合模型:


[theta] = lsqcurvefit(@y, p0, xdata, ydata);

【问题讨论】:

    标签: matlab data-fitting model-fitting piecewise


    【解决方案1】:

    你的代码不起作用,因为当你写这样的东西时:

    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
    

    【讨论】:

    • 不,你不需要循环。你可以用y(x&gt;=0)=1替换那个循环。
    猜你喜欢
    • 1970-01-01
    • 2021-01-23
    • 2013-02-06
    • 2017-09-22
    • 2021-02-21
    • 2010-12-05
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    相关资源
    最近更新 更多