1. 程式人生 > >實驗二:Lagrange拉格朗日插值法之C語言程式碼

實驗二:Lagrange拉格朗日插值法之C語言程式碼

拉格朗日插值多項式的演算法就比前面的簡單些,30行程式碼左右可以搞定,不過為了通俗易懂,這裡我寫了比較多的註釋.題目:已知下列函式表:

x | 0.56160 | 0.56280 | 0.56401 | 0.56521 |
y | 0.82741 | 0.82659 | 0.82577 | 0.82495 |

具體思路:依據書上的解題步驟,首先我們輸入插值點的個數n,然後我們輸入插值點的資訊,x值是多少,y值是多少,我們用一個結構體定義,最後依據拉格朗日插值公式轉化成相應的程式碼即可.
下面上程式碼:                   

/*************************************************************************
    > File Name: Lagrange.c
    > Author:chendiyang
    > School:WUST_CST_1501班
    > Myblog:www.chendsir.com
    > Mail:
[email protected]
> Created Time: 2017年04月19日 星期三 8時06分35秒 ************************************************************************/
#include <stdio.h> #define MAX 20 //輸入點的結構 typedef struct stPoint { double x; double y; } Point; int main() { int n; int i,j; Point points[MAX]; double
x,tmp,lagrange=0;//這個x是你將要計算的f(x)插值點,tmp是拉格朗日基函式,larange是根據拉格朗日函式得出f(x)的值 printf("請輸入被插值點的個數:(它是從0開始的,所以輸入3代表4個點)"); scanf("%d",&n); if(n>MAX) { printf("您輸入的個數過多."); return 1; } if(n<=0) { printf("您輸入的點數太少."); return 1; } //輸入插值點的x值和y值
printf("請輸入插值點的x值和y值:\n"); for(i=0;i<=n;i++) scanf("%lf%lf",&points[i].x,&points[i].y); //輸入計算拉格朗日插值多項式的x值 printf("\n請輸入計算拉格朗日插值多項式的x值:"); scanf("%lf",&x); //利用拉格朗日插值公式計算函式x值的對應f(x) for(i=0;i<=n;i++) { for(j=0,tmp=1;j<=n;j++) { if(j==i) //去掉xi與xj相等的情況 continue; //範德蒙行列式下標就是j!=k,相等分母為0就沒意義了 tmp=tmp*(x-points[j].x)/(points[i].x-points[j].x);//這個就是套公式,沒什麼難度 //tmp是拉格朗日基函式 } lagrange=lagrange+tmp*points[i].y; //最後計算基函式*y,全部加起來,就是該x項的拉格朗日函數了 } //拉格朗日函式計算完畢,代入所求函式x的值,求解就ok了 printf("\n拉格朗日函式f(%lf)=%lf\n",x,lagrange); return 0; }

   執行結果如圖:
   這裡寫圖片描述 
   程式執行的結果:當x的值是0.5635時的插值函式值是:0.826116,不知道是對是錯,有心人可以手算幫忙驗證一下..結果不對的話可以給我留言,方便及時改正.

相關推薦

實驗LagrangeC語言程式碼

拉格朗日插值多項式的演算法就比前面的簡單些,30行程式碼左右可以搞定,不過為了通俗易懂,這裡我寫了比較多的註釋.題目:已知下列函式表: x | 0.56160 | 0.56280 | 0.56401 | 0.56521 | y

菜鷄日記——《Python資料分析與挖掘實戰》實驗6-1

實驗6-1 用拉格朗日插值法 題目描述:用拉格朗日插值法對missing_data.xls中表格的空值進行填補。 # p1, lab6 # Fill all of the null values with Lagrange's interpolation # Data file name i

及應用

oci cin app .com dmg npe info sina gin 3man6h1yg巫http://shufang.docin.com/sina_6355780928 7DMg布62夏aq撂儼8秤http://www.docin.com/app/user/use

說明 -1 需要 插值 是什麽 col pre rac div   給定 $n$ 個點 $(x_1, y_1), (x_2, y_2), ..., (x_n, y_n)$ , 其中 $x_1, x_2, ..., x_n$ 互不相等, 構造一個最高次不超過 $n-1$ 的多

