如何用matlab求解向量微分方程

作者&投稿:移鹏 (若有异议请与网页底部的电邮联系)
~ ODE部分--------ODE--->ordinary
differential
equations先总述一下:D 1、ode的求解器ode

ODE的求解器有很多,在help里可以查到。列出了每一种求解器的适应范围(stiff或者nonstiff)以及它采用的数学原理,比如Runge-Kutta,Adams,NDFs之类。(这个在数值分析课中会学到,可惜偶当时觉得很无聊,后悔中)。

大家有时间多去了解了解,懂了来给大家分享分享:D


如果不懂那么多理论,优先采用ode45,如果你发现它计算的效率特别低下或者是计算根本出不来,则考虑换ode15s。
sol是任意名字。对于怎么把要求解的方程写为function,2楼例子。所以你告诉求解器这三样东西(输入参数),它就可以为你求解出y。

sol
=
ode45(@yourfun,[tmin,tmax],[y0,y0'])

你的公式

积分范围

初值

sol=ode45(@vdp1,[0,20],[2,0]);

把以上代码命令行里直接执行,这是matlab自带的一个例子。在workspace里你会看到多了一个变量叫sol.没错这就是求解器的返回值。它是一个1*1的结构体。双击它,你会看到它的内部组织,各个field以及它们的“形状”。每一个你都可以双击它,继续深入看它的结构。我现在关心的只有X,Ysolverextdata,x,y,stats,idata================================================================================2、求解计算完毕后,我们可以做什么

首先,当然是得到结果。

deval(sol,x,1)

sol如上,写在求解等号左边的变量名字,是返回来的handles。x是一组向量,是你期望求值的点。数字1就表示你要y第一行的值(这个是在求解微分方程组的情况。不明白什么叫第一行,就去双击sol,再双击y),如果去掉1,则返回矩阵,也就是所有y的值。在matlab命令行运行以下代码:
sol=ode45(@vdp1,[0,20],[2,0]);x=linspace(0,20,100);y=deval(sol,x,1);plot(x,y);

此外,我们还可以扩展,matlab叫做odextend。扩展什么?

odextend(sol,odefun,tfinal)

看到最后一个变量名了吧,t_final
这样明显一点。也就是,我之前算过的微分方程组,原来算到t1,我现在要接着继续计算到新的t_final。默认以上次计算的y终值,作为此次计算的初值。

odextend(sol,odefun,tfinal,yinit)

当然,如果你想重新给它赋初值,也可以加入参数yinit。(友情提示:获取上次计算的Y的终值:y=sol.y(:,end))

sol=odextend(sol,@vdp1,20);plot(sol.x,sol.y(1,:))=====================================================================================

3、求解器的参数设置

就是option这个东西,既然是选项,则也可以不设置它,采用默认值。

要设置的话,可以用odeset这个命令。怎么用?

option=odeset('name1',value1,'name2',value2......) (matlab所有参数设置基本上都是这种形式)

name自然就是属性名字。value就是你赋予它的值。求解器可以设置哪些参数,而设置了这些参数有什么影响,而这些参数应该则么设置。在命令行里输入
help
odeset:D
。看到的绝对比我讲得详细。所以我不多说了。(友情提醒,如果使用ode15什么来着,可以为它设置Jacobian这个参数,以更快更准更好的求解。如何设置,不懂的话,偶过后会贴。)

O=odeget(option,'name')

编过GUI的话这两个命令再熟悉不过了:D


如何用Matlab求解级数的和??
在Matlab中,我们可以使用内置函数来求解级数的和。这里我们以一个无穷级数为例,例如:求和 ∑(i=1 to ∞) (1\/i^2)。步骤如下:首先,我们需要定义一个函数来计算每一项的值。在这个例子中,我们的函数是 f(i) = 1\/i^2。然后,我们需要定义一个变量来存储级数的和。接下来,我们需要使用一...

如何用matlab求多项式乘积?
如何用matlab求多项式乘积,可以直接用conv()函数来计算。其使用格式:w = conv(u,v) %u 和 v 是多项式系数的向量 例如:(x²+1)×(2x+7)第一步, 创建包含多项式 x²+1 和 2x+7 的系数的向量 u 和 v。即 u = [1 0 1];v = [2 7];第二步,使用conv函数,...

如何使用MATLAB求方程的解?
Rule[x,1]就等价于Rule[x,1], 从而可以用solutions[[1,1,2]]提取出它的第二个参数. 类似地, 其它解也可用solutions[[2,1,2]], solutions[[3,1,2]]等表达式提取出来. 为了得到它们的平方和, 输入 Sum[solutions[[k,1,2]]^2,{k,1,6}]91 ...

matlab中如何求导?
MATLAB中可以使用符号计算(Symbolic Math Toolbox)来求导。符号计算工具箱允许用户对符号表达式进行数学运算,包括求导、积分等。要使用符号计算工具箱,首先需要确保已经安装并加载了此工具箱。在MATLAB中,可以使用`syms`命令来定义符号变量。例如,要定义一个符号变量`x`,可以使用`syms x`。然后,可以...

如何用matlab求方差?
方法:1."SHIFT"+"MODE(SETUP)"+"下"+"3(STAT)"+"1(ON)"2."MODE"+"2(STAT)"+"1(1-VAR)"3.在左边输入数字,右边输入数字出现的频率。4."AC"+"SHIFT"+"1(STAT)"+"5(Var)"+"3(xσn)"+"="方差是各个数据分别与其平均数之差的平方的和的平均数,用字母D表示。在概率论和数理...

如何用MATLAB求π的近似值?
如下:y=0;for n=1:1000000 xx=(-1)^(n-1)\/(2*n-1);if abs(xx)>10^(-6)y=y+xx;else break end end fprintf('π的近似值为%.6f ,共需迭代%d步\\n',y*4,n)。介绍 MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。行矩阵运算、...

怎么用Matlab求拐点和凹凸区间
用Matlab求拐点和凹凸区间需要使用MATLAB。工具\/原料:联想hinkBook 14-llL Windows10 MATLAB2.33 1、启动MATLAB,输入如下代码,求解函数曲线的一阶导数、二阶导数、拐点和拐点处的切线方程。close all; clear all; clc;format compact MATLAB之考研数学:函数的导数和求函数在拐点处的切线方程 syms x ...

matlab求逆
使用MATLAB求矩阵的逆时,需要按照以下步骤操作:1. 确保矩阵是方阵。如果不是方阵,需要先进行转换或者选择其他处理方法。2. 在MATLAB命令窗口输入“inv”并运行。3. 查看输出结果,即为原矩阵的逆矩阵。此外,还需要注意以下几点:并非所有矩阵都有逆矩阵,例如奇异矩阵就没有逆矩阵。求逆计算可能会涉及...

如何用matlab求二阶微分方程的图像解
如何用matlab求二阶微分方程的图像解。可以按下列方法来求解。1、自定义二阶微分方程函数,ode_fun(t,y),其格式 function dy=ode_fun(t,y)dy=[y(2);sin(y(1))\/(-0.02)-0.04*t];2、利用ode45函数求解[t,y]值 y0=[0.2,2.6];tspan=[0,10];[t,y]=ode45(@ode_fun,tspan,y0...

如何用matlab求特征值?
使用matlab可以方便的计算任何复杂的方阵的特征值和特征向量:1、首先需要知道计算矩阵的特征值和特征向量要用eig函数,可以在命令行窗口中输入help eig,查看一下eig函数的用法,如下图所示:2、在命令行窗口中输入a=[1 2 3;2 4 5;7 8 9],按回车键之后,输入[x,y]=eig(a),如下图...

献县17673498738: 如何使用MATLAB求解微分方程 -
雍姿功劳: 可以用desolve方程:r=dsolve('eqn1','eqn2',...,'cond1','cond2',...,'var').eqn1表示第1个微分方程,cond1表示第1个初始条件,var表示微分方程中的自变量,默认为t.

献县17673498738: Matlab如何求解矩阵微分方程组的符号解例如:dX/dt=HX,X为列向量,H为矩阵H=[2*c,A,0;0,g,0;A,0,a],c,a,g,A为符号常量,初值X(0)=[0,1,0]',求方程组的解X? -
雍姿功劳:[答案] 使用dsolve函数 dsolve('Dx=2*c*x+A*y','Dy=g*y','Dz=A*x+A*z','x(0)=0','y(0)=1','z(0)=0') 就是把方程组写出三个微分方程进行计算 祝你学习愉快!

献县17673498738: 如何用MATLAB软件求微分方程?
雍姿功劳: 有符号法和数值法.一般使用dsolve和ode命令,比如: 符号法 dsolve('Df = f + sin(t)') ans = C4*exp(t) - sin(t)/2 - cos(t)/2 数值法 sol = ode45(@vdp1,[0 20],[2 0]);x = linspace(0,20,100);y = deval(sol,x,1); plot(x,y);

献县17673498738: 如何用matlab求解微分方程并画图 -
雍姿功劳: ^如何用matlab求解程并画图 dsolve()求解微分方程后,使用ezplot()作图,参考代码:1 2>> y = dsolve('Dy=y*cos(x)/(1+2*y^2)','y(0)=1','x'); >> ezplot(y,[-10,10]) % [-10,10]为x区间

献县17673498738: 需要用MATLAB求解微分方程,想请高手指导一下:
雍姿功劳: 先令x1=x,x2=y,x3=z,然后先建立描述微分方程的m函数文件dif.m,写入以下代码 function dx=dif(t,x) dx=zeros(3,1); dx(1)=0.85*x(1)+0.25*x(2)+0.35*x(3)-0.8*x(1)^2*x(2); dx(2)=0.8*x(1)^2*x(2)-1.2*x(2); dx(3)=0.9*x(1)+0.8*x(2)-0.3*x(3); 再建立调用...

献县17673498738: MATLAB中怎么解微分方程 -
雍姿功劳: 好像没什么特别好的办法: >> syms t q y; q=4*t^3;>> syms Dy>> eq=Dy-(q-2*t);>> y=dsolve(char(subs(eq)),'y(0)=5','t') y = t^4-t^2+5 也就是要先移项把微分方程写成等号右端为零的形式(需额外定义Dy),然后subs代入,再求解.

献县17673498738: 如何利用matlab求解微分方程的表达式 -
雍姿功劳: dsolve()求解微分方程后,使用ezplot()作图,参考代码: >> y = dsolve('Dy=y*cos(x)/(1+2*y^2)','y(0)=1','x');>> ezplot(y,[-10,10]) % [-10,10]为x区间

献县17673498738: 怎么样用MATLAB求函数的微分 -
雍姿功劳: MATLAB 提供的函数diff( )可用来求解符号对象的微分,其调用的格式为 (1) diff(S,'v'):对符号对象S 中指定的符号变量v 求其1 阶导数. (2) diff(S):对符号对象S 中的默认的独立变量求其1 阶导数. (3) diff(S,n):对符号对象S 中的默认的独...

献县17673498738: matlab怎么对微分方程求解 -
雍姿功劳: 这个不用,如果f是数,直接 dsolve('m*D2y+c*Dy+k*y=f') 就可以了 如果f是f(t) 需要编写程序用ode45 首先编写m-file%%%%%%%%%%%%%function dotx=myfun(t,y) dotx=[y(2);1/m*(-c*y(2)-k*y(1)+f(t))];%f(t)要写出具体形式%%%%%%%%%%%%%%%M-file 以上要单存一个文件在工作路径下%%%%%%%%%%%%% 在command 窗口 [t,y]=ode45('myfun',[t_0,t_final],[y_0,y'_0])%[t_0,t_final]和[y_0,y'_0]分别问求解区间和初值 再用plot画图

献县17673498738: 怎么用matlab解微分方程 dy/dx=A - By - Cxy -
雍姿功劳:[答案] syms A B C x y; >> dsolve('Dy=A-B*y-C*x*y','x') ans = -1/2*A*erf(1/2*(-2*C)^(1/2)*x-B/(-2*C)^(1/2))*exp(-1/2*x*(2*B+C*x)-1/2*B^2/C)/C*2^(1/2)*(-pi*C)^(1/2)+exp(-1/2*x*(2*B+C*x))*C1

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网