f = inline('-x(1)-2*x(2)+0.5*x(1)^2+0.5*x(2)^2');
A = [2 3; 1 4; -1 0; 0 -1];
b = [6;5;0;0];
[x, fmin] = fmincon(f,[0 0],A,b)
% 繪圖標出最小值
figure(1)
ezcontour('-x-2*y+0.5*x^2+0.5*y^2',[0 2.5],[0 2],100)
hold on
ezplot('2*x1+3*x2-6')
ezplot('x1+4*x2-5')
plot(x(1),x(2),'ro')
title('2{\itx}_1 + 3{\itx}_2 \leq 6; {\itx}_1 + 4{\itx}_2 \leq 5; {\itx}_1, {\itx}_2 \geq 0')
% (2) 最小二乘擬合
% 1、擬合和很多因素有關,比如初值、擬合函數的選擇、算法設置等。
% 2、按現有程序擬合的結果:c1=3.1564, c2=5.2165,從結果看,不算太理想。
% 3、感覺擬合函數的形式應該選為 y=c1+c2*(-c3*t)比較合理,相應的結果見下。
t = 1 : 10;
y = [4.842 4.362 3.754 3.368 3.169 3.038 3.034 3.016 3.012 3.005];
f = inline('c(1)+c(2)*exp(-t)','c','t');
c = lsqcurvefit(f, [0 0], t, y);
c1 = c(1)
c2 = c(2)
% 另壹種形式的擬合函數
f1 = inline('c(1)+c(2)*exp(-c(3)*t)','c','t');
C = lsqcurvefit(f1, [0 0 1], t, y);
% 把擬合結果與原始數據對照
figure(2)
plot(t,y, '-o', t, f(c, t), 'r:x', t, f1(C, t), 'g--p');
legend('原始數據', '擬合函數y=c_1+c_2 e^{-t}', '擬合函數y=c_1+c_2 e^{-c_3 t}')