标题:线性插值的dll,大家提意见!
只看楼主
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
结帖率:100%
已结贴  问题点数:20 回复次数:4 
线性插值的dll,大家提意见!
xxc.rar (11.58 KB)
程序代码:
using System;
using System.Collections.Generic;
using System.Text;

namespace XXCZ
{
    public class Xc
    {
        public static double CalOne(double x,double y,params double []m) //参数格式x,y,z,共3个点的。其中z就是要求的。
      {
          double z = 0d;

          if (m.Length == 0 || m.Length != 9)  //传递的参数不合要求的话,返回0
          {
              return z;
          }
          else  //符合要求
          {
              double A = 0d;

              try
              {
                  A = 1 / (m[3] *( m[7]-m[1]) + m[6] * ( m[1] - m[4] ) + m[0] * ( m[4] - m[7] ));  //求矩阵的行列式的值的倒数
              }
              catch (ArithmeticException)
              {
                  return z;
              }

              //if (A < 0d)   //行列式的值取正
                  //A = -1.0d * A;

              double a0 = A * (m[3] * m[7] - m[4] * m[6]) * m[2]+A * (m[6] * m[1] - m[0] * m[7] ) * m[5]+A * ( m[0] * m [4] - m[1] * m[3] ) *m[8];  //求线性参数,下二个相同
              double a1 = A * (m[4] - m[7]) * m[2] + A * (m[7] - m[1]) * m[5] + A * (m[1] - m[7]) * m[8];
              double a2 = A * (m[6] - m[3]) * m[2] + A * (m[0] - m[6]) * m[5] + A * (m[3] - m[0]) * m[8];

              z = a0 + a1 * x + a2 * y;

              return z;
          }
      }

    }
}
关于线性插值的定义大家还请看看相关的书!我这程序是死的,用伴随矩阵来求矩阵的逆,老老实实的矩阵运算!但是运算结果有点问题(主要是精度,偏差大),该如何改进?

[ 本帖最后由 qq1023569223 于 2011-4-13 17:56 编辑 ]
2011-04-13 00:22
cdinten
Rank: 2
等 级:论坛游民
帖 子:9
专家分:20
注 册:2006-10-15
得分:20 
同学你应该先学习一下数值计算
2011-04-13 15:50
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
得分:0 
那个不要取正吧!

   唯实惟新 至诚致志
2011-04-13 17:55
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
得分:0 
程序代码:
using System;
using System.Collections.Generic;
using System.Text;

namespace XXCZ
{
    public class Xc
    {
        public static double CalOne(double x,double y,params double []m)  //改进了一下,设第一点的x=0,y=0,如何?
      {
          double z = 0d;

          if (m.Length == 0 || m.Length != 9)
          {
              return z;
          }
          else
          {
              double A = 0d;

              try
              {
                  A = 1 / ( m[3] * m[7] - m[6] * m[4] );
              }
              catch (ArithmeticException)
              {
                  return z;
              }

              double a0 = A * ( m[3] * m[7] - m[6] * m[4] ) * m[2];
              double a1 = A * ( m[4] - m[7] ) * m[2] + A * m[7] * m[5] - A * m[7] * m[8];
              double a2 = A * ( m[6] - m[3] ) * m[2] - A * m[6] * m[5] + A * m[3] * m[8];

              z = a0 + a1 * x + a2 * y;

              return z;
          }
      }

        public static double Caltwo_Special(double x, double y, params double[] m)  //特殊情况下的双线性插值,四个点在边长为m[0]的正方形的顶点上
        { 
            double z = 0d;

            if (m.Length == 0 || m.Length != 5)
            {
                return z;
            }
            else
            {
                if (m[0] < 0)
                {
                    m[0] = -1.0d * m[0];
                }

                double A = x / m[0], B = y / m[0];

                z = (1 - A) * (1 - B) * m[1] + A * (1 - B) * m[2] + (1 - A) * B * m[3] + A * B * m[4];

                return z;
            }
        }

    }
}

   唯实惟新 至诚致志
2011-04-13 19:00
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
得分:0 
结了,东西留下了!

   唯实惟新 至诚致志
2011-04-14 17:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-336482-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.087309 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved