1.15 学习matlab里面自己编写函数以及使用ode函数

matlab写函数

子函数(.m)文件的格式

function [outarg1,outare2,...]=fname(inarg1,inarg2,...)
%function [输出量1,输出量2,...]=函数名(输入量1,输入量2,...)


[coding]



end

主函数调用的格式

[a,b,...]=fname(c,d,...);
%c,d,...是在主程序里面已经确定好的(也可以递归)输入的量
%然后把叫fname的函数看成一个黑箱子,向其中输入值后它会输出值,把输出值赋给a,b,...

一个简单的示例

使用ode

把n阶方程对应化成n元一阶方程组

以二阶方程为例:

 ode的代码格式

       %写表达那个一阶微分方程组的函数

function dy=FirstOrderODE(x,y)

       %dy此时是一个列向量,dy的第一行是对应的y1',第二行是y2',...
       %务必注意下面函数里面dy的表达!务必注意下面函数里面dy的表达!务必注意下面函数里面dy的表达!
       %x就是你理解的那个x,y不用纠结,用y(1),y(2),...来表达y1,y2,...即可,用ode解,并不会要你去
       写出y(1),y(2),...是啥,它就是解这个的[笑哭]


dy=[p(x,y(1),y(2),...);q(x,y(1),y(2),...);...];


       %p(x,y(1),y(2),...)是指一个关于x,y(1),y(2),...的一个表达式,也就是代数方程组里面化出来的
       y1'=p(x,y1,y2,...)的那个表达式
       %注意有的运算加不加点点!!!(所谓元素群运算!!!)  .*  .^   
       %注意有的运算加括号确保运算顺序!!!


end
        %主程序里调用ode
[x,y]=ode45('FirstOrderODE',[m,n],[y(m);y'(m);y''(m);...]);

        %此处ode输出的x就是你编写函数时想要表达的那个x(其实也就是这里输的[0,20]的初值)
        %此处ode输出的y就是你编写函数时想要表达的那个y,并且y(1)就是y1的一系列数值解,y(2)就是y2的
        一系列数值解...
        %[m,n]是人为输入的自变量的范围
        %[y(m);y'(m);y''(m);...]是初值

一个小例题

俺去翻了一波高数PPT,找到了一个老师解出了解析解的二阶微分方程 (擅自转载一波,特此鸣谢高数老师和他的PPT  [doge])

题目是这样的:

 解析解是这样的:

 下面,试试用ode解数值解!

先分析降次化简:

  再编写函数

function dy = tryode(x,y)
dy=[y(2);((2.*x)./(1.+x.^2)).*y(2)];

主函数调用

[x,f]=ode45('tryode',[0,20],[1;3]);
plot(x,f(:,1))  %绘出y=f(x)的图像

图长这样:

 和解析解对比验证一下叭!(上:数值解,下:解析解)

 还可!

Emmmm,那今天就这样

2022.1.15

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值