1. 程式人生 > >實驗二:Newton牛頓插值法之C語言程式碼

實驗二:Newton牛頓插值法之C語言程式碼

牛頓插值法與拉格朗日插值法類似,只不過是同一個插值多項式的不同表達形式,所以它們誤差也是相等的.題目:
x | 0.56160 | 0.56280 | 0.56401 | 0.56521 |
y | 0.82741 | 0.82659 | 0.82577 | 0.82495 |

具體思路:依據書上的解題步驟,首先我們輸入插值點的個數n,然後我們輸入插值點的資訊,x值是多少,y值是多少,我們用一個結構體定義,再構建一個差商表,我們用一個一維陣列儲存即可,最後依據牛頓插值公式轉化成相應的程式碼即可.
下面上程式碼:          

/*************************************************************************
    > File Name: Newton.c
    > Author:chendiyang
    > School:WUST_CST_1501班
    > Myblog:www.chendsir.com
    > Mail:
[email protected]
> Created Time: 2017年04月19日 星期三 10時34分27秒 ************************************************************************/
#include <stdio.h> #define MAX 20 //輸入點的結構 typedef struct stPoint { double x; double y; } Point; int main() { int n; int i,j; Point points[MAX+1
]; double form[MAX+1]; //用來儲存差商表 double x,tmp,newton=0;//這個x是你將要計算的f(x)插值點,tmp基函式,newton是根據牛頓插值公式函式得出N(x)的值 printf("請輸入被插值點的個數:(它是從0開始的,所以輸入3代表4個點)"); scanf("%d",&n); if(n>MAX) { printf("您輸入的個數過多."); return 1; } if(n<=0) { printf("您輸入的點數太少."
); return 1; } //輸入插值點的x值和y值 printf("\n請輸入插值點的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); //對差商表進行初始化 for(i=0;i<=n;i++) form[i]=points[i].y; for(i=0;i<n;i++) { for(j=n;j>i;j--) { //差商的計算,f(X0,X1,X2,X3...Xn)的值 form[j]=(form[j]-form[j-1])/(points[j].x-points[j-1-i].x); } } tmp=1; newton=form[0]; for(i=0;i<n;i++) { //根據牛頓插值公式,上面差商表都計算完畢了,現在吧差商乘以牛頓插值函式,全部加起來就OK了 tmp=tmp*(x-points[i].x);//tmp是插值函式:例如(x-x0),(x-x1),(x-x2)等 newton=newton+tmp*form[i+1];//完成後newton就是f(x)的值了 } //輸入牛頓插值函式f(x)的值 printf("\n牛頓插值函式N(%lf) = %lf \n",x,newton); return 0; //計算完畢 }

 a 執行結果如圖所示:
 這裡寫圖片描述  
 因為牛頓插值公式和拉格朗日插值公式只是同一個插值多項式的不同表現形式,它們的插值多項式是N(x)是完全相同的,所以它們的誤差也是完全相同的,當插值x為0.5635時,利用newton插值公式計算出的結果是完全相同的:0.826116,證實了我之前的拉格朗日插值是對的,當然不排除兩個都錯了的情況,這個就尷尬了,反正兩個結果應該是一模一樣的,畢竟誤差都是相同的.
實驗二到此完畢....(由於圖形程式設計的庫函式不熟悉,也不是很會,暫時還是dos視窗吧,到時候看老師怎麼說吧,發現自己真是浪費了很多時間,想找個時間好好靜下來學些東西,但是生活上一些事情,心真的挺累..)慢慢加油吧

相關推薦

實驗Newton牛頓C語言程式碼

牛頓插值法與拉格朗日插值法類似,只不過是同一個插值多項式的不同表達形式,所以它們誤差也是相等的.題目: x | 0.56160 | 0.56280 | 0.56401 | 0.56521 | y | 0.82741 | 0.82659 | 0.82577

實驗Lagrange拉格朗日C語言程式碼

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

利用均差的牛頓(Newton)

函式f的零階均差定義為 ,一階定義均差為: 一般地,函式f 的k階均差定義為: 或者上面這個式子求的k+1階均差 利用均差的牛頓插值法多項式為: 簡單計算的時候可以觀看下面的差商(均差)表: 怎麼利用差商表計算,可以看下面這個例子: 正常的話還有一個餘項,在本

