我已经阅读了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观察手动完成,但必须有一种自动的,更优越的方法或至少另一种方法。
非常感谢,如果我能得到一些指导。谢谢你的时间!
答案 0 :(得分:2)
给出你的两个例子方程;让y = x。/ d,然后
第一种情况只是一行,您可以使用a
获得最小二乘拟合(b
和polyfit()
的值)。在第二种情况下,你可以说k = a * b(因为这些都是适合的),然后重写为:
这与第一个问题完全相同,除了现在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
。第二个。