實驗二: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,不知道是對是錯,有心人可以手算幫忙驗證一下..結果不對的話可以給我留言,方便及時改正.
相關推薦
實驗二:Lagrange拉格朗日插值法之C語言程式碼
拉格朗日插值多項式的演算法就比前面的簡單些,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
拉格朗日插值法--CF622F The Sum of the k-th Powers
傳送門 注意到把 n n n作為
快速排序法 拉格朗日插值法 二分法
快速排序法(泛型) 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