計算機數值分析 實驗 用C 實現

2021-10-05 19:04:22 字數 4320 閱讀 4143

實驗報告

**檔案

用程式語言程式設計實現以下演算法:

(1) 已知插值節點序列 ,用拉格朗日(lagrange)插值多項式 計算的函式 在點 的近似值。

(2) 已知插值節點序列 ,用牛頓(newton)插值值多項式 計算的函式 在點 的近似值。

(3) 用線性函式 擬合給定資料 。

#include

#define max 100

using

namespace std;

//拉格朗日插值

double

lagrange

(double x,

double y,

int n,

double x0)

} y0 +

= temp;

}return y0;

}//牛頓插值

double

newton

(double x,

double y,

int n,

double x0)

else}}

double out =0;

for(

int i =

0; i < n; i++

) out +

= temp1;}}

return out;

}//最小二乘法擬合資料

void

mintwo

(double x,

double y,

int n,

double

&a,double

&b) a =

(c1 * b2 - c2 * b1)

/(a1 * b2 - a2 * b1)

; b =

(c1 * a2 - c2 * a1)

/(b1 * a2 - b2 * a1);}

intmain()

//cout << "輸入要計算的 x0 :";

//cin >> x0;

//cout << "函式f(x)的近似值為:lagrange:" << lagrange(x, y, n, x0) << endl;

//cout << "函式f(x)的近似值為:newton:" << newton(x, y, n, x0) << endl;

double a, b;

mintwo

(x, y, n,a,b)

; cout <<

"擬合函式為:y = "

<< a <<

" + "

<< b <<

"x "

<< endl;

return0;

}

用程式語言程式設計實現以下演算法:

(1) 用復化梯形公式 的自動控制誤差演算法求積分 。

(2) romberg積分演算法求積分 。

#include

#define max 20

using

namespace std;

//測試函式

doublef(

double x)

//復合梯形公式

double

trapz

(double a,

double b,

int n,

double

(*f)

(double x)

) out *

= h;

return out;

}//remberg演算法

double

remberg

(double a,

double b,

int n,

double

(*f)

(double x));

temp[0]

[0]=

trapz

(a, b,

1, f)

;for

(int k =

1; k <= n; k++

) p = p * hlast /2;

temp[k]

[m]= temp[k -1]

[m]/

2+ p;

}else

cout << temp[k]

[m]<<

"\t";}

cout << endl;

}return temp[n]

[n];

}int

main()

本章學習了數值積分的演算法,在計算一些無法通過直接計算來求解的函式積分時,來實現各種近似積分的方法,包含插值型求積公式、newton-cotes公式、復合梯形公式、復合simpson公式,以及romberg演算法等。在運用計算機求解積分時的技巧和方法。在掌握這些東西的時候雖然難以理解,但這些東西都包含數學的魅力。

用程式語言程式設計實現以下演算法:

(1) 用改進的尤拉(euler)公式求解常微分方程初值問題。

(2) 用四階龍格-庫塔(runge-kutta)方法求解常微分方程初值問題。

#include

using

namespace std;

//導數

double

f_xy

(double x,

double y)

//尤拉演算法

double

euler

(double x0,

double y0,

double h,

double xn,

double

(*f)

(double x,

double y)

)return ynext;

}//龍格庫塔演算法

double

rungekutta

(double x0,

double y0,

double h,

double xn,

double

(*test)

(double x,

double y)

)return ynext;

}int

main()

本章學習的是微分方程的近似解法,已知初值(x0,y0),和求積函式,求解xn時yn的近似值,問題是對於不能直接通過計算得出結果計算式子。總體思想就是求曲線的積分,求面積來代替求解,然後使用微分法,離散化成乙個乙個區域求面積,所有面積的和就是yn,每個面積用長方形代替長取區域長度,寬取區域左端點求的方法交尤拉演算法(euler),取右端點的叫隱式尤拉演算法,取中點的叫中點尤拉格式,用梯形計算區域面積的叫梯形格式,由於右端點未知,用尤拉演算法先求出來,再用梯形公式校正,就是改進的尤拉演算法。龍格庫塔演算法就是在區域內取幾個點,把對應的y加權求平均作為長方形的高。求解。

用程式語言程式設計實現以下演算法:

(1) 用二分法求 的根。

(2) 用牛頓(newton)迭代法求 在 附近的根。

(3) 用弦截法求 的根。

#include

#define max 1000

using

namespace std;

//求解函式

doublef(

double x)

//導函式

doublefl(

double x)

//二分法

double

dichotomy

(double a,

double b,

double precision,

double

(*f)

(double x)

)elseif(

f(a)*f

(temp)

<0)

else}}

}//newton迭代法

double

newton

(double x0,

double precision,

double

(*f)

(double x)

,double

(*fl)

(double x)

)return

null;}

//弦切法

double

stringcut

(double x0,

double x1,

double precision,

double

(*f)

(double x)

)return

null;}

intmain()

實現計算機

實現乙個計算器 實現兩個運算元 小數和整數均可 的加 減 乘 除 清零操作。1.加法運算 2.減法運算 3.乘法運算 4.除法運算 64 16 4 using system using system.collections.generic using system.componentmodel us...

C 實驗將計算機加入域

using system using system.collections.generic using system.componentmodel using system.data using system.diagnostics using system.directoryservices us...

計算機啟動分析

計算機的啟動一般分為四個階段 bios程式為開機自檢程式,是固化在rom晶元中。正如其英文表達意思,basic input output system 基本輸入輸出系統 當控制權轉移到優先順序第一的儲存裝置上後,計算機會讀取該裝置的第乙個扇區,即最前面512個位元組。觀察512個位元組中最後2個位元...