1. 程式人生 > >佛科院數值分析實驗

佛科院數值分析實驗

實驗一 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版