0

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

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

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

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

4

1 回答 1

1

好吧,如果我遇到您的问题,您有一组数据,用于变量 x1 和 x2 以及 thre 结果 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) 也很有用:

三角恒等式

还要记住

在此处输入图像描述

于 2016-07-11T16:32:10.247 回答