一个函数
function dx=f(t,x)
global c
dx=zeros(2,1);
dx(1)=x(2);
dx(2)=-20*c*x(2)-199*x(1);
然后是另外一个函数
clear all;
global c
c=0.1;
x0=[1,0]; %初值
[t1,x2]=ode23(@f,[0,4],x0);
第一个函数就是建立一个方程给ode23用
问题:dx为什么要再赋值呢,并且x(1),x(2)是什么意思
function [输出变量] = 函数名称(输入变量) dx(标号),括号内不属于赋值吧。x(1)应该是书写错误吧?
dx是函数f(t,x)的运算结果,x是一行两列的矩阵,所以dx也是一行两列的矩阵。x(1)表示x第一行第一列的元素,x(2)表示x的第一行第二列的元素。
MATLAB求解微分方程时是这么书写的,第一个函数存为f.m,是微分方程的函数文件;第二个函数是一段脚本,可以存为.m文件,也可以在命令行直接执行。
第一个函数里面,dx为输出,必须是一个列向量,dx(1)表示x的一阶导,dx(2)表示二阶导,等号右边的代码中,x(1)代表x本身,x(2)代表x的一阶导,微分方程为x'' = -20*c*x' - 199*x
第二个函数,[t1,x2]=ode23(@f,[0,4],x0);其中[0,4]表示t1的数值计算范围,也可以是一些固定点,x0是初始值,[1,0]里面的1指x在t=0时,值为1;x的一阶导在t=0时,值为0
最后可以用plot(t1,x2(:,1))显示数值计算结果