了解odeset函数

一、odeset函数

Matlab的ode求解器是用于解决常微分方程组(ODE)的函数。odeset函数可以使用户控制其中大多数选项的值。这个函数返回一个structure。Odset结构体可以在ODE求解器中作为参数使用。ODE求解器采用Odset中指定的选项的值。用法如下:

options = odeset('Name1',value1,'Name2',value2,...)

options就是返回的structure,Name1,value1等为其可选项与值。

如下的代码段,指定sine函数的初值问题求解器ode15s的舍入误差容忍值为1e-3,绝对误差容忍度为1e-6,并绘制结果:

tspan = [0,10]; 
y0 = 0; 
options = odeset('RelTol',1e-3, 'AbsTol', 1e-6); 
[t,y] = ode15s(@(t,y) sin(t),tspan,y0,options); 
plot(t,y)

二、odeset控制步长

在ODE的数值解法中,步长是决定数值稳定性和解的精度的因素之一。ODE求解器用绝对误差、相对误差和几个事件等条件进行调整。设步长和状态的修改发生在离散块中的固定时刻;当状态改变时调用事件函数。ODE求解器使用odeset函数返回的选项结构来设置绝对和相对误差容忍度、与事件相关的参数等值。下面的代码演示使用options参数重式调整求解器ode45的默认步长:

tspan = [0,10]; 
y0 = [1,0]; 
options = odeset('RelTol', 1e-6, 'AbsTol',1e-10,'MaxStep',0.1); 
[t,y] = ode45(@odefcn,tspan,y0,options); 

function dydt = odefcn(t,y) 
dydt = [y(2); -y(1)]; 
end

MaxStep选项是指定最大步长,ode45设置的默认步长为0.1左右。

三、odeset中的reltol

相对最大误差范围,定义为 abs(当前步长计算的值-olsolve函数返回的值) / max(atol,abs(当前计算的值)* reltol)。定下来的认识是在与客观测量数据进行比较时,如果求解器成功误差要小于设定的容忍范围,否则算法就继续迭代并重新计算相应的步长
在线性求解器中,误差通常按照量表T,解向量Y和时间变量T进行测量,通过向量来测量误差。ODE45中reltol默认值是1e-3:

tspan [0,30]; 
y0 = [2 0]; 
options = odeset('RelTol',1e-2); 
[t,y] = ode45(@odefcn,tspan,y0,options); 

function dydt = odefcn(t,y) 
dydt = [y(2); -y(1)]; 
end

四、ode to,odeset两个events耦合怎么写

如果您要在多个例程中使用odeset选项,则可以创建一个options结构,然后将它传递给每个例程:

options = odeset('RelTol',1e-3); 
[t1,y1] = ode45(@odefcn,tspan,y0,options); 
[t2,y2] = ode23(@odefcn,tspan,y0,options);

它可以帮助改变相同的相对误差,即尽管它的默认值不同。在ODE求解器中支持事件函数(式)。您可以在特定的时间进入或离开事件。每次输入事件函数时,必须告诉ODE求解器是否计算相应的事件。 如果计算相应的事件,则必须提供一个组成向量的事件结果和指示哪个事件被触发的事件检测向量。最后,您必须告诉ODE求解器下一个时间段的结束时间。下面的示例展示了如何使用“ode23”甚至偶数次方运行情况:

tspan = [0 10]; 
y0 = 1; 
[D,c] = ode23(@ode1,tspan,y0,odeset('events',@ode2)); 
plot(D,c),xlabel('Time'),ylabel('Solution') 

function dy = ode1(t,y) 
dy = y; 
end 

function [value,isterminal,direction] = ode2(t,y) 
value = mod(t,2) == 0;     % 奇数次方 
isterminal = false;   %不终止迭代器 
direction = 0;    % 无方位可指定 
end 

五、odeset matlab

对于不同的求解器和问题,ODE求解器有很多选项设置。在控制求解器行为方面,odeset函数是个非常重要的函数。Matlab函数库提供的ode45、ode23、ode113、ode15s等都适用odeset函数,它们都包含多个选项和值。以下是一个示例,其中设定求解器ode45的初始步长为0.01,佣金步长为0.1,相对容错为1e-6的绝对容错为1e-10:

tspan = [0,10]; 
y0 = [2,2]; 
options = odeset('IntialStep',0.01,'MaxStep',0.1,'RelTol',1e-6,'AbsTol',1e-10); 
[t,y] = ode45(@(t,y) [y(2) ; -y(1)],tspan,y0,options); 
plot(t,y(:,1))

六、ode to you

ODE(Ordinary Differential Equation)是指普路伐斯微分方程,大学数学中的常微分方程概念。数学家们对ODE这个领域做了很多研究,除了很多解析方法,还有很多数值求解器。比如一些经典的方法:欧拉法、改进欧拉法、龙格库塔法(RK)等,它们都能帮助我们求解ODE问题,但是数值精度和时间效率不同。ode45函数是在所有数值求解器中精度和时间效率均衡的算法。因此,ode45是求解ODE问题的函数,类似的函数还有:ode15s、ode23、ode23tb、ode113等。

七、ode to joy

