用ode45解有约束的微分方程
来源:学生作业帮助网 编辑:作业帮 时间:2024/08/14 04:22:36
![用ode45解有约束的微分方程](/uploads/image/f/6250556-20-6.jpg?t=%E7%94%A8ode45%E8%A7%A3%E6%9C%89%E7%BA%A6%E6%9D%9F%E7%9A%84%E5%BE%AE%E5%88%86%E6%96%B9%E7%A8%8B)
我去,你这个……肯定得先把方程化成一阶线型方程组哇,二阶导数怎么算!百度文库找个实例看看
初值条件看不太懂
函数FreeOcillation(t,x,dummy,zeta)写错了,应该把那个dummy删掉.该参数在函数中并未使用,而且调用的时候也没有提供相应的数据.命令窗口的空矩阵代表ode求解器的选项.各
初值不够呀,应该有四个,题目能不能贴出来?
参考代码:functionout=hw2Q4() tspan=[040];%Rangeoftwearesolvinginitcond=[00];%Initialcon
把方程和初值条件都列出来这一大堆东西几个人看得懂?再问:公式(1)(2)就是方程啊,我写的那两个就是对应的方程。倒数第二张图片有实验数据。还需要什么参数吗?非常抱歉,我学的专业不太扎实,问题可能有点弱
示例如下:odefun=@(t,y)(y+3*t)/t^2;%定义函数tspan=[02.3];!y0=-2;%初值[t,y]=ode45(odefun,tspan,y0);其中求解区间为0~2.3,
functiontest()[t,y]=ode45(@func1,[0,1],[0;0;1;2;2;2]);figure(1);clf;plot(t,y);legend('x','y','z','dx
%先建立一个M文件,然后都复制进去,运行试一试functionMyexamp1cleartspan=[0:0.01:20];y0=[0;0.25];[tt,yy]=ode45(@vandepol,ts
你把lgkt中的x改成x(1)试试看,我试过应该没问题的function xx=lgkt(t,x)xx=3*x(1)+cos(t)+sin(2*t);[t,x]=ode45(@lgkt,[0
新的matlab版本好像不鼓励采用global了.你的全局变量有点多了,哈哈.简单例子:m=2;[t,y]=ode45(@(t,x)f1(t,x,m),[0,10],[2])functiondy=f1
3、4不会……5、r^2-2r+2=0r=1±ix=C1e^[(1+i)t]+C2e^[(1-i)t]=e^t(C1cost+C1isint+C2cost-C2isint)把C1+C2看做C1,i(C
function[x,y]=runge_kutta1(ufunc,y0,h,a,b)%参数表顺序依次是微分方程组的函数名称,初始值向量,步长,时间起点,时间终点,n=floor((b-a)/h);%求
dy(1)是对y(1)求导数的意思后面一样了
建立myfun.m文件,把以下代码复制进去function dx=myfun(t,x)dx=zeros(2,1);dx(1)=4*x(1)+x(2).^2;dx(2)=8*x(1)+2*x(
我来解答你的关键问题:将之前主程序计算出来的系数用globalcof定义,再在ode45的子函数里同样定义globalcof,这样就能把值计算出来并且传递进去了.
其实,小于和小于等于是一样的!这么说:小于的极限就是小于等于所以,小于等于,你写成小于就好了!再问:那如果目标函数的最小值取值是,x=-8,可是约束条件是x+8
因为你x=0时2/x是无穷大呀,然后y'又是0,然后(2/x)y'就是nan了,所以后面算的全是nan了.
参考代码: %参数定义m1=1;m2=2;m3=3;k1=4;k2=5;k3=6;k4=7;P0=8;w=9;%微分方程A=[k1+k2-k10;-k2k2+k3-k3;0-k3k3+k4]
functiondy=myfunc(x,y)a=b=c=dy=zeros(2,1)dy(1)=y(2)dy(2)=(b*dy(2)^2-c*sin(y(1)))/a这里的dy(1)是一阶导数,所以你的