【发布时间】:2021-07-20 06:31:20
【问题描述】:
我正在使用以下优化脚本,通过它我在两点 y_1(t_1=0)=1 和 y_2(t_2=10) 之间拟合以下曲线 y(t)=c_1+c_2 e^{-t} =7
我的问题是,如何通过添加约束 y(t=5)>4 来解决相同的优化问题?
clc;
clear;
tic
%The Data: Time and response data
t = [0 10]';
y = [1 7]';
%Look at the Data
subplot(2,1,1)
plot(t,y,'*','MarkerSize',10)
grid on
xlabel('Time')
ylabel('Response')
hold on
%Curve to Fit
E = [ones(size(t)) exp(-t)]
%Solving constrained linear least squares problem
% cNew = lsqlin(E,y,[],[],[1 1],y(1),[],[],[],opt) % Solver-based approach
p = optimproblem;
c = optimvar('c',2);
p.ObjectiveSense = 'minimize';
p.Objective = sum((E*c-y).^2);
% constraint example: p.Constraints.intercept = c(1) + c(2) == 0.82
sol = solve(p);
cNew = sol.c;
tf = (0:0.1:10)';
Ef = [ones(size(tf)) exp(-tf)];
yhatc = Ef*cNew;
%plot the curve\
subplot(2,1,2)
plot(t,y,'*','MarkerSize',10)
grid on
xlabel('Time')
ylabel('Response')
hold on
plot(tf,yhatc)
title('y(t)=c_1 + c_2e^{-t}')
toc
【问题讨论】:
-
这令人困惑。您提供两 (2) 个数据点和两 (2) 个参数中的参数曲线。这是一个直接拟合问题,而不是 OLS 回归。您的意思是这两个点限定了感兴趣的范围(并且可能您的数据介于两者之间)?
-
如何修改目标函数如下。
p.Objective = sum((E*c-y).^2)+ 1e2*(sum(c)-0.82).^2;。阅读有关约束优化的拉格朗日乘数。 -
@J.A.Ferrand 抱歉,我刚刚修改的问题中遗漏了一部分。我的目标是在 T0 和 Tf 的两点之间拟合(优化)一条曲线,以便在 T0 和 Tf 之间,组合某些约束(例如 T0=0,Tf=10 并且约束在 T=4 y(t)~=3)
-
@Praveen 你能看看我刚刚在上面添加的评论吗
标签: matlab optimization mathematical-optimization convex