你的前几个数据的y是相同的,也就是说是它们的数值导数肯定为零。但不意味着这些点都是极值点,这些绝对是你的数据精度的问题。
解析式比数值的优势,我觉得就是“精度”,解析式能求出任何一点的值,而数值只是有限的几个点是己知的,根据这些去猜测(也就是插值)出其它点的值(这些值跟真值应当有一些出入)
data=[
1.04 0
1.12 0
1.2 0
1.28 0
1.36 0
1.44 0
1.52 0
1.6 0
1.68 0
1.76 0
1.84 0
1.92 0
2 5
2.08 69
2.16 408
2.24 1148
2.32 1963
2.4 2074
2.48 1436
2.56 689
2.64 287
2.72 80
2.8 27
2.88 4
2.96 2
3.04 0
3.12 7
3.2 14
3.28 61
3.36 158
3.44 330
3.52 724
3.6 1367
3.68 2332
3.76 3411
3.84 4054
]
x=data(:,1)'
y=data(:,2)'
plot(x,y)
dydx=diff(y)./diff(x)%这个是数值导数
x(find(dydx==0)) %直接数值导数为0的x的值,但是你无法得到中间那个峰的值。
x(dydx(1:end-1).*dydx(2:end)<0) %导数值跨过0的值,这个应当是你想要的
本来不想说的。\x0d\x0a你的前几个数据的y是相同的,也就是说是它们的数值导数肯定为零。但不意味着这些点都是极值点,这些绝对是你的数据精度的问题。\x0d\x0a解析式比数值的优势,我觉得就是“精度”,解析式能求出任何一点的值,而数值只是有限的几个点是己知的,根据这些去猜测(也就是插值)出其它点的值(这些值跟真值应当有一些出入)\x0d\x0a\x0d\x0adata=[\x0d\x0a1.04 0\x0d\x0a1.12 0\x0d\x0a1.2 0\x0d\x0a1.28 0\x0d\x0a1.36 0\x0d\x0a1.44 0\x0d\x0a1.52 0\x0d\x0a1.6 0\x0d\x0a1.68 0\x0d\x0a1.76 0\x0d\x0a1.84 0\x0d\x0a1.92 0\x0d\x0a2 5\x0d\x0a2.08 69\x0d\x0a2.16 408\x0d\x0a2.24 1148\x0d\x0a2.32 1963\x0d\x0a2.4 2074\x0d\x0a2.48 1436\x0d\x0a2.56 689\x0d\x0a2.64 287\x0d\x0a2.72 80\x0d\x0a2.8 27\x0d\x0a2.88 4\x0d\x0a2.96 2\x0d\x0a3.04 0\x0d\x0a3.12 7\x0d\x0a3.2 14\x0d\x0a3.28 61\x0d\x0a3.36 158\x0d\x0a3.44 330\x0d\x0a3.52 724\x0d\x0a3.6 1367\x0d\x0a3.68 2332\x0d\x0a3.76 3411\x0d\x0a3.84 4054\x0d\x0a]\x0d\x0a\x0d\x0ax=data(:,1)'\x0d\x0ay=data(:,2)'\x0d\x0aplot(x,y)\x0d\x0a\x0d\x0adydx=diff(y)./diff(x)%这个是数值导数\x0d\x0a\x0d\x0ax(find(dydx==0)) %直接数值导数为0的x的值,但是你无法得到中间那个峰的值。\x0d\x0a\x0d\x0ax(dydx(1:end-1).*dydx(2:end) 回答于 2022-12-11你看看:syms x1 x2 x3
f = x1^2+x2^2+x3^2
fx1 = diff(f,x1)
fx2 = diff(f,x2)
fx3 = diff(f,x3)
x11 = input('请输入整数x1:')
x22 = input('请输入整数x2:')
x33 = input('请输入整数x3:')
subs(fx1,x1,x11)
subs(fx2,x2,x22)
subs(fx3,x3,x33)
输出的subs就是赋值之后的每一个偏导的结果,你可以试着运行一下。
diff默认对x求导,如果有好几个x,则默认对x1求导,默认求一介导。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)