【车辆动力】基于Matlab模拟停车动力学

news2024/9/24 13:14:07

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

对影响汽车行驶安全的各方面因素进行了较为深入的分析和研究,建立停车动力学数学模型;该汽车数学模型不需引入很多的人为假设;.利用MATLAB语言开发了一个模块化的仿真软件,该软件能够满足所建模型的校验和在特殊工况下的仿真研究;也可以进一步完善该软件使之服务于汽车运行的其他方面的仿真研究.

⛄ 部分代码

function [x,result,Hfree,free,trace] = boxQP(H,g,lower,upper,x0,options)

% Minimize 0.5*x'*H*x + x'*g  s.t. lower<=x<=upper

%

%  inputs:

%     H            - positive definite matrix   (n * n)

%     g            - bias vector                (n)

%     lower        - lower bounds               (n)

%     upper        - upper bounds               (n)

%

%   optional inputs:

%     x0           - initial state              (n)

%     options      - see below                  (7)

%

%  outputs:

%     x            - solution                   (n)

%     result       - result type (roughly, higher is better, see below)

%     Hfree        - subspace cholesky factor   (n_free * n_free)

%     free         - set of free dimensions     (n)

if nargin==0

   demoQP(); % run the built-in demo

   return;

end

n        = size(H,1);

clamped  = false(n,1);

free     = true(n,1);

oldvalue = 0;

result   = 0;

gnorm    = 0;

nfactor  = 0;

trace    = [];

Hfree    = zeros(n);

clamp    = @(x) max(lower, min(upper, x));

% initial state

if nargin > 4 && numel(x0)==n

x = clamp(x0(:));

else

    LU = [lower upper];

    LU(~isfinite(LU)) = nan;

x = nanmean(LU,2);

end

x(~isfinite(x)) = 0;

% options

if nargin > 5

    options        = num2cell(options(:));

    [maxIter, minGrad, minRelImprove, stepDec, minStep, Armijo, print] = deal(options{:});

else % defaults

    maxIter        = 100;       % maximum number of iterations

    minGrad        = 1e-8;      % minimum norm of non-fixed gradient

    minRelImprove  = 1e-8;      % minimum relative improvement

    stepDec        = 0.6;       % factor for decreasing stepsize

    minStep        = 1e-22;     % minimal stepsize for linesearch

Armijo         = 0.1;    % Armijo parameter (fraction of linear improvement required)

print          = 0; % verbosity

end

% initial objective value

value    = x'*g + 0.5*x'*H*x;

if print > 0

fprintf('==========\nStarting box-QP, dimension %-3d, initial value: %-12.3f\n',n, value);

end

% main loop