在ODE求解器中,ode45函数用于求解常微分方程组,下面是一个关于ode45函数求解简单双摆的例子:

%简单双摆

tspan=[0,70];  % 时间范围 
y0=[0,pi/2,pi/2,0]; %初值 

[t,y] = ode45(@fxy,tspan,y0);  % 返回时间刻度“t”和值“y”

%绘制红色线条

line([0 2*sin(y(1,1))],[0 -2*cos(y(1,1))],'color','r') %摆锤1 
hold on 

line([2*sin(y(1,1)) 2*sin(y(1,1))+2*sin(y(1,2))],[-2*cos(y(1,1)) -2*cos(y(1,1))-2*cos(y(1,2))],'color','r') %摆锤2 
axis([-3 3 -3 3]); % 绘图区间 
whitebg('w');  % 背景颜色 
box('on')  % 绘制边界 
title('Double Pendulum')  % 标题 
xlabel('x (m)')  % x轴标签 
ylabel('y (m)')  % y轴标签 

% 第一列与第三列

function dy = fxy(t,y)

 g=9.8;  % 重力加速度 
 l = 2;  % 摆杆长
 dy=zeros(4,1);
 dy(1)=y(2); 
 dy(2)=(-g*2*sin(y(1))-2*sin(y(1)-y(3))*((y(4)^2)+(y(2)^2)*cos(y(1)-y(3))))/(2-l*cos(y(1)-y(3))^2); 
 dy(3)=y(4); 
 dy(4)=(2*sin(y(1)-y(3)))*((y(2)^2)+(2*g*cos(y(1))) +(y(4)^2)*cos(y(1)-y(3)))/(2-l*cos(y(1)-y(3))^2); 

八、ode to a nightingale

Matlab的ode求解器是用于解决常微分方程组(ODE)的函数,odeset函数可以使用户控制选项的值。ode生态系统中有一个很大的工具箱,可以轻松解决大多数的ODE问题。ond45是其中一种求解器,能够顺利解决大多数的知名ODE问题。

以下是ode45函数的代码实现:

tspan = [0,10]; %时间范围 
y0 = [1, 0]; % 初值 
options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-5]); %选项 
[t,y] = ode45(@model,tspan,y0,options); % 函数调用 

function dydt = model(t,y) 
dydt = zeros(2,1); 
dydt(1) = y(2); 
dydt(2) = -4*y(1) - 2*y(2); 
end 

plot(t,y(:,1)) 

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/253876.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-14 02:17
下一篇 2024-12-14 02:17

相关推荐

  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python中capitalize函数的使用

    在Python的字符串操作中,capitalize函数常常被用到,这个函数可以使字符串中的第一个单词首字母大写,其余字母小写。在本文中,我们将从以下几个方面对capitalize函…

    编程 2025-04-29
  • Python中set函数的作用

    Python中set函数是一个有用的数据类型,可以被用于许多编程场景中。在这篇文章中,我们将学习Python中set函数的多个方面,从而深入了解这个函数在Python中的用途。 一…

    编程 2025-04-29
  • 三角函数用英语怎么说

    三角函数,即三角比函数,是指在一个锐角三角形中某一角的对边、邻边之比。在数学中,三角函数包括正弦、余弦、正切等,它们在数学、物理、工程和计算机等领域都得到了广泛的应用。 一、正弦函…

    编程 2025-04-29
  • 单片机打印函数

    单片机打印是指通过串口或并口将一些数据打印到终端设备上。在单片机应用中,打印非常重要。正确的打印数据可以让我们知道单片机运行的状态,方便我们进行调试;错误的打印数据可以帮助我们快速…

    编程 2025-04-29
  • Python3定义函数参数类型

    Python是一门动态类型语言,不需要在定义变量时显示的指定变量类型,但是Python3中提供了函数参数类型的声明功能,在函数定义时明确定义参数类型。在函数的形参后面加上冒号(:)…

    编程 2025-04-29
  • Python定义函数判断奇偶数

    本文将从多个方面详细阐述Python定义函数判断奇偶数的方法,并提供完整的代码示例。 一、初步了解Python函数 在介绍Python如何定义函数判断奇偶数之前,我们先来了解一下P…

    编程 2025-04-29
  • Python实现计算阶乘的函数

    本文将介绍如何使用Python定义函数fact(n),计算n的阶乘。 一、什么是阶乘 阶乘指从1乘到指定数之间所有整数的乘积。如:5! = 5 * 4 * 3 * 2 * 1 = …

    编程 2025-04-29
  • 分段函数Python

    本文将从以下几个方面详细阐述Python中的分段函数,包括函数基本定义、调用示例、图像绘制、函数优化和应用实例。 一、函数基本定义 分段函数又称为条件函数,指一条直线段或曲线段,由…

    编程 2025-04-29
  • Python函数名称相同参数不同:多态

    Python是一门面向对象的编程语言,它强烈支持多态性 一、什么是多态多态是面向对象三大特性中的一种,它指的是:相同的函数名称可以有不同的实现方式。也就是说,不同的对象调用同名方法…

    编程 2025-04-29

发表回复

登录后才能评论