帶做騎傳奇私服網(wǎng)站泉州seo按天計(jì)費(fèi)
一、找到工具箱存放位置
首先我們需要找到工具箱的存放位置,點(diǎn)擊這個(gè)設(shè)置路徑可以看到

我們的matlab工具箱的存放位置
C:\Program Files\MATLAB\R2023a\toolbox\matlab
從資源管理器中打開這個(gè)位置,可以看到里面各種工具箱
二、放入工具箱
解壓我們的工具箱gpops,可以看到里面有兩個(gè)文件夾

將這兩個(gè)文件夾直接放到上面的工具箱存放位置,可以復(fù)制也可以剪切。
三、添加文件
這時(shí)我們可以添加我們的工具箱了

點(diǎn)擊添加并包含子文件,找到之前的那兩個(gè)文件的位置,也就是
C:\Program Files\MATLAB\R2023a\toolbox\matlab\lib
C:\Program Files\MATLAB\R2023a\toolbox\matlab\nlp
將這兩個(gè)文件添加并包含子文件。
然后就可以在matlab程序中用這兩個(gè)工具箱了
四、測(cè)試GPOPS
剛剛我們添加的工具箱是GPOPS2的工具箱,現(xiàn)在可以測(cè)試一下這個(gè)工具箱
clc;clear;close all;
tic;
% 設(shè)置時(shí)間
t0 = 0;
tf = 2;
% 設(shè)置狀態(tài)量初值
x10 = -2;
x20 = 1;
% 設(shè)置狀態(tài)量邊界條件
x1Min = -5;
x1Max = 5;
x2Min = -5;
x2Max = 5;
% 設(shè)置控制量邊界條件
uMin = -1.5;
uMax = 1.5;bounds.phase.initialtime.lower = t0;
bounds.phase.initialtime.upper = t0;
bounds.phase.finaltime.lower = tf;
bounds.phase.finaltime.upper = tf;
bounds.phase.initialstate.lower = [x10 x20];
bounds.phase.initialstate.upper = [x10 x20];
bounds.phase.state.lower = [x1Min x2Min];
bounds.phase.state.upper = [x1Max x2Max];
bounds.phase.finalstate.lower = [0 0];
bounds.phase.finalstate.upper = [0 0];
bounds.phase.control.lower = uMin;
bounds.phase.control.upper = uMax;
bounds.phase.integral.lower = 0;
bounds.phase.integral.upper = 10000;guess.phase.time = [t0; tf];
guess.phase.state = [[x10; 0],[x20; 0]];
guess.phase.control = [1; uMin];
guess.phase.integral = 100;setup.name = 'Vehicle-Stopping-OCP';
setup.functions.continuous = @vsopcContinuous;
setup.functions.endpoint = @vsopcEndpoint;
setup.bounds = bounds;
setup.guess = guess;
setup.nlp.solver = 'snopt';
setup.derivatives.supplier = 'sparseCD';
setup.derivatives.derivativelevel = 'second';
setup.mesh.method = 'hp1';
setup.mesh.tolerance = 1e-6;
setup.mesh.maxiteration = 45;
setup.mesh.colpointsmax = 4;
setup.mesh.colpointsmin = 10;
setup.mesh.phase.fraction = 0.1*ones(1,10);
setup.mesh.phase.colpoints = 4*ones(1,10);
setup.method = 'RPMintegration';output = gpops2(setup);
solution = output.result.solution;
toc;%% 函數(shù)模塊部分
% ----------------------------------------------------------------------- %
% ------------------------- BEGIN: vsopcContinuous.m -------------------- %
% ----------------------------------------------------------------------- %
function phaseout = vsopcContinuous(input)
t = input.phase.time;
% x1 = input.phase.state(:,1);
x2 = input.phase.state(:,2);
u = input.phase.control(:,1);dx1 = x2;
dx2 = u;phaseout.dynamics = [dx1, dx2];
phaseout.integrand = 0.5*u.^2;
end
% ----------------------------------------------------------------------- %
% -------------------------- END: vsopcContinuous.m --------------------- %
% ----------------------------------------------------------------------- %% ----------------------------------------------------------------------- %
% -------------------------- BEGIN: vsopcEndpoint.m --------------------- %
% ----------------------------------------------------------------------- %
function output = vsopcEndpoint(input)J = input.phase.integral;
output.objective = J;
end
% ----------------------------------------------------------------------- %
% --------------------------- END: vsopcEndpoint.m ---------------------- %
% ----------------------------------------------------------------------- %
這里我們直接使用了別人的程序來進(jìn)行測(cè)試,測(cè)試結(jié)果是正確的。