matlab解微分方程组ode45
用ode45解微分方程组以前基本都没碰过matlab,自己试着编了一点儿,搞不定啊,求高手指点。。。。只剩这么多分了,好人一生平安,雅安加油!**************...
用ode45 解微分方程组 以前基本都没碰过matlab,
自己试着编了一点儿,搞不定啊,求高手指点。。。。 只剩这么多分了,好人一生平安,雅安加油!
*************************************************************************************
function dx=myfun1(t,x)
dx(1)=(-0.000275/0.000557)*x(1)+0.1324/0.000557*x(2)-0.38/0.00057;
dx(2)=(-0.1356/0.0537)*x(1)-2.8/0.0537*x(2);
dx=dx(:);
***************************************************************************************
function dx=myfun2(t,x)
dx(1)=(-0.000275/0.000557)*x(1)+0.1324/0.000557*x(2)-0.38/0.00057;
dx(2)=(-0.1356/0.0537)*x(1)-2.8/0.0537*x(2)+50/0.0537;
dx=dx(:);
*****************************************************************************************
@liuliangsxd 您好,下面的是我根据您给的程序,完善的我的程序,我根据要求在旁边写出了注释,麻烦您再给看一下哪里还不对,还是运行不了啊。谢谢。
真的第一次用,困难重重,希望得到你的帮助。以下为M文件内容。
g=0.7;w=100;%g为放大倍数;w为给定转速;
E3=[g 0];%定义一个1行2列矩阵
E4=[w,0];%定义一个2行一列矩阵
x(1)=0;%X(1)为当前系统转速,x(2)为电流
x(2)=0;
X=[x(1),x(2)];%定义一个2行一列矩阵
for v1=20:0.5:100%v1是输入电压 要求从20变化到100,步长为0.5
if (E3*(X-E4)>=(2.2*t)/0.01)%t为运行时刻,本系统周期选为 10ms;
%系统根据是否满足If后面的这一条件 选择 系统运行状态
f=inline('[(-0.000275/0.000557)*x(1)+0.1324/0.000557*x(2)-0.39/0.00057;(-0.1356/0.0537)*x(1)-2.9/0.0537*x(2)]','t','x'); %系统运行 状态1
else
f=inline('[(-0.000275/0.000557)*x(1)+0.1324/0.000557*x(2)-0.39/0.00057;(-0.1356/0.0537)*x(1)-2.9/0.0537*x(2)+v1/0.0537]','t','x'); %系统运行状态2
end
ode45(f,2,[0 0])
end 展开
自己试着编了一点儿,搞不定啊,求高手指点。。。。 只剩这么多分了,好人一生平安,雅安加油!
*************************************************************************************
function dx=myfun1(t,x)
dx(1)=(-0.000275/0.000557)*x(1)+0.1324/0.000557*x(2)-0.38/0.00057;
dx(2)=(-0.1356/0.0537)*x(1)-2.8/0.0537*x(2);
dx=dx(:);
***************************************************************************************
function dx=myfun2(t,x)
dx(1)=(-0.000275/0.000557)*x(1)+0.1324/0.000557*x(2)-0.38/0.00057;
dx(2)=(-0.1356/0.0537)*x(1)-2.8/0.0537*x(2)+50/0.0537;
dx=dx(:);
*****************************************************************************************
@liuliangsxd 您好,下面的是我根据您给的程序,完善的我的程序,我根据要求在旁边写出了注释,麻烦您再给看一下哪里还不对,还是运行不了啊。谢谢。
真的第一次用,困难重重,希望得到你的帮助。以下为M文件内容。
g=0.7;w=100;%g为放大倍数;w为给定转速;
E3=[g 0];%定义一个1行2列矩阵
E4=[w,0];%定义一个2行一列矩阵
x(1)=0;%X(1)为当前系统转速,x(2)为电流
x(2)=0;
X=[x(1),x(2)];%定义一个2行一列矩阵
for v1=20:0.5:100%v1是输入电压 要求从20变化到100,步长为0.5
if (E3*(X-E4)>=(2.2*t)/0.01)%t为运行时刻,本系统周期选为 10ms;
%系统根据是否满足If后面的这一条件 选择 系统运行状态
f=inline('[(-0.000275/0.000557)*x(1)+0.1324/0.000557*x(2)-0.39/0.00057;(-0.1356/0.0537)*x(1)-2.9/0.0537*x(2)]','t','x'); %系统运行 状态1
else
f=inline('[(-0.000275/0.000557)*x(1)+0.1324/0.000557*x(2)-0.39/0.00057;(-0.1356/0.0537)*x(1)-2.9/0.0537*x(2)+v1/0.0537]','t','x'); %系统运行状态2
end
ode45(f,2,[0 0])
end 展开
2个回答
展开全部
把方程和初值条件都列出来
这一大堆东西几个人看得懂?
这一大堆东西几个人看得懂?
追问
公式(1)(2)就是方程啊,我写的那两个就是对应的方程。 倒数第二张图片有实验数据。 还需要什么参数吗?非常抱歉,我学的专业不太扎实,问题可能有点弱智。希望明示。谢谢谢谢
追答
假设初值都是0(不是的话要进行修改),时间为0.5
方程1:
>> f=inline('[(-0.000275/0.000557)*x(1)+0.1324/0.000557*x(2)-0.38/0.00057;(-0.1356/0.0537)*x(1)-2.8/0.0537*x(2)]','t','x');
>> ode45(f,0.5,[0 0])
方程2:
>> f=inline('[(-0.000275/0.000557)*x(1)+0.1324/0.000557*x(2)-0.38/0.00057;(-0.1356/0.0537)*x(1)-2.8/0.0537*x(2)+50/0.0537]','t','x');
>> ode45(f,0.5,[0 0])
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
能不能把问题说清楚点,解myfun1,与myfun2吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询