matlab如何 对数组求导?

比如一个数组,如何通过用y对x求导的方法求出x在什么时候Y有极值?1.0401.1201.201.2801.3601.4401.5201.601.6801.7601.84... 比如一个数组,如何通过用y对x求导的方法求出x在什么时候 Y有极值?

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
感谢回答者。
特别是 ruifengcao 。
您的建议是正确的。但是,实际上整个数据是连续的,但只是提取出了一些点而已,所以,当y'=0时,所求出的x值是有效的。如果是这样的话,如何来处理?
展开
 我来答
wacs5
推荐于2018-07-22 · TA获得超过1.6万个赞
知道大有可为答主
回答量:3724
采纳率:82%
帮助的人:3175万
展开全部
本来不想说的。
你的前几个数据的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的值,这个应当是你想要的
趣事情
推荐于2017-10-01 · 知道合伙人互联网行家
趣事情
知道合伙人互联网行家
采纳数:517 获赞数:5452
电脑技术,软件开发。移动开发。网站建设相关专业知识。都可以提供解答和相关技术指导。

向TA提问 私信TA
展开全部
方法:
1. 矩阵Y对标量x求导:
Y = [y(ij)]d Y/dx = [dy(ji)/dx]
2. 标量y对列向量X求导:
y = f(x1,x2,..,xn) dy/dX= (Dy/Dx1,Dy/Dx2,..,Dy/Dxn)'
3. 行向量Y'对列向量X求导:
Y的每一列对X求偏导,各列构成一个矩阵。
4. 列向量Y对行向量X’求导:
转化为行向量Y’列向量X的导数转置。
5. 向量积对列向量X求导运算法则:
d(UV')/dX =(dU/dX)V' + U(dV'/dX)
d(U'V)/dX =(dU'/dX)V + (dV'/dX)U'
6. 矩阵Y对列向量X求导:
Y对X的分量求偏导,构成超向量。
7. 矩阵积对列向量求导法则:
d(uV)/dX =(du/dX)V + u(dV/dX)
d(UV)/dX =(dU/dX)V + U(dV/dX)
8. 标量y对矩阵X的导数:
把y对每个X的元素求偏导,不用转置。
dy/dX = [Dy/Dx(ij) ]

9. 矩阵Y对矩阵X的导数:
将Y的每个元素对X求导,然后排在一起形成超级矩阵。
10.乘积的导数
d(f*g)/dx=(df'/dx)g+(dg/dx)f'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ruifengcao
2011-01-03 · TA获得超过9496个赞
知道大有可为答主
回答量:3579
采纳率:33%
帮助的人:2360万
展开全部
这个问题我给你分析一下,首先你的想法看起来是对的,但其实不是很正确。
对于离散的数据点,使用求导的方法寻找极值,你会发现找不到导数为零的地方的。原因是离散点求导就是做差分。
寻找极值的方法应该是:一维搜索的方法
就是一个一个的查询数组,看在哪个点处的数比它前后的数都大。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
安定还豪放灬海鸥Q
2017-09-01 · TA获得超过3619个赞
知道大有可为答主
回答量:2500
采纳率:0%
帮助的人:962万
展开全部
你看看:
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求导,默认求一介导。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
华哥vi9ts
2011-01-03 · TA获得超过834个赞
知道小有建树答主
回答量:416
采纳率:0%
帮助的人:331万
展开全部
求导 函数为 diff()

>> syms x;
>> y=x^2+x

y =

x^2 + x

>> s=diff(y)

s =

2*x + 1
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式