【lsqlin函数】
lsqlin函数是有约束线性最小二乘函数,用以求含参量x(向量)使得∑(Cx-d)2 , {i∈N|i=1:n}最小。
数学模型为:
min ∑ ( Cx - d )2 , { i ∈ N | i = 1:n }
s.t. Ax≤b,
Aeqx=beqx,
LB≤x≤UB.
【实例】
函数形式:
[x, resnorm, residual, exitflag, output, lambda] = lsqlin(C, d, A, b, Aeq, beq, LB, UB, x0, options);
function Example()
clear all
clc
C = [0.9501
0.2311
0.6068
0.4859
0.8912];
d = [0.0578
0.3528
0.8131
0.0098
0.1388];
[x, fval] = lsqlin(C, d, [], [], [], [], [], [])
subplot(1, 2, 1);
%将多个图画到一个平面上
plot(C, d, 'o', C, C*x, 'r', C, C*x, '+')
axis([0 1 0 1]);
%绘图时x、y轴的上下限
grid on
%在画图的时候添加网格线。
xx = linspace(0, 1);
%linspace(x1,x2,N)均分指令,其中x1、x2、N分别为起始值、终止值、元素个数。若默认N,默认点数为100。
%logspace(a, b, n)生成一个(1*n)数组,数据的第一个元素值为10^a,最后一个元素为10^b,n是总采样点数。
subplot(1, 2, 2);
plot(C, C*x, '+', xx, x*xx, 'r')
axis([0 1 0 1])
grid on
end
【lsqcurvefit函数】
非线性数据(曲线)拟合函数
已知数据点:
xdata = (xdata1, xdata2, …, xdatan)
ydata = (ydata1, ydata2, …, ydatan)
F(x, xdata) = (f1(x, xdata1), …, fn(x, xdatan) )T 中的参变量x(向量),使得
∑(F(x, xdatai) - ydatai)2 最小.
[x, fval] = lsqcurvefit(‘fun’, x0, xdata, ydata)
【实例】
function Example()
clear all
clc
xdata = [3.6 7.7 9.3; 4.1 8.6 2.8; 1.3 7.9 10.0];
ydata = [16.5 150.6 263.1]';
x0 = [0, 0, 0];
[x, resnorml] = lsqcurvefit(@myfun, x0, xdata, ydata)
end
function F = myfun(k, xdata)
F = k(1)*xdata(:,1)+k(2)*xdata(:,2)+k(3)*xdata(:,3);
end
【lsqnonlin函数】
非线性最小二乘(非线性数据拟合)函数
已知数据点:
xdata = (xdata1, xdata2, …, xdatan)
ydata = (ydata1, ydata2, …, ydatan)
F(x, xdata) = (f1(x, xdata1), …, fn(x, xdatan) )T 中的参变量x(向量),使得
∑fi(x)2 最小.
其中,fi(x) = f(x, xdatai, ydatai) = F(x, xdatai) - ydatai.
[x, fval] = lsqnonlin(‘fun’, x0)
【实例】
function Example()
clear all
clc
x0 = [0.3 0.4];
[x, resnorml] = lsqnonlin(@myfun, x0)
end
function F = myfun(x)
k = 1:10;
F = 2 + 2*k-exp(k*x(1))-exp(k*x(2));
end