zoukankan      html  css  js  c++  java
  • 拉格朗日多项式

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    namespace CsTest
    {   //可以确定的是n个插值点的拉格朗日多项式的最大次数为n
        public class Ploy   //多项式
        {
            public double[] a;//系数,指数即索引值
            public Ploy(int n = 1)
            {
                a = new double[n]; //当未给数组中的每一项赋值时,其值为0
            }
            public static Ploy operator +(Ploy a1, Ploy b1)//多项式a1和b1的项数相同
            {
                Ploy p = new Ploy(a1.a.Length);
                for (int i = 0; i < a1.a.Length; i++)
                {
                    p.a[i] = a1.a[i] + b1.a[i];//系数相加
                }
                return p;
            }
            public static Ploy operator *(Ploy a1, Ploy b1)
            {
                Ploy p = new Ploy(a1.a.Length);
                for (int i = 0; i < a1.a.Length; i++)
                {
                    if (a1.a[i] == 0)
                    {
                        continue;  //此项系数为0
                    }
                    for (int j = 0; j < a1.a.Length; j++)
                    {
                        if (b1.a[j] == 0)//此项系数为0
                        {
                            continue;
                        }
                        if (i + j > a1.a.Length)
                        {
                            Console.WriteLine("运算出现错误");
                            break;
                        }
                        p.a[i + j] += a1.a[i] * b1.a[j];
                    }
                }
                return p;
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                int n = 4;
                //获取文件中的x值得数量并赋给n
                //int[] X = new int[n];  //横坐标数组
                //int[] Y = new int[n];  //纵坐标数组
                int[] X = { 0, 1, 2, 3 };
                int[] Y = { 2, -1, 4, 3 };
                Ploy lag = new Ploy(n);//拉格朗日多项式
                for (int i = 0; i < n; i++)
                {
                    Ploy py = new Ploy(X.Length);
                    py.a[0] = Y[i];
                    Ploy px = new Ploy(X.Length);
                    px.a[0] = 1;
                    for (int k = 0; k < X.Length; k++)
                    {
                        if (i != k)
                        {
                            px.a[0] *= X[i] - X[k];
                        }
                    }
                    py.a[0] /= px.a[0];
                    Ploy mul = new Ploy(n);
                    mul.a[0] = 1;
                    for (int j = 0; j < n; j++)
                    {
                        Ploy temp=new Ploy(n);
                        temp.a[1]=1;
                        Ploy temp2=new Ploy(n);
                        if(i==j)
                        {
                            continue;
                        }
                        temp2.a[0]=-X[j];
                        mul *= temp + temp2;
                    }
                    lag += py * mul;
                }
                //输出拉格朗日多项式
                for(int i=n-1;i>=0;i--)
                {
                    if (lag.a[i] == 0)
                        continue;
                    Console.Write("{0}x^{1}+",lag.a[i],i);
                }
            }
        }
    }
    

  • 相关阅读:
    去除UINavigationBar的下边框
    struts2配置log
    GET和POST方式的乱码问题
    Eclipse中导入MyEclipse生成的war包
    TOMCAT管理页面部署WAR包 大小超出上限
    Java死锁 Thread Dump分析
    自定义标签之IterationTag
    Chart.js学习
    计数排序
    练手系列之旋转字符串
  • 原文地址:https://www.cnblogs.com/zztong/p/6695153.html
Copyright © 2011-2022 走看看