输入两个数组x和y,x和y一一对应,经过线性插值,把中间的数补全后(xx数组为1.87到2.091之间所有的数,间隔为0.001),输出新的数组xx和yy.
double[] x={1.87, 1.922, 1.969, 2.003, 2.039, 2.091};
double[] y = { 3323967,3323993 ,3324015 ,3324031 ,3324049,3324077};
代码如下,不知对不对。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
public static void Interpolation(double[] x, double[] y,out double[] xx,out double[] yy )///输入数组x和y,输出插值后的新数组xx和yy。
{
int m = x.Length;
int n = (int)((x[m-1] - x[0]) / 0.001);//强制转换,double转int类型。数组xx和yy的长度为n。
xx = new double[n];//这里不能用double xx = new double[n],因为out函数的原因。
yy = new double[n];
//求数组xx
xx[0] = x[0];
for (int i = 1; i < xx.Length; i++)
{
xx[i] = x[0] + 0.001*i;
}
//求数组yy
int k = 0;
for (int i = k; i < xx.Length; i++)
{
for (int j = 0; j < m - 1; j++)
{
if (xx[i] >= x[j] && xx[i] < x[j + 1])
{
yy[i] = (y[j + 1] - y[j]) * (xx[i] - x[j]) / (x[j + 1] - x[j]) + y[j];
k = i;
}
}
}
}
}
}
大神顺便帮忙用控制台写下验算的代码,验算代码的正确性。调用上面“Interpolation”
跪求C# 线性插值算法代码
答案:2 悬赏:20 手机版
解决时间 2021-12-29 06:22
- 提问者网友:了了无期
- 2021-12-28 10:00
最佳答案
- 五星知识达人网友:英雄的欲望
- 2022-01-10 05:14
插值只见过根据权值算结果的没见过你这种根据结果算权值的。 二次方插值result=(1- t)p0 + tp1
全部回答
- 1楼网友:玩世
- 2022-01-10 05:40
///
///分段线性插值,将一组数插值为所需点数
///
///待插值的数据数组
///插值点数
///插值后的数据数组
public static double[] interpolation(double[] datain,int n)
{
double[] dataout = new double[n];
int lenin = datain.length;
double[] a = new double[lenin];
double[] divin = new double[lenin];
double[] divout = new double[n];
divin[0] = 0;
for (int i = 1; i < lenin; i++)
{
divin[i] = divin[i - 1] + 1;
}
divout[0] = 0;
for (int i = 1; i < n; i++)
{
divout[i] = divout[i - 1] + lenin / convert.todouble(n);
}
int k = 0;
for (int i = k; i < n; i++)
{
for (int j = 0; j < lenin - 1; j++)
{
if (divout[i] >= divin[j] && divout[i] < divin[j + 1])
{
dataout[i] = (datain[j + 1] - datain[j]) * (divout[i] - divin[j]) / (divin[j + 1] - divin[j]) + datain[j];
k = i;
}
}
}
return dataout;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