【问题标题】:Multiple Variable Non Linear Regression OR Curve Fitting Matlab多变量非线性回归或曲线拟合 Matlab
【发布时间】:2016-11-13 10:53:48
【问题描述】:

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

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

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

提前很多 thnak !祝你有美好的一天!

【问题讨论】:

  • cftool 中配置您的问题,直到您解决问题为止,然后使用“导出代码”功能来学习如何以编程方式完成。
  • @Sayantan Roy 你试过答案了吗?或者请澄清您的问题
  • @anquegi 抱歉回复晚了。是的,我看到了您的回答,并感谢您的努力。我的问题是我得到的拟合给出了一个奇怪的 alpha 值,它只能在 0 到 360 之间。我使用了你的函数并添加了一个界限。但是,配件不能满足我的需求。我觉得一组数据可能有不同数量的解,因为 cos(theta) = cos(-theta)。因此,当 matlab 计算角度 alpha 时,它会生成一个值,但是这个 alpha 也可以是另一个满足相同方程和数据集的值。我不知道如何获得 alpha 的多个值。
  • @Sayantan Roy,也许你可以使用我稍后添加到响应中的 tirgonmetic 身份,这样我们很容易找到该值,而且我们注意 x2 也是角度
  • 小心 cos(alfa),它是真的 cos(alfa) = cos(-alfa),但在这种情况下是 cos(-alfa+X2)。所以在我看来 alfa 只能是 alfa + n*360 是 n 从 0 到无穷大,所以是同一个角度,注意 X2 的范围

标签: matlab regression model-fitting


【解决方案1】:

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

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

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

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

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

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)

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

最后我们得到系数:

>> fitting_data(x1,x2,y)

myfittype = 

     General model:
     myfittype(a,b,alpha,x1,x2) = a + b * log10(x1 - cosd(alpha - x2))
Warning: Start point not provided, choosing random start point. 
> In curvefit.attention.Warning/throw (line 30)
  In fit>iFit (line 299)
  In fit (line 108)
  In fitting_data (line 7) 

     General model:
     myfit(x1,x2) = a + b * log10(x1 - cosd(alpha - x2))
     Coefficients (with 95% confidence bounds):
       a =           3  (3, 3)
       b =           5  (5, 5)
       alpha =         120  (120, 120)


     General model:
     ans(x1,x2) = a + b * log10(x1 - cosd(alpha - x2))
     Coefficients (with 95% confidence bounds):
       a =           3  (3, 3)
       b =           5  (5, 5)
       alpha =         120  (120, 120)

代表我们猜测的值

像这样分离 de con(A - B) 也会很有用:

还要记住这一点

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 2020-07-21
    • 2021-07-23
    • 2013-10-25
    • 1970-01-01
    • 2013-05-22
    相关资源
    最近更新 更多