matlab 求解 微分方程 数值解 求代码
对于不是很复杂的微分方程(最好不包含逻辑判断之类的),可以使用匿名函数(7.0之前使用内联函数inline)定义微分方程,然后用ode*系列函数求解。
例如,作为ode*函数文档中的例子:
function dy = vdp1000(t,y)
dy = zeros(2,1); % a column vector
dy(1) = y(2);
dy(2) = 1000*(1 - y(1)^2)*y(2) - y(1);
可以用内联函数表示为:
vdp1000=inline('[y(2); 1000*(1 - y(1)^2)*y(2) - y(1)]','t','y');
[T,Y] = ode15s(vdp1000,[0 3000],[2 0]);
plot(T,Y(:,1),'-o')
提问的艺术(中文版)
在网络世界里,当提出一个技术问题时,你能得到怎样的回答?这取决于挖出答案的难度, 同样取决于你提问的方法。本指南旨在帮助你提高发问技巧,以获取你最想要的答案……
不想掩饰对这样一些人的蔑视--他们不愿思考,或者在发问前不去完成他们应该做的事。这种人只会谋杀时间--他们只愿索取,从不付出,无端消耗我们的时间,而我们本可以把时间用在更有趣的问题或者更值得回答的人身上。我们称这样的人为“失败者”(由于历史原因,我们有时把它拼作“lusers”)。
提问之前(Before You Ask)
在通过电邮、新闻组或者聊天室提出技术问题前,检查你有没有做到: 1. 通读手册,试着自己找答案。
2. 在FAQ里找答案(一份维护得好的FAQ可以包罗万象:)。 3. 在网上搜索(个人推荐google~~~)。 4. 向你身边精于此道的朋友打听。
当你提出问题的时候,首先要说明在此之前你干了些什么;这将有助于树立你的形象:你不是一个妄图不劳而获的乞讨者,不愿浪费别人的时间。如果提问者能从答案中学到东西,我们更乐于回答他的问题。
周全的思考,准备好你的问题,草率的发问只能得到草率的回答,或者根本得不到任何答案。越表现出在寻求帮助前为解决问题付出的努力,你越能得到实质性的帮助。
小心别问错了问题。
另一方面,表明你愿意在找答案的过程中做点什么,是一个非常好的开端。“谁能给点提示?”、“我这个例子里缺了什么?”以及“我应该检查什么地方?”比“请把确切的过程贴出来”更容易得到答复。因为你显得只要有人指点正确的方向,你就有完成它的能力和决心。
怎样提问 (When You Ask)
谨慎选择论坛
小心选择提问的场合。如果象下面描述的那样,你很可能被忽略掉或者被看作失败者: 1. 在风马牛不相及的论坛贴出你的问题
2. 在探讨高级技巧的论坛张贴非常初级的问题;反之亦然 3. 在太多的不同新闻组交叉张贴
结果:
代码:
clear all
clc
f=@(x,y)([y(2);
y(1)/3536.4*(y(2)^2+14.142*y(2)+70.71)]);
[x,Y]=ode45(f,[0 20],[3 0]);
plot(x,Y(:,1),x,Y(:,2)),legend('y','dy/dt')
xlabel('x')
如何用matlab求解微分方程组的数值解
在Matlab中求解微分方程组的数值解,首先需要定义一个函数文件,例如创建名为zhidao_feiying.m的文件,并输入以下代码:matlab function y=zhidao_feiying(t,x)a=1; b=2; c=3; d=4;f=a*x(1)+x(2)-x(3);g=b*sin(x(1)*x(2))-c*cos(x(3));h=d*x(2)-a*x(1);y=[f;g;...
如何用matlab求解微分方程组的数值解
y=[f;g;h];保存文件后,在Matlab命令行中输入以下代码,求解微分方程组在0到5时间范围内的数值解:t_end=5;x0=[1;1;1];[t,x]=ode45('zhidao_feiying',[0,t_end],x0);plot(t,x)legend('x','y','z')上述代码中,t_end表示求解的结束时间,x0是初始条件向量,ode45是用于求解常...
MATLAB怎么求解微分方程
第二种方法:利用Matlab中的solver函数(包括ode45、ode23、ode15s 等)来求解微分方程的数值解,这种方法是最常用的方法,对于dsolve函数难以求解的方程就可以利用这种方法求解方程的数值解。1. 打开Matlab--新建一个脚本文件用于编写求解程序。2. 在脚本文件中输入求解程序--点击保存--点击运行。3. 这里...
matlab微分方程的解?
1、自定义微分方程组函数,odefun(x,y)2、定义x【0,10】间若干等份的数值,如n=50 3、定义y的初值,即 y0=[2,7];4、使用ode45函数求y(x),z(x)数值解,即 [x,y]=ode45(@odefun,x,y0);5、使用plot函数,绘制x—y(x),x—z(x)曲线图 这里,y(1)代表y(x)的数值解,y(2)...
如何用MATLAB软件求微分方程?
在使用MATLAB软件求解微分方程时,通常可以采用两种主要方法:符号法和数值法。符号法适用于解析求解,其核心在于使用MATLAB的dsolve命令。例如,对于方程Df = f + sin(t),可以采用以下MATLAB代码进行求解:dsolve('Df = f + sin(t)')执行上述代码后,MATLAB将返回一个解析解,形式为C4*exp(t) - ...
用matlab求解微分方程初值问题数值解和解析解,求解范围为区间.并画出...
用matlab求解微分方程初值问题数值解和解析解,可以这样处理:一、数值解 微分方程初值问题数值解可以用ode函数求解。首先,自定义微分方程的函数,即 dy = 3\/x*y+x^3*(exp(x)+cos(x))-2*x;其二,确定初始条件,即 y0=[(exp(pi)+2\/pi)*pi^3];其三,使用ode45函数,求出其数值解【x,y...
matlab中求二阶微分方程 的解析解和数值解,并在同一图形中画出解析解...
首先,求解析解。使用dsolve函数求解微分方程:(1+x^2)*D2y=2*x*Dy,初始条件为y(0)=1,Dy(0)=3。命令为:y=dsolve('(1+x^2)*D2y=2*x*Dy','y(0)=1','Dy(0)=3',x)求得解析解为:y = x*(x^2 + 3) + 1。接下来,求数值解。编写函数myfun.m:function dy=myfun(x,...
matlab微分方程组的 数值解怎么求啊= =
exp(-2*t)*(sin(2*t+sym(pi)\/3)+cos(3*t))ans = exp(-2*t)*(sin(2*t+1\/3*pi)+cos(3*t))>> y=dsolve(['D5y+13*D4y+64*D3y+152*D2y+176*Dy+80*y=',...'exp(-2*t)*(sin(2*t+1\/3*pi)+cos(3*t))'],'y(0)=1','y(1)=3','y(pi)=2',...'Dy...
如何使用matlab求常微分方程组的数值解?
使用MATLAB求解常微分方程组的数值解,采用有限差分数值求解方法,核心在于泰勒展开近似微分。具体步骤如下:首先,设待求解量为[公式],其一阶导数的有限差分形式可近似表示为[公式]。这意味着通过取自变量相邻值的差作为导数的近似值。接着,对二阶导数的计算,采用的近似表达式为[公式],进一步简化了复杂...
随机微分方程的MATLAB数值求解
为了求解随机微分方程,引入了Ito引理,它以一种独特的链式法则形式描述了随机变量在变化过程中的行为。Euler-Maruyama方法是求解这类方程的一种数值解法,通过迭代计算近似值。使用MATLAB进行随机微分方程求解的示例代码如下,以几何布朗运动为例:参数定义 mu = 0.06;sigma = 0.04;y0 = 5;N = 100000...