x=[0.34 0.35 0.36 0.37 0.38 0.39 0.40 0.41 0.42 0.43];
y=[0.211 0.313 0.466 0.692 1.03 1.532 2.190 3.250 4.823 7.158];
拟合第一个:
function f = first(c, x, y)
f = y - c(1) .* x .^ c(2);
保存为first.m文件。
命令行下运行:
c = lsqnonlin('first', [0 0], [], [], [], x, y);
a = c(1)
b = c(2)
拟合第二个:
function f = first2(c, x, y)
f = y - c(2) .* exp(c(1) .* x);
保存为first2.m文件。
命令行下运行:
c2 = lsqnonlin('first2', [0 0], [], [], [], x, y);
a2 = c2(1)
b2 = c2(2)
用polyfit函数,(用来多项式拟合的,是用最小二乘法)
举个例子
x=[90 91 92 93 94 95 96];
z=[70 122 144 152 174 196 202];
a=polyfit(x,z,1)
结果:
a =
1.0e+03 *
0.0205 -1.7551
1表示1次多项式(一次时就是直线,适用于你的情况)
a是多项式的系数向量,是从高次项往低次项排的,
如果想运用结果,比如想知道当x=97时z等于多少
那么有两种方法,
直接用系数
>>a(1)*97+a(2)
ans =
233.4286
或者用polyval函数
>>polyval(a,97)
ans =
233.4286
最小二乘法是一种数学优化技术,它通过最小化误差的平方和找到一组数据的最佳函数匹配。
最小二乘法是用最简的方法得一些绝对不可知的真值,而令误差平方之和为最小。
最小二乘法通常用于曲线拟合。很多其他的优化问题也可通过最小化能量或最大化熵用最小二乘形式表达。
比如从最简单的一次函数y=kx+b讲起
已知坐标轴上有些点(1.1,2.0),(2.1,3.2),(3,4.0),(4,6),(5.1,6.0),经过这些点的图象的一次函数关系式.
当然这条直线不可能经过每一个点,我们只要做到5个点到这条直线的距离的平方和最小即可,这这就需要用到最小二乘法的思想.然后就用线性拟合来.讲起来一大堆,既然你只问最小二乘法,我就讲这么多.
这是大学里才学的内容,一般用于建模.
以上是使用最小二乘法拟合乘幂函数y=a*x^b和指数函数y=b*exp(a)的详细内容。更多信息请关注PHP中文网其他相关文章!