- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章R语言编程数学分析重读微积分微分学原理运用由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
比如下面这个随机函数 。
x = seq(0,0.1,0.01)y = runif(11,0,1)plot(x,y)lines(x,y)
x = seq(0,0.01,0.00001)y = runif(1001,0,1)plot(x,y)
无论我们把区间缩小到什么程度,这种乱糟糟的仿佛要铺满整个坐标图的点的样式并不会发生变化.
也就是说, f(x)从左边趋近于0的时候,f(x)在0处是连续的,而在右侧趋近于0的时候,却并不连续。此即左连续和右连续的概念.
。
回到切线的问题,如果曲线 y=f(x)在 x0点并不连续,那么这点显然没有唯一的一条切线.
有的时候,尽管满足了连续性的要求,也不一定存在切线,比如 。
y = O x O 。
x = seq(-10,10)y = abs(x)plot(x,y,type='l')
在 x=0的位置,我们找到的切线要么和左边重合,要么和右边重合,也就是说这个函数在x=0处存在两条切线.
同时也就意味着这一点有两个斜率,两个导数。所以,如果把导数定义为某种映射,则一个点只能映射为一个值,所以只能定义这点的导数不存在.
。
根据导数的定义,当函数的定义域不连续时,其不连续处显然是不存在导数的,但图形可以“欺骗”我们的眼睛.
> x = seq(-1,1,0.1)> y = sin(x)> y1 = cos(x)> xEnd = x+0.1> yEnd = y+y1*0.1> plot(x,y)> for(i in seq_along(x)){+ lines(c(x[i],xEnd[i]),c(y[i],yEnd[i]),col="red")+ }
上图中,圆圈是对y = sinx 进行抽样的结果,可以理解为不连续函数;红线则是在每一个分立的点上,sinx在该点的切线。这两者看上去如此一致,说明连续函数的导数在抽样之后仍然具备一定的数学意义。相应地,不连续的函数,也应该有类似于导数一样的存在,从而与连续函数的导数相对应,此即数值导数。如果回顾导数的定义 。
x = seq(-5,5,0.1)y = cos(x)x1 = seq(-5,5,0.1)end = length(x1)y1 = (sin(x1[2:end])-sin(x1[1:end-1]))/0.1x5 = seq(-5,5,0.5)end = length(x5)y5 = (sin(x5[2:end])-sin(x5[1:end-1]))/0.5x10 = seq(-5,5,1)end = length(x10)y10 = (sin(x10[2:end])-sin(x10[1:end-1]))/0.5plot(x,y,type="l",col="red")lines(x1[2:length(x1)],y1)lines(x5[2:length(x5)],y5)lines(x10[2:length(x10)],y10)
如图所示 。
由于我们采用的是后向差分,所以三组差商的值整体右移。此外,随着 h的增大,其误差也越来越明显.
对一个函数进行反复求导,即可得到高阶导数,可以用数学归纳法的方式记为 。
。
根据这个表达式,可以通过一个简单的递归程序计算数组的差商 。
# 差商算法,x,y为同等长度的数组diffDiv<-function(x,y){ end = length(x) ind = 2:end #索引 return( if(end==1) y[1] else (diffDiv(x[ind],y[ind]) -diffDiv(x[ind-1],y[ind-1]))/(x[end]-x[1]) )}
如果要计算阶数为k的差商,只需重复调用diffDiv, 。
kDiffDiv <- function(x,y,k){ len <- length(x) if(len<k) return(0) d<-rep(0,len-k) for(i in 1:(len-k)) d[i] <- diffDiv(x[i:(i+k)],y[i:(i+k)]) return(d)}
据此,绘制出 y=x^5这个函数的差商, 。
> plot(x,y)> k = 1> lines(x[1:(end-k)],kDiffDiv(x,y,k),col="red")> k = 2> lines(x[1:(end-k)],kDiffDiv(x,y,k),col="green")> k = 3> lines(x[1:(end-k)],kDiffDiv(x,y,k),col="blue")> k = 4> lines(x[1:(end-k)],kDiffDiv(x,y,k),col="purple")> k = 5> lines(x[1:(end-k)],kDiffDiv(x,y,k),col="yellow")> k = 6> lines(x[1:(end-k)],kDiffDiv(x,y,k),col="gray")
如图所示 。
可见差商与微分在阶数上有着一致的趋势。那么,知道了差商之后,可以做点什么呢?
根据差商定义,可得 。
polyMulti<-function(x){ n = length(x) if(n<2) return(c(-x,1)) omega = rep(0,n+1) omega[1] = - x[1] omega[2] = 1 for(i in 2:n){ omega[2:i] = -x[i]*omega[2:i]*+omega[1:(i-1)] omega[1] = -x[i]*omega[1] omega[i+1] = 1 } return(omega)}Newton<-function(x,y){ n = length(x) N = rep(0,n+1) N[1]=y[1] for(i in 1:n){ omega = polyMulti(x[1:i]) d = kDiffDiv(x[1:i],y[1:i],i-1) N[1:i] = N[1:i] + d*omega[1:i] N[i+1] = d*omega[i+1] } return(N)}
验证一下 。
x = sort(rnorm(10))y = x^5+2*x^4N = Newton(x,y)Y = y*0for(i in 1:length(Y)) for(j in 1:length(N)) Y[i] = Y[i]+N[j]*x[i]^(j-1)plot(x,y)lines(x,Y)
可见效果还是不错的.
。
现绘制出100个随机点处x方向的偏导数 。
x = matrix(data=seq(-5,4.95,0.05),nrow=200,ncol=200)y = t(x)z = 1-(x^2+y^2)library(rgl)persp3d(x,y,z,col="red")N = 1000x0 = rnorm(N)y0 = rnorm(N)z0 = 1-(x0^2+y0^2)x1 = x0+3z1 = -2*x0*3+z0for(i in 1:N) lines3d(c(x0[i],x1[i]),c(y0[i],y0[i]),c(z0[i],z1[i]),col="green")
从观感上来看,绿线的确是沿着 x x x方向。但是这个切线显然不是唯一的, y y y轴方向显然存在另一条切线。推而广之,一旦坐标系旋转,那么曲面上任意一点处的 x和 y方向均会发生变化.
那么曲面是否存在一个只和曲面特征有关,而与坐标系无关的参数?
在解决这个问题之前,最好先找到曲面某点沿着任意方向的导数。回顾 x方向偏导数的定义 。
如果导数的方向发生旋转,则可以写为 。
如果写成矢量形式,则定义梯度 。
沿这些点梯度方向做一些直线,看看效果如何 。
x = matrix(data=seq(-5,4.95,0.05),nrow=200,ncol=200)y = t(x)z = -(x^2+y^2)library(rgl)persp3d(x,y,z,col="red")theta = seq(-pi,pi,0.01)x0 = cos(theta)y0 = sin(theta)z0 = 1-(x0^2+y0^2)x1 = x0*0y1 = y0*0z1 = z0+2for(i in 1:N) lines3d(c(x0[i],x1[i]),c(y0[i],y1[i]),c(z0[i],z1[i]),col="green")
如图所示,像一顶漂亮的帽子,在某个投影方向看去,和我们熟知的切线如出一辙.
。
做图如下 。
theta = seq(-pi,pi,0.1)x = cos(theta)y = sin(theta)plot(x,y,type='l',col='red')x1 = x*0y1 = (x1-x)/(-2*x)*(-2*y)+yfor(i in 1:length(theta)) lines(c(x[i],x1[i]),c(y[i],y1[i]),col='green')
可见,梯度方向对应的是图形的法线方向。对于二维平面内的曲线而言,其法线方向与切线方向垂直.
回顾偏导数的定义 。
。
相应地最大方向导数的方向即为梯度的归一化 。
现随机选择一些点,来绘制一下这四个方向的向量 。
library(rgl)N = 1500x<-rnorm(N)y<-rnorm(N)z<-1-x^2-y^2for(i in 1:N){ lines3d(c(x[i],3*x[i]),c(y[i],3*y[i]),c(z[i],z[i]+1),col='red') if(y[i]>0.1) lines3d(c(x[i],x[i]),c(y[i],y[i]-1/y[i]/2),c(z[i],z[i]+1),col='green') if(x[i]>0.1) lines3d(c(x[i],x[i]-1/x[i]/2),c(y[i],y[i]),c(z[i],z[i]+1),col='green') lines3d(c(x[i],x[i]*(1-2*z[i])/(2-2*z[i])),c(y[i],y[i]*(1-2*z[i])/(2-2*z[i])),c(z[i],z[i]+1),col='green')}
可以看到,绿线几乎重新编织了一遍原函数,而红线则刺破了曲面.
。
灰度图像是天然的z=f(x,y)函数,尽管以一种差分化的形式存在。其中x,y分别代表图像坐标系中的坐标 z可以表示灰度图像的灰度值.
那么接下来我们可以观察一下偏导数作用在图像上是一个什么效果。图片当然是最经典的lena 。
library(imager)img = load.image("lena.jpg")dim(img)[1] 512 512 1 3gray = grayscale(img)par(mfrow=c(1,2))plot(img)plot(gray)
可见gray显然为灰度图像,从其维度就能看得出来,然后将其变为二维的数组,接下来就可以进行求导操作了.
dim(gray)[1] 512 512 1 1mat = array(gray,dim=c(512,512))mat_x = diff(mat,1)mat_y = t(diff(t(mat),1))par(mfrow=c(1,2))image(mat_x)image(mat_y)
由于图像坐标系默认是从上向下为 y y y轴,从左向右为 x x x轴,所以在我们熟知的坐标系中,图像是上下颠倒的。而且R语言还非常智能(障)地添加了一层伪彩色,这让我们更加清晰地看出,对图像进行差分操作,提取出了边缘信息.
这很容易理解,所谓“边缘”,往往意味着变化较大的点,如果我们抽取lena图的任意一行, 。
a=mat[256,]par(mfrow=c(1,2))plot(a,type='l')plot(diff(a,1),type='l')
在变化剧烈处,相应地导数较大.
若将偏导数在图像空间中展开,由于任意两个像素点之间的差恒为1,则可得到其差分形式 。
求导是对整个函数的定义域展开的一次性操作,但在考察其差分形式之后却发现,数值偏导数可以写成一种对局部区域的反复操作.
例如,就前向差分而言,可以对图像的任意一个子矩阵 。
theta = c(pi/3,pi/4,pi/5,pi/6)par(mfrow=c(2,2))for(i in 1:4)image(mat_x[,1:511]*cos(theta[i])+mat_y[1:511,]*sin(theta[i]))
可以看到,最后一张图片的法向角度为 30° ,而其右下角正好有一个 30°附近的清晰的边缘.
如果通过中心差分来定义算子,则统一维度后,其x和 y向的梯度算子分别写为 。
以上就是R语言编程数学分析重读微积分微分学原理运用的详细内容,更多关于R语言数学分析微分学原理的资料请关注我其它相关文章! 。
原文链接:https://blog.csdn.net/m0_37816922/article/details/120552119 。
最后此篇关于R语言编程数学分析重读微积分微分学原理运用的文章就讲到这里了,如果你想了解更多关于R语言编程数学分析重读微积分微分学原理运用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
Based on Deep Learning (2017, MIT) book. 本文基于Deep Learning (2017, MIT),推导过程补全了所涉及的知识及书中推导过程中跳跃和省
因此,我需要一种方法来弄清楚如何获得5个数字,并且当您将它们中的任意两个相加时,将得出一个总和,您只能通过将这两个特定的数字相加而得到。 这是我正在谈论的示例,但有3个数字: 1个 3 5 1 + 3
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
如何将 a 和 b 之间的数字线性映射到 c 和 d 之间。 也就是说,我希望 2 到 6 之间的数字映射到 10 到 20 之间的数字...但我需要广义的情况。 我的脑子快炸了。 最佳答案 如果您的
嘿,我有一个方程式,我需要弄清楚它是基于图表的数学,其中图表上有两个点,需要获取其余值: 我正在构建一个 javascript 页面,它获取图表上的两个点,但需要吐出图表上的任何位置。 它用于根据了解
有谁知道如何用 Doxygen 得到实复场或射影平面的符号,i.o.w 符号,如 IR、IC、IP 等? 例如,我尝试了\f$\field{R}\f$,但无法识别。 非常感谢您的帮助,G. 最佳答案
我正在使用 Segment to Segment 最接近方法,该方法将输出两个长度段之间的最近距离。每个段对应一个球体对象的起点和终点。速度只是从一个点到另一个点。 即使没有真正的碰撞,最近的方法也可
我有一个 arduino 连接到 Stradella 系统钢琴 Accordion 。我在左手和弦的 12 个音符中的每一个上都有光学传感器。当我弹奏和弦时,它会触发三个传感器。如果我想让合成器演奏和
我正在开发一个具有一些简单功能的新包。现在我可以使用已经存在的“math-vectors”库中的函数;特别是“插值”和“反转”。如何在我的新包中使用这些?编写 y:=reverse(...) 显然是不
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Integer division in JavaScript 希望这是一个简单的问题,基本上我需要这样做: 分隔线
我有一张表格,上面有学校类(class)。此表单上可以有任意数量的类,每个类有 2 个字段。书本费和学费。 我有一个名为总计的第三个字段,当他们在其他字段中输入成本时,我想更新该字段。 这就是我的设置
今天早些时候我问了一个类似的问题,结果发现我只是数学很烂,因为我也无法解决这个问题。 我通过宽度/高度计算屏幕比例。我需要一个函数来将结果数字转换为新的比例。 例如 function convertN
我有一个起始数字,因此必须仅在开始循环时将该数字乘以一个因子,然后将结果乘以另一个因子的 X 倍,然后必须将循环乘以 Y 次,最后我需要总金额...我认为最好查看数字来了解我需要什么 例如,如果我从数
现在我用 JAVA 遇到了一些问题,但不记得如何获取坐标系之间的长度。 例如。A 点 (3,7)B点(7,59) 我想知道如何计算a点和b点之间的距离。非常感谢您的回答。 :-) 最佳答案 A = (
我有两种类型的文本输入,积极的和可疑的。在将输入到这两种类型的输入中的所有数字相加后,我需要显示多组这些输入的总数。例如:2 个阳性 + 2 个可疑 = 总计:4 然后,我需要从总数中找出积极与可疑的
我正在尝试将输入金额乘以 3.5%,任何人都可以给我任何想法如何做到这一点吗? $("#invest_amount").keyup(function() { $('#fee').va
有谁知道返回a的最大数的Math方法 给定的位数。 例如,使用1位数字的最大数字是9,2是99,3是999,4是9999......等等。 使用字符串很容易实现,但这并不完全 我在找什么。 pri
我是 Knockout 的新手,但仍对它一头雾水,我想知道如何使用两个 KO 变量进行简单的数学运算(加法和乘法)。 此刻我有: self.popInc1 = ko.observable('0.3')
我在谷歌地图应用程序中有以下内容,并希望显示转换为英尺的海拔高度,但如何向上/向下舍入到最接近的数字? (消除小数点后的数字)我尝试了 number.toFixed(x) 方法,但似乎什么也没做。 f
我最近开始使用 JavaScript 编写小型 Canvas 游戏,并试图全神贯注于 Vector 2d 数学。我了解 Vectors 的基础知识(比如它们代表 2d 空间中具有方向的点,您可以对它们
我是一名优秀的程序员,十分优秀!