matlab_最小二乘优化问题

【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
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值