4559[JLoi2016]成績比較 容斥+

mem otto spa ack input mes mod 只需要 rip 4559: [JLoi2016]成績比較Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 261 Solved: 165[Submit][Statu

Codeforces 622F The Sum of the k-th Powers ( 自然數冪和、 )

n-1 power HERE sig class text name while pow 題目鏈接 題意 : 就是讓你求個自然數冪和、最高次可達 1e6 、求和上限是 1e9 分析 : 題目給出了最高次 k = 1、2、3 時候的自然數冪和求和公式 可以發現求和公式的

Python實現

erp 拉格朗日 input 估計 while 關系 NPU init for 已知sinx的一組x,y對應關系,用拉格朗日插值法估計sin(0.3367)的值. x x0.32 0.34 0.36 y 0.314567 0.333487 0.352274

快速排序 二分

快速排序法(泛型) static void Main(string[] args) { Console.WriteLine("請輸入待排序數列(以\",\"分割):"); string _s = Console.ReadLine(); string[] _

學習

有幾個很好的部落格: https://www.cnblogs.com/ECJTUACM-873284962/p/6833391.html   洛谷模板: // luogu-judger-enable-o2 #include<algorithm> #include<io

概述

在看zk-SNARK演算法。這個沒接觸過,所以轉載百度文庫 一般地,若已知 在互不相同 n+1 個點  處的函式值  ( 即該函式過  這n+1個點),則可以考慮構造一個過這n+1 個點的、次數不超過n的多項式   ,使其滿足: 要估計任一點ξ,ξ≠xi,i=0,1

複習小計

拉格朗日插值法 概述 因為n次方的函式影象可以有n+1個點確定(比如說y=kx+b就只用兩個點確定,y=ax2+bx+c,只用三個點就可以確定),所以個n次方的方程給你n+1個x或者y就能確定這個方

bzoj 4162: shlw loves matrix II +矩陣乘法

題意 給定矩陣 M,請計算 M^n,並將其中每一個元素對 1000000007 取模輸出。 對於 100% 資料,滿足 n <= 2^10000;k <= 50; 0 <= Mij < 10^9 +7 分析 我們可以帶入k+1

HDU 4059 -容斥原理 +

http://acm.hdu.edu.cn/showproblem.php?pid=4059 題意: 給出n,n<=1e8 求1到n裡,所有與n互質的數的四次方和 在這裡直接考慮,1+....n^4 減去 所有與n不互質的數的4次方 首先我們分解n的質因子,不會很多

程式碼實現及部分證明)

6來飛起 圖片的i=j?下面第二個應該為temp = temp / (xi - xj); #include "cstdio" const int MAXN = (int) 1e5 +

(圖文詳解)

對某個多項式函式,已知有給定的k + 1個取值點: 其中對應著自變數的位置,而對應著函式在這個位置的取值。 假設任意兩個不同的xj都互不相同,那麼應用拉格朗日插值公式所得到的拉格朗日插值多項式為: 其中每個為拉格朗日基本多項式(或稱插值基函式),其表示式為: [3] 拉格朗日基本多項式的

對資料探勘中缺失處理

本文參考《Python資料分析與挖掘實戰》一書。 對於資料探勘的缺失值的處理,應該是在資料預處理階段應該首先完成的事,缺失值的處理一般情況下有三種方式:1.刪掉缺失值資料。2不對其進行處理 3.利用插補法對資料進行補充第一種方式是極為不可取的,如果你的樣本數夠多,刪掉資料較少

求自然數冪和】

求自然數冪和: 1<=n<=10^5,1<=k<=10^5 用快速冪; 1<=n<=10^9,1<=k<=10^6 用拉格朗日插值法; 1.什麼是拉格

對於多複雜資料的最優方法---

  在數值分析中,拉格朗日插值法是以法國十八世紀數學家約瑟夫·拉格朗日命名的一種多項式插值方法。許多實際問題中都用函式來表示某種內在聯絡或規律,而不少函式都只能通過實驗和觀測來了解。如對實踐

[bzoj5339][TJOI2018]教科書般的褻瀆【

# include <bits/stdc++.h> # define ll long long # define inf 0x3f3f3f3f # define N 110 using namespace std; int read