matlab if语句解函数,Matlab:if语句和abs()函数在变步长ODE求解器中
我正在网上阅读这篇文章,其中提到使用“if语句”和“abs()”函数会在MATLAB的变步长ODE求解器(如ODE45)中产生负面影响.根据OP,它可以显着影响时间步长(需要太低的时间步长),并且当微分方程最终被积分时给出差的结果.我想知道这是否属实,如果是,为什么.此外,如果不诉诸固定步骤求解器,如何减轻这个问题.我在下面给出了一个示例代码,我的意思是:
function [Z,Y] = sauters(We,Re,rhos,nu_G,Uinj,Dinj,theta,ts,SMDs0,Uzs0,...
Uts0,Vzs0,zspan,K)
Y0 = [SMDs0;Uzs0;Uts0;Vzs0]; %Initial Conditions
options = odeset('RelTol',1e-7,'AbsTol',1e-7); %Tolerance Levels
[Z,Y] = ode45(@func,zspan,Y0,options);
function DY = func(z,y)
DY = zeros(4,1);
%Calculate Local Droplet Reynolds Numbers
Rez = y(1)*abs(y(2)-y(4))*Dinj*Uinj/nu_G;
Ret = y(1)*abs(y(3))*Dinj*Uinj/nu_G;
%Calculate Droplet Drag Coefficient
Cdz = dragcof(Rez);
Cdt = dragcof(Ret);
%Calculate Total Relative Velocity and Droplet Reynolds Number
Utot = sqrt((y(2)-y(4))^2 + y(3)^2);
Red = y(1)*abs(Utot)*Dinj*Uinj/nu_G;
%Calculate Derivatives
%SMD
if(Red > 1)
DY(1) = -(We/8)*rhos*y(1)*(Utot*Utot/y(2))*(Cdz*(y(2)-y(4)) + ...
Cdt*y(3)) + (We/6)*y(1)*y(1)*(y(2)*DY(2) + y(3)*DY(3)) + ...
(We/Re)*K*(Red^0.5)*Utot*Utot/y(2);
elseif(Red < 1)
DY(1) = -(We/8)*rhos*y(1)*(Utot*Utot/y(2))*(Cdz*(y(2)-y(4)) + ...
Cdt*y(3)) + (We/6)*y(1)*y(1)*(y(2)*DY(2) + y(3)*DY(3)) + ...
(We/Re)*K*(Red)*Utot*Utot/y(2);
end
%Axial Droplet Velocity
DY(2) = -(3/4)*rhos*(Cdz/y(1))*Utot*(1 - y(4)/y(2));
%Tangential Droplet Velocity
DY(3) = -(3/4)*rhos*(Cdt/y(1))*Utot*(y(3)/y(2));
%Axial Gas Velocity
DY(4) = (3/8)*((ts - ts^2)/(z^2))*(cos(theta)/(tan(theta)^2))*...
(Cdz/y(1))*(Utot/y(4))*(1 - y(4)/y(2)) - y(4)/z;
end
end
功能“dragcof”由以下内容给出:
function Cd = dragcof(Re)
if(Re <= 0.01)
Cd = (0.1875) + (24.0/Re);
elseif(Re > 0.01 && Re <= 260.0)
Cd = (24.0/Re)*(1.0 + 0.1315*Re^(0.32 - 0.05*log10(Re)));
else
Cd = (24.0/Re)*(1.0 + 0.1935*Re^0.6305);
end
end
matlab if语句解函数,Matlab:if语句和abs()函数在变步长ODE求解器中相关推荐
- matlab计算不同时间步长,Matlab ODE求解器中的时间步长计算
您应该知道步长是动态调整的,没有"步长" . 获得一般简化的想法:总误差E由每个时间步的原子误差组成 . 在第一顺序中,它是求和,更确切地说,存在所涉及的原子误差的某种累积放大率 ...
- 关于求解微分方程——初学Matlab里的 ODE求解器
学习背景 最近想挖掘一下自己项目的理论深度,于是找到了老师.在老师的建议下,我们开始了漫长的研读老师的论文的旅程(论文名:Optimal Design of Adaptive Robust Contr ...
- matlab求解器是什么,Matlab理解ode求解器
我有一个链接微分方程组,我用ode23求解器求解 . 当达到某个阈值时,其中一个参数会改变,这会改变我的函数的斜率 . 我使用调试功能跟踪了ode的行为,并注意到它在这个点附近开始跳回"时间 ...
- imu matlab,IMU姿态解算matlab
[实例简介] IMU姿态解算matlabIMU姿态解算matlabIMU姿态解算matlab [实例截图] [核心代码] GaitTrackingWithx-IMU └── Gait Tracking ...
- matlab ode 实例,选择 ODE 求解器
参考 [1] Shampine, L. F. and M. K. Gordon, Computer Solution of Ordinary Differential Equations: the I ...
- Matlab优化求解器中的Tolerances and Stopping Criteria
文章目录 何为tolerance 主要的tolerance 何为tolerance The number of iterations in an optimization depends on a s ...
- 相位解包裹 matlab,二维相位解包裹matlab
第39卷第3期2015年5月 激 光 技 术LASERTECHNOLOGY Vol.39,No.3May,2015 文章编号: 1001-3806(2015)03-0423-05 相位解包裹中欠采样问 ...
- matlab bvp4c猜测解,对具有两个解的 BVP 求解
编写方程代码 创建一个函数以编写方程代码.此函数应具有签名 dydx = bvpfun(x,y) 或 dydx = bvpfun(x,y,parameters),其中: x 是自变量. y 是解(因变 ...
- matlab求微分方程同届,matlab求微分方程精确解及近似解.ppt
matlab求微分方程精确解及近似解 求微分方程的解 问题背景和实验目的 Euler 折线法 初值问题的Euler折线法 Euler 折线法举例 Euler 折线法源程序 Euler折线法举例(续) ...
最新文章
- PHP面向对象(OOP):抽象方法和抽象类(abstract)
- hdu4740 Sum
- 两个半小时,一份Python基础试卷,满分100,却有80%的人都不及格
- 用户运营平台产品设计指南
- [实践系列]Promises/A+规范
- 云端研发新基建:Serverless与持续架构服务落地实践
- java隐藏与覆盖_Java 隐藏和覆盖
- 基于JAVA+SpringBoot+Mybatis+MYSQL的疾病报销管理系统
- 波及1.95亿辆车,黑莓承认系统存在漏洞,大众、宝马纷纷“躺枪”
- VS2010/MFC设置对话框控件的Tab顺序
- php curl get post请求
- mysql互为主从有什么问题吗_mysql 互为主从复制常见问题
- Mac Sublime Text 3插件安装
- LabVIEW参考资料汇总
- 一键清空服务器文件,一键清理操作系统垃圾文件的BAT
- 斑马打印机linux驱动安装教程,linux-Zebra软件包的基本安装与配置
- arcgis for javascript 4.18 添加图片到地图(可用于实现雷达图片上图)
- Deep Mutual Learning
- 使用Python,OpenCV获取、更改像素,修改图像通道,剪裁ROI
- mysql error unpacking_linux 安装 mysql rpm包出现error: unpacking of archive failed on file