佛科院數值分析實驗
實驗一 larange插值
很簡單,隨便寫了
#include <iostream> #include <stdio.h> #include <cstdio> using namespace std; int main() { float l[10],x[10],xx,y[10],sum; //這裡要用浮點型儲存。 int n,i,j; cout<<"請輸入已知點的個數"<<endl; cin>>n; cout<<"請輸入要計算的點的數值(x)"<<endl; cin>>xx; cout<<"已知的點(x)和(y)"<<endl; for(i=0;i<n;i++) { l[i]=1.0; //賦初值,不然的話會錯錯的 } for(i=0;i<n;i++) cin>>x[i]>>y[i]; //輸入,沒什麼好說的 for(j=0;j<n;j++) { for(i=0;i<n;i++) { if(i==j) { i++; //因為x[j]不能等於x[i],小學生都知道的事情。所以遇到i=j的情況就i++好了。 } l[j]=l[j]*((xx-x[i])/(x[j]-x[i])); //按照指導書的公式敲成程式碼,用兩重迴圈就可以了。 } } sum=0.0; //迭代前賦初值 for(i=0;i<n;i++) sum=sum+l[i]*y[i]; //公式,沒什麼好說的 printf("%f\n",sum); return 0; }
測試資料
3
11.5
11 0.190809
12 0.207912
13 0.224951
答案:0.199368
2.Newton
#include <iostream> #include <stdio.h> #include <cstdio> using namespace std; int main() { float l[10],xx,a[10][10],sum,ca[10]; int n,i,j,k; cout<<"請輸入已知點的個數"<<endl; cin>>n; cout<<"請輸入要計算的點的數值(x)"<<endl; cin>>xx; cout<<"已知的點(x)和(y)"<<endl; for(i=1;i<=n;i++) { for(j=1;j<=2;j++) { cin>>a[i][j]; //我這裡用二維陣列來存目的是為了打出差商表 } } ca[0]=1; for(i=0;i<n;i++) { ca[i+1]=ca[i]*(xx-a[i+1][1]); //這裡就是(x-x0)*(x-x1)....(x-xn)的意思 } for(j=3;j<=n+1;j++) { k=1; for(i=j-1;i<=n;i++) { a[i][j]=(a[i][j-1]-a[i-1][j-1])/(a[i][1]-a[k][1]); //打差商表,推導過程很簡單。用上幾組資料找出規律就好了 k++; } } for(i=1;i<=n;i++) { l[i]=a[i][i+1]; //把f(x0),f(x1)....賦予l[i] } sum=l[1]; for(i=1;i<n;i++) { sum=sum+ca[i]*l[i+1]; //最後加起來得出答案 } printf("%f\n",sum); return 0; }
樓主在做這題的時候參考了老師的PPt ch01第36頁,擦。這組資料用3來計算答案是50.但是,老師的PPT 有錯,這裡錯了。所以答案是52.
這組資料答案是52.
4
3
-2 17
0 1
1 2
2 17
實驗測試資料
4
0.596
0.4 0.41075
0.55 0.57815
0.65 0.69675
0.80 0.88811
答案:0.63194.
實驗三
1.二分法
按上面的變成程式碼就可以了,沒什麼好說的
#include <cstdio> #include <algorithm> #include <iostream> #include <string.h> #include <cstring> #include <cmath> #include <math.h> using namespace std; double f(double x) { return x*x*x-x-1; //函式 } int main() { double a=1.0,b=1.5,x,e=0.00001; if(f(a)*f(b)<0) { while(fabs(a-b)>e) { x=(a+b)/2; if(fabs(f(x))<e) { break; } else { if(f(a)*f(x)<0) { b=x; } else if(f(x)*f(b)<0) { a=x; } } } x=(a+b)/2; printf("%0.5lf\n",x); } return 0; }
答案:1.32472 如果是精確到小數點後兩位那麼就是1.32
可是。你大爺 你的答案居然是就算是精確到後兩位也沒有差上0.002吧!無語了,什麼答案。有圖為證,答案錯了。就是這樣。
2.牛頓迭代法
這題很簡單,隨便寫了,過程很簡單。
沒心情去弄成通用的了。如果你想弄也很簡單的。
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
double f(double x)
{
return x*x*x+x*x-3*x-3;
}
double f1(double x)
{
return 3*x*x+2*x-3;
}
int main()
{
int m,N;
double x,xx,n,e;
cout<<"請輸入初值"<<endl;
cin>>x;
cout<<"請輸入根的容許誤差"<<endl;
cin>>e;
cout<<"請輸入|f(x)|的容許誤差"<<endl;
cin>>n;
cout<<"請輸入迭代次數的容許值"<<endl;
cin>>N;
m=0;
while(f1(x)!=0 || m<=N)
{
xx=x-f(x)/f1(x);
if(fabs(xx-x)==e || f(xx)<n)
{
printf("%0.6lf\n",xx);
break;
}
x=xx;
m++;
}
return 0;
}
答案:1.732051
後續更新
福利
相關推薦
佛科院數值分析實驗
實驗一 larange插值 很簡單,隨便寫了 #include <iostream> #include <stdio.h> #include <cstdio> u
數值分析實驗一(線性方程組的求解 基於matlab實現)
Jacobi Method The Jacobi Method is a form of fixed-point iteration. Let D denote the main diagonal of A, L denote the lower triangle of A (
數值分析實驗報告 Lab1 誤差的影響
數值分析實驗報告 Lab1 誤差的影響 一、問題引出 (一)問題例項: 利用 n n n
數值分析實驗報告 Lab2 埃爾米特(Hermite)插值
數值分析實驗報告 Lab2 埃爾米特(Hermite)插值 一、問題引出 掌握埃爾米特插值演算法原理; 使用C語言程式設計實現埃爾米特插值演算法。 二、實驗準備 閱讀《數值分析》——李慶陽 2.4節 三、實驗要求 問題: 某人從甲
數值分析實驗:Hermite插值
文章目錄 1 題目 2 c++程式碼實現 2.0 程式目錄 2.1 虛擬碼 2.2 main.cpp 2.3 Hermite_Interpolation.h 2.4 input.txt 2.5 outpu
數值分析實驗:誤差的影響
文章目錄 1 題目 2 c++程式碼實現 2.0 程式目錄 2.1 虛擬碼 2.2 main.cpp 2.3 func.h 2.4 input.txt 2.5 output.txt 3 難點
PAI文本分析實驗:常用文本分析組件及案例實戰
lob 機器 src style 分詞 pla 實驗 阿裏 pagerank 上一篇介紹了PAI以及機器學習相關的一點知識,沒有深入算法原理,只是從使用角度出發熟悉了操作流程,後面隨著學習的深入,我也會對算法原理做一個詳細的闡述。這次我們還是繼續實戰,認識機器學習在文本分析
數值分析習題
帶來 using printf 代碼 二分 typedef color code tdi Q1(hdu6209): 給出常數k,欲用類似二分搜索的叠代策略,求解方程k^2=x^3分母不超過100000的最近似的解的最簡分數形式。 分析:這是一個很直觀方程求數
數值分析
... span bubuko img 分享 med 什麽 thml 加減 Preface: 應試教會了我們要好好學習,或者對於我這樣的學渣來說,不得不學習,但終歸還是學到了一些東(tao)西(lu),但考完感覺空空的,想反思和總結下所學所得,為一些不為什麽而留下一些有趣
思科-OSPF多區域實驗
image 51cto router-id 技術 分享 技術分享 man spf router 實驗名稱:思科OSPF多區域實驗實驗拓撲: 實驗目的:通過OSPF技術實現router1到router6之間的互通訪問 配置思路:1配置非骨幹區域的OSPF2配置骨幹區域的OSP
思科單臂路由實驗配置,實現跨vlan通訊
單臂路由 思科單臂路由 配置參數如圖:PC1 vlan 20 20.1.1.1 網關20.1.1.254PC2 vlan 30 20.1.1.1 網關30.1.1.254PC3 vlan 40 40.1.1.1 網關40.1.1.254R1配置以下3個子接口地址:g0/0.1 20.1.1.254g0
基於數值分析思想對多項式求值的原理和應用進行探究
數值分析 use com 相加 emp 要花 class RoCE size 摘要:多項式是由多個單項(符號項如:5x或者常數項4)通過四則運算組合起來的式子,如P(x)=2x^4+3x^3-3x^2+5x-1 一般的求解會將特定的x代入到上式中,一個一個的計算,共需要
數值分析(三):C++實現線性方程組的高斯-賽德爾迭代法
線性方程組的直接解法之後,就輪到迭代解法了,直接解法針對的是低階稠密矩陣,資料量較少,而工程上有更多的是高階係數矩陣,使用迭代法效率更高,佔用的空間較小。 迭代法的最基本思想就是由初始條件,比如說初始解向量隨便列舉一個,就0向量也行,然後進行迭代,k到k+1,一步一步從k=1開始去逼近真實解
數值分析(二):C++實現三對角線方程組的追趕法
這次來實現三對角線方程組的追趕法,追趕法的本質還是高斯消元法,而且是沒選主元的高斯消元法,只是因為Ax=b中係數矩陣A非常特殊,所以就可以採用相對特殊的方法來解方程組。同樣,按照常規的步驟,先分析什麼是追趕法,再給出追趕法的數學步驟,最後用C++實現這種演算法。 (一)追趕法的功能和步驟 明
數值分析 最小二乘 matlab
1. 已知函式在下列各點的值為 -1 -0.75 -0.5 0 0.25 0.5 0.75
數值分析中的高斯—塞德爾迭代演算法
本例是用java語言實現的,適合於學習數值分析課程的同學借鑑; package c; import java.util.Scanner; public class Demo { public static void main(String []args) {
利用MATLAB解決數值分析的問題
下載連結為https://download.csdn.net/download/weixin_43429936/10776875 **數值分析有種各種的演算法,用於解決各種各樣的方程問題。整理了幾乎涵蓋所有解決方法的參考程式,**如圖: 下載連結為https://download.csdn
數值分析中對有效數字的定義
定義: 設數x是數x的近似值,如果x的絕對誤差限是它的某一數位的半個單位,並且從x左起第一個非零數字到該數位共有n位,則稱這n個數字為x的有效數字,也稱用x近似x時具有n位有效數字。 看幾個例題 (1) (2) (3) (4) 總結 動筆計算就好,用近似值減
數值分析(中文版.原書第2版)-[美]TimothySauer
vpd ffffff sha 鏈接 ado .com water blog shadow 數值分析(中文版.原書第2版)-[美]Timothy Sauer華章數學譯叢54,2014年的版本鏈接:https://pan.baidu.com/s/1abs_1BqVjpKhBzY
《數值分析(第5版+第4版)李慶揚》PDF+同步輔導和習題全解PDF
數值分析 follow water color sha text ESS log tex 資源鏈接:https://pan.baidu.com/s/1y_qUnpo_XTe67jr8162zeA整理了4本數值分析相關的經典書籍:《數值分析(第5版)李慶揚》《數值分析(第4版