for iter = 1:maxIter

    

    if result ~=0

        break;

    end

    

    % check relative improvement

    if( iter>1 && (oldvalue - value) < minRelImprove*abs(oldvalue) )

        result = 4;

        break;

    end

    oldvalue = value;

    

    % get gradient

    grad     = g + H*x;

    

    % find clamped dimensions

    old_clamped                     = clamped;

    clamped                         = false(n,1);

    clamped((x == lower)&(grad>0))  = true;

    clamped((x == upper)&(grad<0))  = true;

    free                            = ~clamped;

    

    % check for all clamped

    if all(clamped)

        result = 6;

        break;

    end

    

    % factorize if clamped has changed

    if iter == 1

        factorize    = true;

    else

        factorize    = any(old_clamped ~= clamped);

    end

    

    if factorize

        [Hfree, indef]  = chol(H(free,free));

        if indef

            result = -1;

            break

        end

        nfactor            = nfactor + 1;

    end

    

    % check gradient norm

    gnorm  = norm(grad(free));

    if gnorm < minGrad

        result = 5;

        break;

    end

    

    % get search direction

    grad_clamped   = g  + H*(x.*clamped);

    search         = zeros(n,1);

    search(free)   = -Hfree\(Hfree'\grad_clamped(free)) - x(free);

    

    % check for descent direction

    sdotg          = sum(search.*grad);

    if sdotg >= 0 % (should not happen)

        break

    end

    

    % armijo linesearch

    step  = 1;

    nstep = 0;

xc    = clamp(x+step*search);

    vc    = xc'*g + 0.5*xc'*H*xc;

    while (vc - oldvalue)/(step*sdotg) < Armijo

        step  = step*stepDec;

        nstep = nstep+1;

xc    = clamp(x+step*search);

        vc    = xc'*g + 0.5*xc'*H*xc;

        if step<minStep

            result = 2;

            break

        end

    end

    

    if print > 1

fprintf('iter %-3d  value % -9.5g |g| %-9.3g  reduction %-9.3g  linesearch %g^%-2d  n_clamped %d\n', ...

iter, vc, gnorm, oldvalue-vc, stepDec, nstep, sum(clamped));

    end

    

    if nargout > 4

        trace(iter).x        = x; %#ok<*AGROW>

        trace(iter).xc       = xc;

        trace(iter).value    = value;

        trace(iter).search   = search;

        trace(iter).clamped  = clamped;

        trace(iter).nfactor  = nfactor;

    end

    

    % accept candidate

    x     = xc;

    value = vc;

end

if iter >= maxIter

    result = 1;

end

results = { 'Hessian is not positive definite',...          % result = -1

            'No descent direction found',...                % result = 0    SHOULD NOT OCCUR

            'Maximum main iterations exceeded',...          % result = 1

            'Maximum line-search iterations exceeded',...   % result = 2

            'No bounds, returning Newton point',...         % result = 3

            'Improvement smaller than tolerance',...        % result = 4

            'Gradient norm smaller than tolerance',...      % result = 5

            'All dimensions are clamped'};                  % result = 6

if print > 0

    fprintf('RESULT: %s.\niterations %d  gradient %-12.6g final value %-12.6g  factorizations %d\n',...

        results{result+2}, iter, gnorm, value, nfactor);

end

function demoQP()

options = [100 1e-8 1e-8 0.6 1e-22 0.1 2]; % defaults with detailed printing

n  = 500;

g  = randn(n,1);

H  = randn(n,n);

H  = H*H';

lower  = -ones(n,1);

upper  =  ones(n,1);

tic

boxQP(H, g, lower, upper, randn(n,1), options);

toc

⛄ 运行结果

⛄ 参考文献

[1]张勇, 殷承良, 熊伟威. 基于Matlab的车辆动力学控制交互式硬件在环仿真系统研究[J]. 机械科学与技术, 2006, 25(7):4.

[2]郑战光, 汪兆亮, 王佳祥,等. 基于matlab的汽车动力学仿真计算[J]. 装备制造技术, 2015(11):3.

⛄ Matlab代码关注

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/56954.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 音频处理以及可视化 Amplitude,MFCC,Mel Spectrogram, librosa 库

利用python库 librosa库对于音频文件进行预处理&#xff0c;以及可视化操作。 1. Load Audio Data 导入音频 将音频文件&#xff08;这里使用苹果录音文件 .m4a 格式&#xff09;导入librosa&#xff0c;音频格式可以为其它&#xff08;甚至视频文件mp4也是可以的&#xff09…

【Docker】Dockerfile:常见保留字、使用案例

Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。 官网&#xff1a;链接 构建三步骤 编写Dockerfile文件构建镜像&#xff1a;docker build用镜像运行容器实例&#xff1a;docker run 一、常用的保留字 二、使用案例 要…

Spring MVC统一异常处理的3种方式(附带实例)

在 Spring MVC 应用的开发中&#xff0c;不管是对底层数据库操作&#xff0c;还是业务层或控制层操作&#xff0c;都会不可避免地遇到各种可预知的、不可预知的异常需要处理。 如果每个过程都单独处理异常&#xff0c;那么系统的代码耦合度高&#xff0c;工作量大且不好统一&a…

html5期末大作业:基于html+css+javascript+jquery+bootstarp响应式图书电商HTML模板网上书店(25页)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

STC 51单片机51——直流电机PWM

//开发板按钮K3和K4用于调速&#xff0c;直流电机接部件电机模块Vcc和O1 #include"reg52.h" #define u8 unsigned char #define u16 unsigned int sbit O1P1^0;//ULN2003 sbit K3P3^2; //减速 sbit K4P3^3; //加速 u8 Flag; u16 T, PWM, Temp;//T为控制周期…

Java项目:ssm赛事打分系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 赛事评分系统&#xff0c;SSM框架。该项目分管理员、裁判、选手三个用户角色。 管理员主要功能&#xff1a; 首页、选手管理、裁判管理、赛事管…

【2022世界杯开源项目实战】使用docker部署world-cup-2022-cli-dashboard数据看板工具

【2022世界杯开源项目实战】使用docker部署world-cup-2022-cli-dashboard数据看板工具一、world-cup-2022-cli-dashboard介绍1.工具介绍2.数据看板的内容二、检查本地docker环境1.检查docker版本2.检查docker状态三、构建world-cup-2022-cli-dashboard的镜像1.下载world-cup-20…

如何用蓝牙实现无线定位(四)--远程定位显示

1. 待救援定位设备 按照下面的针脚使用杜邦线将待救援定位设备的主蓝牙、从蓝牙连接到主控板上&#xff0c;和本地显示时的连接针脚是一样的&#xff0c;但是由于不需要连接OLED&#xff0c;因此不需要堆叠Bigfish。 参考视频 烧录程序如下&#xff08;human.ino&#xff09;&a…

善网ESG周报(第三期)

ESG报告&#xff1a; 陆金所控股发布2021年ESG报告 以可持续商业模式创造社会价值 从11月28日发布的报告来看&#xff0c;其公司2021年累计帮助超310万小微企业主并开展170场环保公益活动和超610场金融科普活动。 金融界联合济安金信发布首份《京津冀ESG绿色标杆企业报告》&a…

Keras深度学习高级(四)

本篇涉及的内容 如何将模型的结构由层升级成图如何使用 Keras 的回调函数在训练过程中监控模型&#xff0c;并根据模型状态采取行动使用TensorBoard将模型可视化什么是批标准化、深度可分离卷积和残差连接为什么应该使用超参数优化和模型集成 第一部分 Keras的函数式API 一、…

Nexus私服 (一)

(一) Nexus-OSS私服介绍 平时用maven构建项目&#xff0c;pom会默认去maven仓库下载包&#xff0c;网速都比较慢。此时可以选择国内的镜像&#xff08;ex:阿里云仓库&#xff09;如果想要自己管理项目的包&#xff0c;亦或者你的开源项目有多个人维护的时候&#xff0c;就需要考…

Allegro如何添加泪滴操作指导

Allegro如何添加泪滴操作指导 Allegro支持添加泪滴操作,保证焊接的可靠性,还可以调整泪滴的大小和形状,类似下图 具体操作如下 以给下图的pin和孔加泪滴为例 首先设置参数,route-Gloss-Parameters 点击Fillet and Taper Trace前面的方框 勾选下方的参数,Max size的值…

自己编写程序publish出kitti数据集,可视化kitti数据集

目的:不使用kitti2bag,因为kitti2bag的格式都是固定的,如果将来自己要添加什么东西,这个就会变得非常麻烦,自己编写程序就会右很多的变化。 开始之前仍然要下载kitti数据集,下载方式参考Ubuntu1804里进行KITTI数据集可视化操作_FYY2LHH的博客-CSDN博客 1、先执行roscor…

一款.Net7前后端分离、跨平台的通用权限管理框架

今天给大家推荐一个开源项目&#xff0c;基于.NetCore开发的、多租户的、前后端分离的企业开发框架。 项目简介 这是一个前后端分离、跨平台的、基于RBAC的通用框架&#xff1b;支持多租户、任务调度、缓存、国际化&#xff0c;前端支持Vue2/3&#xff0c;支持分表分库。 框…

【图像分类损失】SimLoss:一个适合于年龄估计的分类损失

Roses are red, violets are blue, both are somehow similar, but the classifier has no clue. 论文题目&#xff1a;《SimLoss: Class Similarities in Cross Entropy》&#xff08;2020年&#xff09; 论文地址&#xff1a;https://arxiv.org/pdf/2003.03182v1.pdf 1.背景…

Hbuilder打包成APP流程,以及遇到的坑

1.打包项目 期间遇到的坑&#xff0c;提前说下&#xff0c;避免重复工作。 【因为很多网友说自己打包的APP是白屏&#xff0c;这是需要实名认证才能使用的工具&#xff0c;灰灰产还是用其他的工具吧】 我打包的安卓APP给大家欣赏一下&#xff1a; https://wwttl.lanzout.co…

Spring MVC使用SessionLocaleResolver实现用户自定义切换语言实例

在许多成熟的商业软件系统中可以让用户自由切换语言&#xff0c;而不是修改浏览器的语言设置。一旦用户选择了自己需要使用的语言环境&#xff0c;整个系统的语言环境将一直是这种语言环境。 Spring MVC 也可以允许用户自行选择程序语言。本章通过 Web 应用 springMVCDemo09 演…

Linux安装使用Minio

目录简介安装方式1(推荐)安装方式2使用简介 需要一个靠谱的文件管理系统&#xff0c;所以想到了minio。在此记录过程。使用树莓派搭建。Linux下载不同的包即可。 官网地址&#xff1a;https://www.minio.org.cn/ 官方下载地址&#xff1a;https://dl.min.io/server/minio/rele…

FFmpeg二次开发

本文主要讲解 FFmpeg 的二次开发&#xff0c;ffmpeg.exe 的命令行功能特别强大&#xff0c;很多需求都能直接用命令行实现&#xff0c;但是总有一些需求用 命令行实现不太好做。 而你实现那些特殊需求&#xff0c;通常需要把 ffmpeg.exe 里面的某部分代码抄过来&#xff0c;本…

Android databinding之RecycleView使用与讲解(二)

一 、介绍 通过上一篇databinding接入&#xff0c;我们已大概了解到databinding接入的流程和数据的简单绑定。 如果你刚看这边&#xff0c;并不了解databinding的使用&#xff0c;可以查看&#xff1a;Android databinding的接入使用与详解(一) Activity和fragment的数据绑定…