马丫丫T 2020-08-29 18:04 采纳率: 0%
浏览 246

ode45解二阶微分方程,遇到sym无法转double的问题,跪求大佬看看,怎么解?

1.在使用ode45的时候,方程式fun是通过一系列运算得到的,fun用变量字母代入后,没法把初始值带入其中
2,代码如下

```clear all
clc
syms t u(t) x(t) a b
%Af1=basicF3(1,10,u); %Af1为状态函数1的基函数
Af1=basicF3(x(1),x(2),u); %Af1为状态函数1的基函数
n1=size(Af1,2); %n1为基函数的维度:列数
A1=rand(n1,1); %随机生成A1
Af2=Af1; %Af2为状态函数1的基函数
A2=rand(n1,1); %随机生成A2
A=[A1', A2']'; %A:状态方程的系数矩阵
Af=[Af1,Af2]; %Af:多项式基函数
AF=[Af1 zeros(1,size(Af2,2));zeros(1,size(Af1,2)) Af2]; %f:状态方程的多项式基函数

%Bf=basicF2(1,10); %Bf为控制函数的基函数
Bf=basicF2(x(1),x(2)); %Bf为控制函数的基函数
n2=size(Bf,2); %n2为基函数的维度:列数
B=rand(n2,1); %B为控制函数u的系数矩阵
%BF=diag(Bf) %f:状态方程的多项式基函数
BF=Bf; %参考AF
U=sum(BF*B); %控制策略方程

%Afu1=basicF3(1,10,U) ;
Afu1=basicF3(x(1),x(2),U) ; %Af1为状态函数的基函数(代入u)
Afu2=Afu1;
AFU=[Afu1 zeros(1,size(Afu2,2));zeros(1,size(Afu1,2)) Afu2] ;
y=AFU*A;
dx=zeros(2,1)
dx(1)=sum(y.*[1;0])
dx(2)=sum(y.*[0;1])
tspan = [0,15];
x0 = [0;1];
[t, x] = ode45(@dx, tspan, x0);




3
![图片说明](https://img-ask.csdn.net/upload/202008/29/1598694949_542278.png)
![图片说明](https://img-ask.csdn.net/upload/202008/29/1598694989_57869.png)

4.自己检测后发现
Y没法根据x(1)  x(2)改变而改变    就是x(1)  x(2)赋值之后没变法代入到Y里面    所以ode45里面就没把初始值带进去  出现了类型问题  dx带不进去数
  有大佬遇到过这种问题吗,跪求看看
  • 写回答

1条回答 默认 最新

  • threenewbee 2020-08-29 21:04
    关注

    sym是符号运算,要用dsolve求数值解

    评论

报告相同问题?

悬赏问题

  • ¥15 数学的三元一次方程求解
  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题