Python實現牛頓(差商表)

插值 ima proc 保存 append ces fun shadow 計算 def func(x,y,X,infor=True): list2=[y[0]] # 差商表的對角線的第一個元素始終是y0 count=1 while(T

java實現牛頓

本程式碼經過本人優化後可直接執行,感謝支援! import java.util.Scanner; public class Newton_interpolation { /*拷貝向量*/ private static void copy_ve

一維最優化(Quadratic interpolation method)

理論見參考《Practical Optimization》中4.5節,程式碼實現如下:( 可以將黃金分割法和二次插值法結合起來,想用黃金分割法快速搜尋得到最優解,然後用該最優解作為二次插值的初值,可以提高計算精度。Matlab中就是採用此組合策略。 ) OneDimensi

【數值分析】拉格朗日牛頓

給定函式四個點的資料如下: 試用拉格朗日插值確定函式在x=2.101,4.234處的函式值。 執行得到結果: 已知用牛頓插值公式求的近似值。 執行程式得到結果:   2.26667 實驗分析 1、Lagrange插值法和Newton插值法解決實際問題中關於只提供複雜的離散資料的函式求值問題,通過將所考察的函式

newtonc++版

 如果是拉格朗日插值法的話把註釋的朗格朗日函式去掉註釋就可以了 //stdafx.h #include<stdafx.h> #include<stdio.h> #include<stdlib.h> #include<io

拉格朗日C語言

數值表是這樣的 X:0.46,0.47,0.48,,,,,,, Y:0.4846555,0.4937452,0.5027498,,,,,, 由於是二次插值法,只需要三組XY資料 程式碼如下: #include "stdafx.h" #include "iostre

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

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

JAVA實驗對陣列進行初始化、賦、按形式列印

題目:按照要求使用Java編碼。 (1)以型別int[][]宣告一個叫matrix的二維陣列變數,將矩陣初始化為一個5個元素的陣列。 (2)以下列方式為matrix的內部元素賦值:matrix從零開始迴圈到其長度值;例如索引為i,在每次迭代中,將matrix[i]指向一個新的整數

JAVA實驗編碼實現一個類對輸入陣列的數從小到大排序同時使用二分查詢某一個數(遞迴和非遞迴)

編碼實現一個類 (1)提供一個靜態方法,可以將輸入的一個int[]陣列按照從小到大的順序排列; (2)提供靜態方法,對排好序的陣列使用折半(二分)查詢(使用遞迴和非遞迴兩種形式分別實現)查詢某一個整數。 答案 import java.util.*; public class

【控制系統數字模擬與CAD】實驗結構圖數字模擬

一. 實驗目的  1. 掌握結構圖法模擬複雜控制系統的方法;  2. 掌握複雜系統聯接矩陣W和輸入聯接矩陣W0的求解過程;  3. 掌握複雜系統的環節連線,矩陣A、 B、 C、D的求解過程;  4. 掌握MATLAB編制結構圖數字模擬的程式,並運用MATLAB程式對模擬結構進行處理。      &

拉格朗日及應用

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$ 的多

實驗ICMP重定向攻擊

數據報 允許 eat 路由表 等待 ket 就會 tpi 虛擬 -:實驗原理   ICMP重定向信息是路由器向主機提供實時的路由信息,當一個主機收到ICMP重定向信息時,它就會根據這個信息來更新自己的路由表。由於缺乏必要的合法性檢查,如果一個黑客想要被攻擊的主機修改它的路由

圖像

值方法 方向 信息 基於 lan 介紹 XML 模型 技術分享 第一部分: 在做數字圖像處理時,經常會碰到小數象素坐標的取值問題,這時就需要依據鄰近象素的值來對該坐標進行插值。比如:做地圖投影轉換,對目標圖像的一個象素進行坐標變換到源圖像上對應的點時,變換出來

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

2017-2018-2 20155231《網絡對抗技術》實驗後門原理與實踐

虛擬機ip src oca ali 執行 -m 定時 port art 2017-2018-2 20155231《網絡對抗技術》實驗二:後門原理與實踐 常用後門工具 一、Windows獲得Linux的Shell 在本機cmd中使用ipconfig獲得windows的IP地址