千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 了解odeset函数

了解odeset函数

来源:千锋教育
发布人:xqq
时间: 2023-11-20 20:01:50 1700481710

一、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)) 

tags: 删除npm
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取

上一篇

C# URL编码详解

下一篇

data-index
相关推荐HOT