欢迎光临散文网 会员登陆 & 注册

科研日常小节 6.15

2023-06-15 22:01 作者:书院慢慢  | 我要投稿

matlab求解一阶和二阶导

(1)数值方法

for i = 1 

    d2ydx2(i) = (y(i+2)+y(i)-2*y(i+1))/power((x(i+2)-x(i))/2,2);

end

for i = 2:n-1

    d2ydx2(i) = 2/(x(i+1)-x(i-1))*((y(i+1)-y(i))/(x(i+1)-x(i))-(y(i)-y(i-1))/(x(i)-x(i-1)));

end

for i = n

    d2ydx2(i) = (y(i)-2*y(i-1)+y(i-2))/power((x(i)-x(i-2))/2,2);

end

(2)多项式

y1 = polyfit(x,y,3);

x_ = linspace(0,1);

y_ = polyval(y1,x_);

x1 = x;

syms x1 f(x)

f(x1) = poly2sym(y1,x1);

f2(x1) = diff(f(x1), x1, 2); 

(3)三次样条

pp = csape(x, y);

pp1 = fnval(fnder(pp, 1), x); %求一阶导

pp2 = fnval(fnder(pp, 2), x); %求二阶导

建议使用spline函数做插值,结合diff函数做高阶导求解,当点数较少时,不建议使用数值解法

前三种方法
spline+diff


matlab读取字母、数字、标点符号混合数据中的数字,使用正则表达式比较简单:

s=regexp(str,'\-?\d*\.?\d*','match');  

科研日常小节 6.15的评论 (共 条)

分享到微博请遵守国家法律