r语言安装ipsolve_数值分析的R语言实现(插值部分)
基于李庆扬所著《数值分析》。ps由于比较忙,只是编写出来,没有时间找bug和优化。
一、拉格朗日插值
lagrange
#依次为观测值的横坐标,纵坐标,自变量(n2维)取值
n1
result
for(i in 1:n2){
constant1[i]
for(j in
1:n1){
constant2[j]
temp
temp
result[i]
}
result[i]
}
return(result)
}
x
y
inv
lagrange(x,y,inv)
二、牛顿均差插值
niux
#定义函数
k
#定义循环次数为k
A
#定义均差表A
s
#定义最终结果为s
r
#式子中一个因子r
w
#式子中一个因子w
for(j in 1:k+1){
#均差表一共有k+1列
for(i in 1:k){
#均差表一共有k行
A[i,1]
#均差表第一列,第二列分别为x和f(x)
if(j<=2|j>=i+2){A[i,j]
#均差表左上角部分
else
{A[i,j]
#均差表内元素
}
}
for(i in 2:k) {w[i]
#牛顿插值公式的一个因子w
for(i in 1:k) {r[i]
#牛顿插值公式另一个因子r
s
#最终结果s
list(均差表=A,结果=s)
#输出均差表,结果
}
f
#函数值f
x
b
niux(x,f,b)
三、牛顿差分插值
#牛顿差分形式的插值
NewtonDiff
n1
result
for (i in 1:n2){
if (direct==1){
#向前差分
t
difftable
difftable[,1]
for(col in 2:n1){
for(row in
1:n1){
if
(row+col>(n1+1)) break
difftable[row,col]
}
}
ditui
for(j in 2:n1){
ditui[j]
}
result[i]
}
else
{t
difftable
difftable[,1]
for(col in 2:n1){
for(row in
1:n1){
if (row
difftable[row,col]
}
}
ditui
for(j in 2:n1){
ditui[j]
}
result[i]
}
}
return(result)
}
x
y
inv
direct
NewtonDiff(x,y,inv,direct)
四、分段线性插值
pw_li
ld1
result
juzhen
x
for(i in 1:ld2){
if
(inv[i]>x[ld1-1]){
result[i]
}
else if (inv[i]
result[i]
}
else {
for(j in
2:(ld1-2)){
if
(inv[i]
result[i]
}
}
}
}
return(result)
}
x
y
inv
pw_li(x,y,inv)
五、分段埃尔米特插值
#分段三次埃尔米特插值
hermite
#依次为自变量(增序),因变量,插值点导数,待计算自变量
ld1
result
for(i in 1:ld2){
if
(inv[i]>x[ld1-1]){
result[i]
((inv[i]-x[ld1-1])/(x[ld1]-x[ld1-1]))^2*y[ld1]*(1+2*(inv[i]-x[ld1])/(x[ld1-1]-x[ld1]))+
((inv[i]-x[ld1])/(x[ld1-1]-x[ld1]))^2*(inv[i]-x[ld1-1])*derv[ld1-1]+
((inv[i]-x[ld1-1])/(x[ld1]-x[ld1-1]))^2*(inv[i]-x[ld1])*derv[ld1]
}
else if (inv[i]
result[i]
((inv[i]-x[1])/(x[2]-x[1]))^2*y[2]*(1+2*(inv[i]-x[2])/(x[1]-x[2]))+
((inv[i]-x[2])/(x[1]-x[2]))^2*(inv[i]-x[1])*derv[1]+
((inv[i]-x[1])/(x[2]-x[1]))^2*(inv[i]-x[2])*derv[2]
}
else {
for(j in
2:(ld1-2)){
if
(inv[i]
result[i]
((inv[i]-x[j])/(x[j+1]-x[j]))^2*y[j+1]*(1+2*(inv[i]-x[j+1])/(x[j]-x[j+1]))+
((inv[i]-x[j+1])/(x[j]-x[j+1]))^2*(inv[i]-x[j])*derv[j]+
((inv[i]-x[j])/(x[j+1]-x[j]))^2*(inv[i]-x[j+1])*derv[j+1]
break
}
}
}
}
return(result)
}
x
y
derv
inv
hermite(x,y,derv,inv)
六、三次样条插值
#三次样条插值
cubicspline
#依次为自变量(增序),因变量,边界条件(1,2,3),边界取值(二行三列矩阵)和研究自变量
#关于边界条件,2行从上往下为首末端点,三列从左至右为函数值,一阶导数值,二阶导数值
n1
if (cond==1){
d
d[1]
d[n1]
for (i in 2:(n1-1)){
d[i]
((y[i+1]-y[i])/(x[i+1]-x[i])-(y[i]-y[i-1])/(x[i]-x[i-1]))/(x[i+1]-x[i-1])
)
}
#d-vector is finished
juzhen1=juzhen2=juzhen3
for(i in 1:(n1-2)){
juzhen1[i,i]
juzhen2[i,i+1]
juzhen3[i,i+2]
}
juzhen
juzhen
m
list(m=m)
}
if (cond==2){
d
d[1]
d[n1]
for (i in 2:(n1-1)){
d[i]
((y[i+1]-y[i])/(x[i+1]-x[i])-(y[i]-y[i-1])/(x[i]-x[i-1]))/(x[i+1]-x[i-1])
)
}
#d-vector is finished
juzhen1=juzhen2=juzhen3
for(i in 1:(n1-2)){
juzhen1[i,i]
juzhen2[i,i+1]
juzhen3[i,i+2]
}
juzhen
juzhen
m
list(m=m)
}
if (cond==3){
d
for(i in 1:(n1-1)){
d[i]
(y[2]-y[1])/(x[2]-x[1])-(y[i+1]-y[i])/(x[i+1]-x[i])
)/(x[2]-x[1]+x[i+1]-x[i])
}
#d-vector is finished
juzhen1=juzhen2=juzhen3
for (i in 1:(n1-3)){
juzhen1[i,i]
juzhen2[i,i+1]
juzhen3[i,i+2]
}
juzhen
juzhen
c(2,0.5,rep(0,n1-4),0.5),juzhen,c((x[2]-x[1])/(x[n1]-x[n1-1]+x[2]-x[1]),rep(0,n1-4),1-(x[2]-x[1])/(x[n1]-x[n1-1]+x[2]-x[1]),2)
)
m
list(m=m)
}
result
for(i in 1:n2){
if (inv[i]
result[i]
m[2]*(inv[i]-x[1])^3/(6*(x[2]-x[1]))+
(y[1]-m[1]*(x[2]-x[1])^2/6)*(x[2]-inv[i])/(x[2]-x[1])+
(y[2]-m[2]*(x[2]-x[1])^2/6)*(inv[i]-x[1])/(x[2]-x[1])
}
else if
(inv[i]>x[n1-1]){
result[i]
m[n1]*(inv[i]-x[n1-1])^3/(6*(x[n1]-x[n1-1]))+
(y[n1-1]-m[n1-1]*(x[n1]-x[n1-1])^2/6)*(x[n1]-inv[i])/(x[n1]-x[n1-1])+
(y[n1]-m[n1]*(x[n1]-x[n1-1])^2/6)*(inv[i]-x[n1-1])/(x[n1]-x[n1-1])
}
else {
for(j in
3:(n1-2)){
if
(inv[i]
result[i]
m[j]*(inv[i]-x[j-1])^3/(6*(x[j]-x[j-1]))+
(y[j-1]-m[j-1]*(x[j]-x[j-1])^2/6)*(x[j]-inv[i])/(x[j]-x[j-1])+
(y[j]-m[j]*(x[j]-x[j-1])^2/6)*(inv[i]-x[j-1])/(x[j]-x[j-1])
}
}
}
}
return(result)
}
x
y
cond
condv
inv
cubicspline(x,y,cond,condv,inv)
如若有兴趣或者提建议,欢迎关注微信公众号:R语言的那些事
r语言安装ipsolve_数值分析的R语言实现(插值部分)相关推荐
- linux系统下载r软件安装,在Linux系统安装R
一.系统要求 最小1G RAM 具有sudo权限的非root用户. 如果满足这些条件的话我们就开始了. 二.安装R R更新速度较快,最新的稳定版本并不总是在Ubuntu的软件库,所以我们将开始通过添加 ...
- linux r服务安装失败,linux下R安装RMySQL不成功 configuration failed for package ‘RMySQL’...
linux下R安装RMySQL不成功 configuration failed for package 'RMySQL'#install.packages('RMySQL') 报错: 将程序包安装入' ...
- R语言安装.tar.gz包
R语言安装.tar.gz包 # 以ElemStatLearn包的安装为例 # "package 'ElemStatLearn' is not available for this versi ...
- Mac版R语言入门(一)R语言入门操作
文章更新于2023年1月29日: 视频教程--微信公众号:R语言数据分析与实践 bilibili: R语言数据分析与实践 CSDN:ZhenniLi 第一集: ...
- R数据分析——安装,数据类型转换,向量
R数据分析 R中安装与使用包 卸载与移除包 基本数据类型(六种) 数据类型转换 运算符 R中的数据结构 向量 R中安装与使用包 R中的包存储在计算机上名为library的目录下 ✓ 使用函数libPa ...
- R语言-安装使用指南
R语言 概述 R语言是用于统计分析,图形表示和报告的编程语言和软件环境. R语言由Ross Ihaka和Robert Gentleman在新西兰奥克兰大学创建,目前由R语言开发核心团队开发. R语言的 ...
- R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型、分类预测器(分类变量)被自动替换为一组虚拟编码变量、summary函数查看检查模型、使用table函数计算混淆矩阵评估分类模型性能
R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型(Logistic regression).分类预测器(分类变量)被自动替换为一组虚拟编码变量.summary函数查看检查模型.使用t ...
- centos7 r语言安装_R 和 RStudio 的安装及 R Profile 的配置 amp; 初识 R 语言数据爬取...
❝ 本文更新至 R version 4.0.0 (2020-04-24) ❞ R 和 RStudio 的安装是非常简单的,这里提供一些安装 Tips.在文章的最后我还通过一个案例带大家走进奇幻的 R ...
- r语言查找是否存在空值_关于R包安装你知道多少?
在R语言的学习过程中离不了各种R包的安装与使用,要使用某个R包首先得学会如何安装该R包.对于R包的安装你知道的有多少?你知道如何指定安装路径吗?为何你每次重新打开R绘画都需要重新安装R包?今天小编带你 ...
最新文章
- C错误异常处理,异常处理
- mongodb入门的几篇文章
- StringUtils之equals
- 根据姓名得到名字首字母
- how is odata metadata request served 故意把configuration file里的GM6改成GM61之后
- python爬虫-异常处理
- dataframe 排序_疯狂Spark之DataFrame创建方式详解一(九)
- 输入网址后到网页显示出来会发生什么?
- AngularJS之中级Route【二】(七)
- PyQt5学习笔记2-GUI编程基础-2
- python之数据运算、字典、列表
- 一劳永逸地激活NOD32,从此不需要NOD32激活码
- 基于文件夹目录生成CHM电子书
- android联动动画,Android双向列表左右联动效果
- matlab 读取ENVI中*.img格式图片代码
- Mybatis一对多和多对一联系处理
- 2022年ccpc威海站
- 【数据分析】搜索和非结构化数据分析值得关注的5大趋势
- VMware ESXi 8.0集成网卡驱动
- GET和POST请求的区别