多变量非线性回归或曲线拟合Matlab

时间:2016-07-11 13:10:04

标签: matlab regression model-fitting

我有一组嘈杂的数据,并希望在MATLAB中使用自定义方程。接下来,我将采用系数的值并在我的算法中使用它们。但是我被卡住了,我无法弄清楚为什么。我使用非线性方程a + b * log10(x1-dcos(alpha-x2)),其中x1,x2和响应值是已知的。第一个问题是a,b和alpha的系数必须是有界的。这里以度为单位的alpha只能在0到360之间变化。我不知道如何使用曲线拟合工具箱来实现这一点。

我还尝试了其他选项,如MATLAB中的非线性回归技术(fitnlm,lsqcurvefit等),这些选项被证明是令人失望的,因为我无法限制这些变量。因此,尽管非常合适,但系数太差了。

所以,问题1:如何使用曲线拟合拟合多个变量? 问题2:如果那不可能那么我可以使用除非线性回归之外的其他技术。

提前许多事!祝你有美好的一天!

1 个答案:

答案 0 :(得分:1)

好吧如果我遇到你的问题,你有一组数据,对于变量x1和x2以及你的结果y,你想用这个等式对它进行建模:

public class LoginServiceImpl extends RemoteServiceServlet implements LoginService {
    public void loginUser(String login, String password) {
         UserContext.get().pushSubject(
            UserContext.createSubject(connection, login, password, null)
         );
    }
}

首先,我将为此值创建数据:

y =  a + b * log10(x1 - cosd(alpha - x2)) % I suppose that dcos = cosd, I do not really known this functions

现在让我们生成de数据集

function y = getting_data(x1,x2)

a = 3;
b = 5;
alpha = 120;

y =  a + b * log10(x1 - cosd(alpha - x2));

创建一个为您的模型使用曲线拟合的函数

>> % generate the data sets
>> x1 = 9 .* rand(1000,1) + 1; % random values [1,10]
>> x2 = 360 .* rand(1000,1); % random values [0,360]
>> y = getting_data(x1,x2); % the values for the function

要小心输入向量,它应该是nx1到拟合函数

最后得到系数:

function myfit = fitting_data(x1,x2,y)

myfittype = fittype('a + b * log10(x1 - cosd(alpha - x2))',...
    'dependent',{'y'},'independent',{'x1','x2'},...
    'coefficients',{'a','b','alpha'})

myfit = fit([x1 x2],y,myfittype)

代表我们猜测的值

这样选择separe de con(A - B)也很有用:

trigonometic identities

还要记住

enter image description here