科研日常小節(jié) 6.15
matlab求解一階和二階導(dǎo):
(1)數(shù)值方法
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)多項(xiàng)式
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); %求一階導(dǎo)
pp2 = fnval(fnder(pp, 2), x); %求二階導(dǎo)
建議使用spline函數(shù)做插值,結(jié)合diff函數(shù)做高階導(dǎo)求解,當(dāng)點(diǎn)數(shù)較少時(shí),不建議使用數(shù)值解法


matlab讀取字母、數(shù)字、標(biāo)點(diǎn)符號(hào)混合數(shù)據(jù)中的數(shù)字,使用正則表達(dá)式比較簡(jiǎn)單:
s=regexp(str,'\-?\d*\.?\d*','match');??