matlab学习笔记7 插值方法与求解微分方程

插值法

拉格朗日插值

分段插值

由于高次函数往往拟合的情况反而不好,所以用两点之间的直线代替其值进行插值
image
image

三次样条插值

更加光滑,节点处二阶可导

代码汇总

interp1(x0,y0,x,'cubic')%分段三次多项式插值,第三个参数不写则为普通分段插值
interp1(x0,y0,x,'spline')%三次样条插值,子区间使用三次多项式,节点处二阶可导
interp1(x0,y0,x,'nearest')%就近插值,使某点处的值为最近的点的值

示例:

x0=linspace(-5,5,20);
y0=x0.^2.*sin(x0);
x=linspace(-5,5,1000);
y1=interp1(x0,y0,x);
y2=interp1(x0,y0,x,'cubic');
y3=interp1(x0,y0,x,'spline');
plot(x,y1,x,y2,x,y3)
legend("线性插值","分段三次插值","三次样条插值");

二维插值

%二维插值
%method使用方式同一维情况
%整齐
interp2(x0,y0,z0,x,y,'method')
%散乱时
griddata(x0,y0,z0,x,y,'method')
%示例:
x=0:2.5:10;
h=[0:30:60]';
T=[95,14,0,0,0;88,48,32,12,6;67,64,54,48,41];
mesh(x,h,T)%网格图
xi=0:10;
hi=[0:2:50]';
Ti=interp2(x,h,T,xi,hi,'linar');
mesh(xi,hi,Ti)
插值方式 效果 适用情况
分段插值 较平滑 大多数

微分方程

寻找解析解

syms x(t) t;
eq=diff(x,t)==-4*x+sin(2*t);
x(t)=dsolve(eq)

image
添加约束条件
image

寻找数值解

龙格-库塔方法

ode45 //一般用这个
ode23t //万一有刚体性质(步长小才稳定时可以考虑一下两个)
ode15s

image

举个例子,怎么理解下面的方程?fun的返回值是因变量(所求值)对自变量的导数,x是因变量本身,起到一个类似this指针的效果

function d=fun(t,x)
    d=0.05*t


[t1,x1]=ode45('fun',[0,100],1000)
plot(t1,x1)

理解下面的代码:一个自变量t,两个因变量x,y,返回值用一个2*1的数组表示(此处用1 * 2似乎更好,与输入初值格式统一),规定了x和y对t的导数与其他值的关系。初值处用[10,10]给定x0和y0的初值,都是10。其余部分的解释见图即可
image

posted @   wxk123  阅读(288)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示