Matlab:在等式中找到两个未知的常数/参数

时间:2013-08-29 21:03:56

标签: matlab parameters

我已经阅读了fsolve和求解,并尝试了各种曲线拟合/回归方法,但我觉得我需要一些指导,然后才花更多时间尝试做一些可能是错误方法的工作。 / p>

我有一系列方程式我试图分别适合数据集(x):

例如:

(a+b*c)*d = x
a*(1+b*c)*d = x
     

x = 1.9248       3.0137       4.0855       5.0097       5.7226       6.2064       6.4655       6.5108       6.3543       6.0065

     

c = 0.0200       0.2200       0.4200       0.6200       0.8200       1.0200       1.2200       1.4200       1.6200       1.8200

     

d = 1.2849       2.2245       3.6431       5.6553       8.3327      11.6542      15.4421      19.2852      22.4525      23.8003

我知道c,d和x - 他们是观察。我的未知数是a和b,应该是常数。

我可以为每个x观察手动完成,但必须有一种自动的,更优越的方法或至少另一种方法。

非常感谢,如果我能得到一些指导。谢谢你的时间!

3 个答案:

答案 0 :(得分:2)

给出你的两个例子方程;让y = x。/ d,然后

  • y = a + b * c
  • y = a + a * b * c

第一种情况只是一行,您可以使用a获得最小二乘拟合(bpolyfit()的值)。在第二种情况下,你可以说k = a * b(因为这些都是适合的),然后重写为:

  • y = a + k * c

这与第一个问题完全相同,除了现在b = k / a。实际上,b = b1 / a是第二个问题的解决方案,其中b1是第一个问题的拟合。简而言之,要解决这两个问题,您需要拨打polyfit()和几个部门。

这对你有用吗?

答案 1 :(得分:1)

我看到两个不同的方程式适合这里。拼出代码:

(a+b*c)*d = x

p = polyfit(c, x./d, 1);
a = p(2);
b = p(1);

a*(1+b*c)*d = x

p = polyfit(c, x./d, 1);
a = p(2);
b = p(1) / a;

答案 2 :(得分:0)

不需要polyfit;这只是一个线性最小二乘问题,最好用MATLAB的slash运算符解决:

>> ab = [ones(size(c)) c] \ (x./d)
ans =
   1.411437211703194e+000  % 'a'
  -7.329687661579296e-001  % 'b'

更快,更清洁,更有教育意义:)

而且,正如埃米特已经说过的那样,你的第二个等式只不过是你的第一个等式的另一种形式,不同之处在于你的第一个等式中的b等于你的a*b。第二个。