一次插值代码(插值处理实现)
admin 发布:2022-12-19 19:08 202
今天给各位分享一次插值代码的知识,其中也会对插值处理实现进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、100分求高手帮我写下牛顿插值和样条插值的VB代码,急用啊!!!
- 2、拉格朗日插值的matlab代码
- 3、如何用matlab实现插值算法
- 4、牛顿插值法,用VB写代码?
- 5、c++,求插值。。高分求。。。答好再加!!
- 6、谁有拉格朗日插值法的python代码啊!急用啊!谢谢啦!
100分求高手帮我写下牛顿插值和样条插值的VB代码,急用啊!!!
自编的,都弄上来了,缺样条插值。这里仅是函数,什么控件的编程你自己弄,那实在太简单了。
Dim aa As Double, bb As Double '分别接收findway有根区间两端值的变量
Dim x(1) As Double '分别接收ercigenway的根
'1.0 ercigenway 求二次方程实根 -已测试
Private Sub ercigenway(a As Single, b As Single, c As Single) 'a、b、c对应为二次方程的系数
Dim d As Double
d = b ^ 2 - 4 * a * c
If d 0 Then
MsgBox "Δ小于0,没有实根", , "消息"
x(0) = 0: x(1) = 0
ElseIf d = 0 Then
x(0) = -b / (2 * a): x(1) = x(0)
Else
x(0) = (-b - Sgn(b) * Sqr(d)) / (2 * a): x(1) = c / (a * x(0))
End If
End Sub
'2.1 findway 等步长扫描有根区间 -已测试
Private Sub findway(ByVal a As Single, ByVal b As Single, h As Double) 'a、b分别为待扫描区间端点,h为步长
Dim a1 As Double
a1 = a
Do
If f(a1) * f(a1 + h) = 0 Then
aa = a1: bb = a1 + h
Exit Sub
End If
a1 = a1 + h
Loop While a1 b
If a1 b Then
MsgBox "没有找到有根区间,请换更小的步长试一下"
Exit Sub
End If
End Sub
'2.2 erfenfun 二分法求根 -已测试
Private Function erfenfun(ByVal a As Single, ByVal b As Single, eps As Double) 'a、b为有根区间端点,eps为误差
Dim x0 As Double, x1 As Double, x2 As Double, f0 As Double, f1 As Double, f2 As Double
x1 = a: x2 = b
Do
x0 = (x1 + x2) / 2
f0 = f(x0)
If f0 = 0 Then
Exit Do
Else
f1 = f(x1): f2 = f(x2)
If f0 * f1 0 Then
x2 = x0
Else
x1 = x0
End If
End If
Loop While Abs(x1 - x2) eps
x0 = (x1 + x2) / 2
erfenfun = x0
End Function
'2.4 newtonfxfun Newton切线法 -已测试
Private Function newtonfxfun(ByVal x0 As Double, eps As Double) As Double 'x0为附近根,eps为误差
Dim x1 As Double, f0 As Double, f1 As Double
x1 = x0
Do
x0 = x1
f0 = f(x0): f1 = fd(x0) 'fd表示f的导函数
If Abs(f1) eps Then
x1 = x0: Exit Do
End If
x1 = x0 - f0 / f1
Loop Until Abs(x1 - x0) eps
newtonfxfun = x1
End Function
'2.3 stediedaifun Seffensen加速迭代法 (方程形式为x-f(x)=0) -已测试
Private Function stediedaifun(ByVal x0 As Double, eps1 As Double, eps2 As Double) As Double 'x0为解析解附近的根,eps1为输出结果误差,eps2为迭代能否继续判断标准
Dim y As Double, z As Double, x1 As Double
x1 = x0
Do
x0 = x1
y = f(x0): z = f(y)
If Abs(z - 2 * y + x0) eps2 Then
MsgBox "为满足eps2条件,不能继续迭代"
Exit Function
End If
x1 = x0 - (y - x0) ^ 2 / (z - 2 * y + x0)
Loop Until Abs(x1 - x0) eps1
stediedaifun = x1
End Function
'2.5 newtonfxnfun n次代数方程Newton切线法 -已测试
Private Function newtonfxnfun(a() As Single, eps As Double, x0 As Double) As Double 'a()分别存储按降幂排列的方程的n个系数,eps为误差,x0为附近根
Dim k As Integer, n As Integer, f0 As Double, f1 As Double, x1 As Double
n = UBound(a)
x1 = x0
Do
x0 = x1
f0 = a(0): f1 = f0
For k = 1 To n - 1
f0 = a(k) + f0 * x0
f1 = f0 + f1 * x0
Next k
f0 = a(n) + f0 * x0
x1 = x0 - f0 / f1
Loop Until Abs(x1 - x0) eps
newtonfxnfun = x1
End Function
'2.6 linecutfun 弦截法 -已测试
Private Function linecutfun(ByVal x0 As Double, ByVal x1 As Double, eps As Double, n As Long) As Double 'n为迭代次数限制,x0、x1为有根区间端点,eps为误差
Dim f0 As Double, f1 As Double, f2 As Double
Dim x2 As Double, i As Long
f0 = f(x0): f1 = f(x1)
For i = 1 To n
x2 = x1 - (x1 - x0) * f1 / (f1 - f0)
f2 = f(x2)
If Abs(f2) eps Then
Exit For
End If
x0 = x1: x1 = x2: f0 = f1: f1 = f2
Next i
If i = n + 1 Then
MsgBox "要求的计算次数太低,没有达到精度要求"
End If
linecutfun = x2
End Function
'4.1 lagrangeczfun 拉格朗日插值法 -已测试
Private Function lagrangeczfun(a() As Double, ByVal u As Double) As Double 'a(1,n)存储n+1个节点,u为插值点
Dim i As Integer, j As Integer, n As Integer
Dim l As Double, v As Double
v = 0
n = UBound(a, 2)
For j = 0 To n
l = 1#
For i = 0 To n
If i = j Then GoTo hulue
l = l * (u - a(0, i)) / (a(0, j) - a(0, i))
hulue:
Next i
v = v + l * a(1, j)
Next j
lagrangeczfun = v
End Function
'4.2 newtonczfun newton插值法 -已测试
Private Function newtonczfun(a() As Double, u As Double) As Double 'a(1,n)存储n+1个节点,u为插值点
Dim n As Integer, i As Integer, j As Integer, k As Integer
Dim z() As Double, f() As Double, v As Double
n = UBound(a, 2)
ReDim z(n), f(n)
For i = 0 To n
z(i) = a(1, i)
Next i
For i = 1 To n
k = k + 1
For j = i To n
f(j) = (z(j) - z(j - 1)) / (a(0, j) - a(0, j - k))
Next j
For j = i To n
z(j) = f(j)
Next j
Next i
f(0) = a(1, 0)
v = 0
For i = n To 0 Step -1
v = v * (u - a(0, i)) + f(i)
Next i
newtonczfun = v
End Function
'4.3 hermiteczfun Hermite插值法 -已测试
Private Function hermiteczfun(a() As Double, fd() As Double, u As Double) As Double 'a(1,n)存储n+1个节点,fd(n)存储n+1个节点处导数值,u为插值点
Dim l() As Double, ld() As Double, g() As Double, h() As Double, aim As Double
Dim n As Integer, i As Integer, j As Integer
n = UBound(a)
ReDim l(n), ld(n), g(n), h(n)
aim = 0
For i = 0 To n
l(i) = 1: ld(i) = 0
For j = 0 To n
If j = i Then GoTo hulue
l(i) = l(i) * (u - a(0, j)) / (a(0, i) - a(0, j))
ld(i) = ld(i) + 1 / (a(0, i) - a(0, j))
hulue:
Next j
g(i) = (1 + 2 * (a(0, i) - u) * ld(i)) * l(i) * l(i)
h(i) = (u - a(0, i)) * l(i) * l(i)
aim = aim + g(i) * a(1, i) + h(i) * fd(i)
Next i
hermiteczfun = aim
End Function
'5.2.1 tixingjffun 变步长梯形积分法 -已测试
Private Function tixingjffun(a As Single, b As Single, eps As Double, m As Long) As Double 'a、b分别为积分上下限,eps为误差,m为最大计算次数
Dim h As Double, t1 As Double, t2 As Double, t As Double, hh As Double
Dim n As Long: n = 1
h = b - a: t1 = h * (f(a) + f(b)) / 2
Do
t = 0
For i = 1 To n
t = t + f(a + (i - 0.5) * h)
Next i
hh = h * t
t2 = (t1 + hh) / 2
If Abs(t2 - t1) eps Then Exit Do
t1 = t2: h = h / 2: n = 2 * n
Loop Until n 2 * m
If n 2 * m Then
MsgBox "计算次数预定太小,不能达到误差要求"
End If
tixingjffun = t2
End Function
'5.2.2 simpsonjffun 变步长Simpson积分法 -已测试
Private Function simpsonjffun(a As Single, b As Single, eps As Double, m As Long) As Double 'a、b分别为积分上下限,eps为误差,m为最大计算次数
Dim n As Long, i As Long
Dim h As Double, t1 As Double, t2 As Double, hh As Double, s1 As Double, s2 As Double
n = 1: h = b - a: t1 = h * (f(a) + f(b)) / 2
hh = h * (f((a + b) / 2)): s1 = (t1 + 2 * hh) / 3
Do
n = 2 * n: h = h / 2: t2 = (t1 + hh) / 2
t = 0
For i = 1 To n
t = t + f(a + (i - 0.5) * h)
Next i
hh = t * h
s2 = (t1 + 2 * hh) / 3
If Abs(s2 - s1) eps Then Exit Do
t1 = t2: s1 = s2
Loop Until n m
If n m Then MsgBox "计算次数预定太小,不能达到误差要求"
simpsonjffun = s2
End Function
'5.3 Rombergjffun Romberg积分法
Private Function rombergjffun(a As Single, b As Single, eps As Double) As Double
Dim k As Integer, n As Integer, h As Double
k = 0: n = 1: h = b - a
End Function
'5.5.1 ds1fun 求一阶导数 -已测试
Private Function ds1fun(x0 As Single, eps As Double) As Double 'x0为求导点,eps为误差
Dim h As Double, t1 As Double, t2 As Double
h = 1: t1 = (f(x0 + h) - f(x0 - h)) / (2 * h)
h = h / 2: t2 = (f(x0 + h) - f(x0 - h)) / (2 * h)
Do While Abs(t2 - t1) eps
t1 = t2
h = h / 2
t2 = (f(x0 + h) - f(x0 - h)) / (2 * h)
Loop
ds1fun = t2
End Function
'5.5.2 ds2fun 求二阶导数 -已测试
Private Function ds2fun(x0 As Single, eps As Double) As Double 'x0为求导点,eps为误差
Dim h As Double, t1 As Double, t2 As Double
h = 1: t1 = (f(x0 + h) + f(x0 - h) - 2 * f(x0)) / (h * h)
h = h / 2: t2 = (f(x0 + h) + f(x0 - h) - 2 * f(x0)) / (h * h)
Do While Abs(t2 - t1) eps
t1 = t2
h = h / 2
t2 = (f(x0 + h) + f(x0 - h) - 2 * f(x0)) / (h * h)
Loop
ds2fun = t2
End Function
拉格朗日插值的matlab代码
1、给出一列数据之后,作图如下:aa= randn(100,1);plot(aa);。
2、然后在做好的图中找到tools--basic fitting,打开如下对话框。
3、在打开的对话框中有多种数据插值方法,并可以给出插值的公式。使用cubic方法:于是可以看到插值后的曲线和插值公式。
4、一维插值相当于给出了xy的公式,比如我们上述命令中,aa的值为y,而aa中对应值的位置就是x。
5、还可以使用其他命令来进行数据插值。
6、matlab的interp1中还有nearest,next,previous,cubic等插值方法。
如何用matlab实现插值算法
实例展示
1
先看一个实例,最后再来说明一维插值在matlab中的用法。实例如下图,用13个节点作三种插值,并比较结果。
2
首先启动matlab,选择编辑器,再新建一个命令文件。
3
然后,在编辑器窗口中输入本题的代码。如下图所示。并保存,此处命名为yiwei。
4
最后再命令行窗口处输入yiwei,并敲入键盘上的enter建。最终得到的结果是插值与原来的13个数据点之间的比较图,可以看出结果很好。
END
命令解释
1
通过上面的例子,也知道了matlab进行一维插值的命令是interp1.
该命令的形式为y1=interp1(x0,y0,x1,'method').
功能:根据已知的数据(x0,y0),用method方法进行插值,然后计算x1对应的函数值y1.
2
其中的参数及其注意事项。
x0,y0是已知的数据向量,其中x应以升序或者降序排列,x1是插值点的自变量坐标向量;method是用来选择插值算法的,它可以取:‘linear’(线性插值)、‘cubic’(三次多项式插值)、‘nearst’(最近插值)、‘spline’(三次样条插值)。
牛顿插值法,用VB写代码?
Dim aa As Double, bb As Double '分别接收findway有根区间两端值的变量
Dim x(1) As Double '分别接收ercigenway的根
'1.0 ercigenway 求二次方程实根 -已测试
Private Sub ercigenway(a As Single, b As Single, c As Single) 'a、b、c对应为二次方程的系数
Dim d As Double
d = b ^ 2 - 4 * a * c
If d 0 Then
MsgBox "Δ小于0,没有实根", , "消息"
x(0) = 0: x(1) = 0
ElseIf d = 0 Then
x(0) = -b / (2 * a): x(1) = x(0)
Else
x(0) = (-b - Sgn(b) * Sqr(d)) / (2 * a): x(1) = c / (a * x(0))
End If
End Sub
'2.1 findway 等步长扫描有根区间 -已测试
Private Sub findway(ByVal a As Single, ByVal b As Single, h As Double) 'a、b分别为待扫描区间端点,h为步长
Dim a1 As Double
a1 = a
Do
If f(a1) * f(a1 + h) = 0 Then
aa = a1: bb = a1 + h
Exit Sub
End If
a1 = a1 + h
Loop While a1 b
If a1 b Then
MsgBox "没有找到有根区间,请换更小的步长试一下"
Exit Sub
End If
End Sub
'2.2 erfenfun 二分法求根 -已测试
Private Function erfenfun(ByVal a As Single, ByVal b As Single, eps As Double) 'a、b为有根区间端点,eps为误差
Dim x0 As Double, x1 As Double, x2 As Double, f0 As Double, f1 As Double, f2 As Double
x1 = a: x2 = b
Do
x0 = (x1 + x2) / 2
f0 = f(x0)
If f0 = 0 Then
Exit Do
Else
f1 = f(x1): f2 = f(x2)
If f0 * f1 0 Then
x2 = x0
Else
x1 = x0
End If
End If
Loop While Abs(x1 - x2) eps
x0 = (x1 + x2) / 2
erfenfun = x0
End Function
'2.4 newtonfxfun Newton切线法 -已测试
Private Function newtonfxfun(ByVal x0 As Double, eps As Double) As Double 'x0为附近根,eps为误差
Dim x1 As Double, f0 As Double, f1 As Double
x1 = x0
Do
x0 = x1
f0 = f(x0): f1 = fd(x0) 'fd表示f的导函数
If Abs(f1) eps Then
x1 = x0: Exit Do
End If
x1 = x0 - f0 / f1
Loop Until Abs(x1 - x0) eps
newtonfxfun = x1
End Function
'2.3 stediedaifun Seffensen加速迭代法 (方程形式为x-f(x)=0) -已测试
Private Function stediedaifun(ByVal x0 As Double, eps1 As Double, eps2 As Double) As Double 'x0为解析解附近的根,eps1为输出结果误差,eps2为迭代能否继续判断标准
Dim y As Double, z As Double, x1 As Double
x1 = x0
Do
x0 = x1
y = f(x0): z = f(y)
If Abs(z - 2 * y + x0) eps2 Then
MsgBox "为满足eps2条件,不能继续迭代"
Exit Function
End If
x1 = x0 - (y - x0) ^ 2 / (z - 2 * y + x0)
Loop Until Abs(x1 - x0) eps1
stediedaifun = x1
End Function
'2.5 newtonfxnfun n次代数方程Newton切线法 -已测试
Private Function newtonfxnfun(a() As Single, eps As Double, x0 As Double) As Double 'a()分别存储按降幂排列的方程的n个系数,eps为误差,x0为附近根
Dim k As Integer, n As Integer, f0 As Double, f1 As Double, x1 As Double
n = UBound(a)
x1 = x0
Do
x0 = x1
f0 = a(0): f1 = f0
For k = 1 To n - 1
f0 = a(k) + f0 * x0
f1 = f0 + f1 * x0
Next k
f0 = a(n) + f0 * x0
x1 = x0 - f0 / f1
Loop Until Abs(x1 - x0) eps
newtonfxnfun = x1
End Function
'2.6 linecutfun 弦截法 -已测试
Private Function linecutfun(ByVal x0 As Double, ByVal x1 As Double, eps As Double, n As Long) As Double 'n为迭代次数限制,x0、x1为有根区间端点,eps为误差
Dim f0 As Double, f1 As Double, f2 As Double
Dim x2 As Double, i As Long
f0 = f(x0): f1 = f(x1)
For i = 1 To n
x2 = x1 - (x1 - x0) * f1 / (f1 - f0)
f2 = f(x2)
If Abs(f2) eps Then
Exit For
End If
x0 = x1: x1 = x2: f0 = f1: f1 = f2
Next i
If i = n + 1 Then
MsgBox "要求的计算次数太低,没有达到精度要求"
End If
linecutfun = x2
End Function
'4.1 lagrangeczfun 拉格朗日插值法 -已测试
Private Function lagrangeczfun(a() As Double, ByVal u As Double) As Double 'a(1,n)存储n+1个节点,u为插值点
Dim i As Integer, j As Integer, n As Integer
Dim l As Double, v As Double
v = 0
n = UBound(a, 2)
For j = 0 To n
l = 1#
For i = 0 To n
If i = j Then GoTo hulue
l = l * (u - a(0, i)) / (a(0, j) - a(0, i))
hulue:
Next i
v = v + l * a(1, j)
Next j
lagrangeczfun = v
End Function
'4.2 newtonczfun newton插值法 -已测试
Private Function newtonczfun(a() As Double, u As Double) As Double 'a(1,n)存储n+1个节点,u为插值点
Dim n As Integer, i As Integer, j As Integer, k As Integer
Dim z() As Double, f() As Double, v As Double
n = UBound(a, 2)
ReDim z(n), f(n)
For i = 0 To n
z(i) = a(1, i)
Next i
For i = 1 To n
k = k + 1
For j = i To n
f(j) = (z(j) - z(j - 1)) / (a(0, j) - a(0, j - k))
Next j
For j = i To n
z(j) = f(j)
Next j
Next i
f(0) = a(1, 0)
v = 0
For i = n To 0 Step -1
v = v * (u - a(0, i)) + f(i)
Next i
newtonczfun = v
End Function
'4.3 hermiteczfun Hermite插值法 -已测试
Private Function hermiteczfun(a() As Double, fd() As Double, u As Double) As Double 'a(1,n)存储n+1个节点,fd(n)存储n+1个节点处导数值,u为插值点
Dim l() As Double, ld() As Double, g() As Double, h() As Double, aim As Double
Dim n As Integer, i As Integer, j As Integer
n = UBound(a)
ReDim l(n), ld(n), g(n), h(n)
aim = 0
For i = 0 To n
l(i) = 1: ld(i) = 0
For j = 0 To n
If j = i Then GoTo hulue
l(i) = l(i) * (u - a(0, j)) / (a(0, i) - a(0, j))
ld(i) = ld(i) + 1 / (a(0, i) - a(0, j))
hulue:
Next j
g(i) = (1 + 2 * (a(0, i) - u) * ld(i)) * l(i) * l(i)
h(i) = (u - a(0, i)) * l(i) * l(i)
aim = aim + g(i) * a(1, i) + h(i) * fd(i)
Next i
hermiteczfun = aim
End Function
'5.2.1 tixingjffun 变步长梯形积分法 -已测试
Private Function tixingjffun(a As Single, b As Single, eps As Double, m As Long) As Double 'a、b分别为积分上下限,eps为误差,m为最大计算次数
Dim h As Double, t1 As Double, t2 As Double, t As Double, hh As Double
Dim n As Long: n = 1
h = b - a: t1 = h * (f(a) + f(b)) / 2
Do
t = 0
For i = 1 To n
t = t + f(a + (i - 0.5) * h)
Next i
hh = h * t
t2 = (t1 + hh) / 2
If Abs(t2 - t1) eps Then Exit Do
t1 = t2: h = h / 2: n = 2 * n
Loop Until n 2 * m
If n 2 * m Then
MsgBox "计算次数预定太小,不能达到误差要求"
End If
tixingjffun = t2
End Function
'5.2.2 simpsonjffun 变步长Simpson积分法 -已测试
Private Function simpsonjffun(a As Single, b As Single, eps As Double, m As Long) As Double 'a、b分别为积分上下限,eps为误差,m为最大计算次数
Dim n As Long, i As Long
Dim h As Double, t1 As Double, t2 As Double, hh As Double, s1 As Double, s2 As Double
n = 1: h = b - a: t1 = h * (f(a) + f(b)) / 2
hh = h * (f((a + b) / 2)): s1 = (t1 + 2 * hh) / 3
Do
n = 2 * n: h = h / 2: t2 = (t1 + hh) / 2
t = 0
For i = 1 To n
t = t + f(a + (i - 0.5) * h)
Next i
hh = t * h
s2 = (t1 + 2 * hh) / 3
If Abs(s2 - s1) eps Then Exit Do
t1 = t2: s1 = s2
Loop Until n m
If n m Then MsgBox "计算次数预定太小,不能达到误差要求"
simpsonjffun = s2
End Function
'5.3 Rombergjffun Romberg积分法
Private Function rombergjffun(a As Single, b As Single, eps As Double) As Double
Dim k As Integer, n As Integer, h As Double
k = 0: n = 1: h = b - a
End Function
'5.5.1 ds1fun 求一阶导数 -已测试
Private Function ds1fun(x0 As Single, eps As Double) As Double 'x0为求导点,eps为误差
Dim h As Double, t1 As Double, t2 As Double
h = 1: t1 = (f(x0 + h) - f(x0 - h)) / (2 * h)
h = h / 2: t2 = (f(x0 + h) - f(x0 - h)) / (2 * h)
Do While Abs(t2 - t1) eps
t1 = t2
h = h / 2
t2 = (f(x0 + h) - f(x0 - h)) / (2 * h)
Loop
ds1fun = t2
End Function
'5.5.2 ds2fun 求二阶导数 -已测试
Private Function ds2fun(x0 As Single, eps As Double) As Double 'x0为求导点,eps为误差
Dim h As Double, t1 As Double, t2 As Double
h = 1: t1 = (f(x0 + h) + f(x0 - h) - 2 * f(x0)) / (h * h)
h = h / 2: t2 = (f(x0 + h) + f(x0 - h) - 2 * f(x0)) / (h * h)
Do While Abs(t2 - t1) eps
t1 = t2
h = h / 2
t2 = (f(x0 + h) + f(x0 - h) - 2 * f(x0)) / (h * h)
Loop
ds2fun = t2
End Function
c++,求插值。。高分求。。。答好再加!!
1.先将数组排序,得到沿坐标轴排列的(x,y)对
2.依次循环,作插值。插值方法可采用三点作抛物线,比如:要在1,2点之间作插值,就取1,2,3点的(x,y)数值,计算出通过1,2,3点的抛物线函数(实际就是解一个非常简单的三元一次方程),得到y=ax*x+bx+c 抛物线函数,利用该抛物线函数,带入要插值的x值(x1+x2)/2,得到y值,就产生了插值的新(x,y)点。
依次进行500次就ok了,最后一个点的抛物线可以选498,499,500三点来拟合。
知道原理后很简单,代码就不用写出来了吧。楼下如果有空,也可以帮忙把代码贴出来。
谁有拉格朗日插值法的python代码啊!急用啊!谢谢啦!
您好,#includestdio.h
#includestdlib.h
#includeiostream.h
typedef struct data
{
float x;
float y;
}Data;//变量x和函数值y的结构
Data d[20];//最多二十组数据
float f(int s,int t)//牛顿插值法,用以返回插商
{
if(t==s+1)
return (d[t].y-d[s].y)/(d[t].x-d[s].x);
else
return (f(s+1,t)-f(s,t-1))/(d[t].x-d[s].x);
}
float Newton(float x,int count)
{
int n;
while(1)
{
cout"请输入n值(即n次插值):";//获得插值次数
cinn;
if(n=count-1)// 插值次数不得大于count-1次
break;
else
system("cls");
}
//初始化t,y,yt。
float t=1.0;
float y=d[0].y;
float yt=0.0;
//计算y值
for(int j=1;j=n;j++)
{
t=(x-d[j-1].x)*t;
yt=f(0,j)*t;
//coutf(0,j)endl;
y=y+yt;
}
return y;
}
float lagrange(float x,int count)
{
float y=0.0;
for(int k=0;kcount;k++)//这儿默认为count-1次插值
{
float p=1.0;//初始化p
for(int j=0;jcount;j++)
{//计算p的值
if(k==j)continue;//判断是否为同一个数
p=p*(x-d[j].x)/(d[k].x-d[j].x);
}
y=y+p*d[k].y;//求和
}
return y;//返回y的值
}
void main()
{
float x,y;
int count;
while(1)
{
cout"请输入x[i],y[i]的组数,不得超过20组:";//要求用户输入数据组数
cincount;
if(count=20)
break;//检查输入的是否合法
system("cls");
}
//获得各组数据
for(int i=0;icount;i++)
{
cout"请输入第"i+1"组x的值:";
cind[i].x;
cout"请输入第"i+1"组y的值:";
cind[i].y;
system("cls");
}
cout"请输入x的值:";//获得变量x的值
cinx;
while(1)
{
int choice=3;
cout"请您选择使用哪种插值法计算:"endl;
cout" (0):退出"endl;
cout" (1):Lagrange"endl;
cout" (2):Newton"endl;
cout"输入你的选择:";
cinchoice;//取得用户的选择项
if(choice==2)
{
cout"你选择了牛顿插值计算方法,其结果为:";
y=Newton(x,count);break;//调用相应的处理函数
}
if(choice==1)
{
cout"你选择了拉格朗日插值计算方法,其结果为:";
y=lagrange(x,count);break;//调用相应的处理函数
}
if(choice==0)
break;
system("cls");
cout"输入错误!!!!"endl;
}
coutx" , "yendl;//输出最终结果
}
一次插值代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于插值处理实现、一次插值代码的信息别忘了在本站进行查找喔。
版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;
- 上一篇:报价系统源代码(源代码价格)
- 下一篇:爱淘宝搜索代码(淘淘商城代码)
相关推荐
- 05-09网页代码,网页代码快捷键
- 05-06单页网站的代码(完整的网页代码)[20240506更新]
- 05-06个人主页图片代码(个人主页图片代码怎么弄)[20240506更新]
- 05-06提取微信名片代码(微信名片信息提取)[20240506更新]
- 05-06php后台权限管理代码(php管理员权限)[20240506更新]
- 05-06付费观看代码php(付费观看代码)[20240506更新]
- 05-06在线html执行代码(html怎么运行)[20240506更新]
- 05-06源代码管理资源管理器(资源管理器运行代码)[20240506更新]
- 05-06代码源软件库(程序代码库)[20240506更新]
- 05-06点击弹出密码代码(点击弹出密码代码错误)[20240506更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接