我想问一下,你会matlab里的用ode解微分方程吗

来自:    更新日期:早些时候
matlab ode45解微分方程组~

1、你贴出来的报错信息和代码对不上号:前面显示错误的那行代码和你贴出来的完全不一样;而后面的错误(Input argument 'u1' is undefined)也不可能是目前的代码所导致的——的确是有错,但错误应该是iL未定义才对。

2、使用ode*系列函数解常微分方程,用于描述微分方程的函数(例如你这里的current)输入输出参数是有固定格式要求的,应该是
dy = current( t, y )
其中t是时间,y是t时刻的状态变量。这两二个参数即使你在函数中用不上,也必须列在参数表中。当然,变量的具体名字可以自定,但含义就是上面说的。

例如,按照你现在的写法,传递到current函数的u1就是时间,而u2则是微分方程的状态变量,相当于y,是一个向量,有3个元素。如果按照上面的固定格式,current函数不允许有三个输入参数,那么,既然你写了三个输入参数,第三个参数iL自然就没有定义,所以会出错。

我猜测,你的方程中u1、u2和iL其实就是状态变量y——如果是这样,那么在current函数中将其分别以y(1)、y(2)、y(3)代替就可以了,后面的大部分内容也就没必要看了。

之所以对描述微分方程的函数(例如current)有这种固定的格式要求,是因为 ode*系列函数属于所谓“函数的函数”(Function Functions),也就是说,它的输入参数当中有其它函数(可以是函数文件名,或者函数句柄,也可以是inline函数、匿名函数)。ode* 函数在求解过程中,会反复调用作为参数传递给它的函数,而调用的过程并非由我们决定的,而是固定地写在ode*函数代码中的,所以,对描述微分方程的函数有固定格式要求也就不足为奇了。

3、假如描述微分方程的函数除了t和y之外,的确还需要其它数据,应该怎么办?

首先,请认真考虑一下问题本身,这些数据到底是什么性质?

如果是常数,可以考虑直接写在current函数里面;

如果变化的,但仅与时间t和状态变量y及其导数有关,也可以直接在current函数里面计算出来,而无需由外部传递。

如果上面两种情况都不适合,那么就需要用到传递附加参数了。传递附加参数的常用手段包括使用匿名函数、嵌套函数以及通过函数参数传递三种方式,下面介绍一下第三种方式。

ode系列函数较为一般的调用格式为
[T,Y] =solver(odefun,tspan,y0,options,p1,p2...)
这些参数中,p1、p2等就是要额外传递的参数,而相应的微分方程函数应该定义成
dy = current( t, y,p1, p2... )
options为求解器选项,如果不知道(同时也不想知道)它有什么用,可以不用管它,调用的时候用空数组([])代替即可。

4、还有一点小问题:
dy=zeros(1,3);应改成
dy=zeros(3,1);描述微分方程的函数要求返回列向量。

参考改动
function dy = current( t, y )u1 = y(1);u2 = y(2);iL = y(3);dy=zeros(3,1);dy(1)=u1;dy(2)=u1/(1.96*10^-4)+u2/(1.96*10^-4)+iL/(10^-7);dy(3)=-u2/(17.2*10^-3)-0.5*iL/(17.2*10^-3);

这样修改后,程序可以运行,但求出来的结果是发散的,请你再仔细检查一下方程是否正确。

由于不确定你的方程中u1、u2和iL到底是什么,所以只能帮你说到这里了。

dy(1)是对y(1)求导数的 意思 后面一样了

嗯,会的
你如果想学的话,最好的方法是在matlab的帮助里面找,你在matla命令框里面输入help ode45, ode23, ode113, ode15s, ode23s, ode23t, ode23tb 中任意一种,不同的型号皆不同类型的微分方程,望采纳····


我想问一下,你会matlab里的用ode解微分方程吗视频

