日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

r语言安装ipsolve_数值分析的R语言实现(插值部分)

發布時間:2024/10/8 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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语言实现(插值部分)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。