相关评论:
  • 17776034007你好,我想问一下MATLAB整流桥的各项参数是什么意思?谢谢啦
    邰莫柿Snubber resistance RS:意为缓冲电阻 Snubber capacitance Cs:意为吸收电容 Number of bridge arms:意思为多功能整流桥模型桥臂的相数 Power Electronic device:电力电子器件的种类 Ron:桥中使用的电力电子器件的内电阻 Lon:桥中使用的电力电子器件的内电阻 Forward voltage Vf:整流桥门槛电压 在测量"...

  • 17776034007如何学好 MATLAB
    邰莫柿而且代码段小,C\/C++需要几百行的代码,matlab可能只需要几行。大大节省编程时间。至于运行效率,对于处理非常大数据量时,matlab会无法处理,你会经常看到out of memory这样的错误信息,不过这对于任何计算软件都是一大瓶颈。至于优化算法的工具箱,他的算法都不是先进的算法,已经十多年没什么更新了,如果...

  • 17776034007学习matlab需要什么水平?
    邰莫柿参考一下:不过MATLAB有很多工具箱,如果你要使用专业的工具箱,是需要一点专业的知识的,例如:使用神经网络工具箱,无神经网络基础就不建议使用。小波工具箱也需要有小波的基础。上面的话可能会吓到你,不过不用担心的,MATLAB是目前最好学的编程语言之一,相当容易上手,如果只是想学MATLAB编程,那根本...

  • 17776034007我想问下MATLAB做logistic曲线拟合,并求出曲线拟合效果(R方等),然后...
    邰莫柿fun=inline('a(1).\/(1+exp(a(2)-a(3).*x))','a','x');2、利用nlinfit()函数,拟合方程的系数a(1),a(2),a(3)b=[0.95717 0.48538 0.80028]; x0的初值 [a,r,J] = nlinfit(x,y,fun,b);3、利用diff()函数,对dy=fun(a,x)求一阶导数 diff(dy,1)4...

  • 17776034007想问一下matlab里面怎么实现下面这个公式啊?
    邰莫柿如何用matlab实现题主给出的下面这个公式啊?我们可以这样考虑来写:1、首先将已知数据赋值分别给t和x,如 t=[t0 t1 t2 t3 。。。] %时间 x=[x0 x1 x2 x3 。。。] %对应时间的xi值 2、分别计算,①T0到T2的x(t)一系列数值;②T0到T1的x(t)一系列数值 3、分别计算,①T0到T2的...

  • 17776034007我用Matlab编程,问几个命令含义
    邰莫柿s 表示里面使用的单位是 radians\/second(弧度/秒)freqs 函数的作用是将一个用S域表示传递函数转换中频域的表达 ( FREQS Laplace-transform (s-domain) frequency response. )plot(f,20*log10(abs(hf)\/abs(hf(1)))plot()画图命令;20*log10(abs(hf)\/abs(hf(1)))求出在相对应的频率下的,...

  • 17776034007用matlab做一元线性回归,求大神帮忙解释一下这个命令。
    邰莫柿X和Y就是你要拟合的数据,上面的是MATLAB工具箱中的regress命令,为[b,bint,r,rint,stats]=regress(y,x,alpha).你这里alpha是缺省的此时默认是0.05 输出b为β的估计值,bint为b的置信区间,r为残差向量,rint为r的置信区间,stats为回归模型的检验统计量,有四个值,第一个是回归方程的决定系数R的平方(R是相关...

  • 17776034007matlab好用吗?
    邰莫柿MALAB界面也很友好,非常容易上手学习。可以这样说,在大学的工科学习中,MATLAB的仿真功能十分强大,不管是高数、电路、数字信号处理,数字图像处理,通信,自动控制等等都可以用到。单纯从仿真学习的角度,已经是足够用了,当然如果考虑工程实际应用,还是用C语言等做底层开发。具体可以参考一下介绍:http:...

  • 17776034007matlab如何设置为中文界面
    邰莫柿matlab是一款常用的办公软件,当有一天matlab界面如果是英文,你会不会懵?如何将英文界面更改为中文呢?小生带你将中文界面更改位中文界面。首先打开软件,点击左上角“home”。然后在该快捷工具栏中,点击图示位置的“preferences”选项。然后选中左侧的导航栏“general”选项。然后将图示位置的“Engpsh”...

  • 17776034007MATLAB问题~~·急~~!!! 会的 可以补加分数
    邰莫柿用max函数啊 max=ans(1,1);for i=1:4 for j=1:5 if ans(i,j)>max re=ans(i,j);maxi=i;maxj=j end;end;end;其中ans是你的4*5的矩阵 输出的re是最大值 maxi是最大值的行号 maxj是最大值的列号 小兄弟你看可以不?

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网