綜合說明:
在寫這次實驗的時候,程式的圖形方式選用的是sdl圖形庫,關於sdl圖形庫的使用,可以網上查詢相關資料,對於一般的2d圖形顯示還是很簡單好上手的。2.vs2012程式不能再xp系統上執行:這些實驗的**我都發在了github:
也遇到一些問題,我也分享一下解決辦法:
1.配置完的sdl專案顯示控制台:
需要在專案屬性-配置屬性-鏈結器-系統 選項卡中把子系統設定為控制台。
首先需要對vs2012打上最新的補丁。訪問選擇vs2012更新x(目前是5).但是這樣往往還不夠,可能在xp執行的時侯還會出現缺少msvcp110.dll的問題。
這就需要安裝vs2012的執行庫
3.除錯時候遇到程式相對路徑不正確的問題4.sdl 滑鼠滾輪使用解決方法是在專案屬性-配置屬性-除錯-工作目錄 選擇生成的程式根目錄
這裡貼一段**大概就明白了。1.lagrange插值多項式當y值大於0時表示滾輪向上滾動,小於0表示滾輪向下滾動。while(sdl_pollevent(&event))
else if (event.type == sdl_mousemotion)
}else if (event.type == sdl_mousebuttondown)
else}}
else if (event.type == sdl_mousebuttonup)
}else if (event.type == sdl_mousewheel)
else if (event.wheel.y < 0)}}
公式:2.newton插值多項式關鍵演算法:
其中陣列x,y就是測試資料double lagrange_n(double xx);
double y = ;
return lagrange(13,x,y,xx);
}double lagrange(int n,double *x,double *y,double xx)
addresult += y[k] * mulresult;
} return addresult;
}
運算結果:
所畫函式就是ln(x),紅點就是測試資料。可能看不清。
公式:其中f[x0,x1,....xn]為差商公式
差商(difference quotient)的定義:
函式f(x)在兩個互異點xi,xj處的一階差商定義為:
f[xi,xj]=[f(xi)-f(xj)]/(xi-xj)=(yi-yj)/(xi-xj)
一階差商的差商稱為函式f(x)在xi,xj,xk(i,j,k互異)點的二階差商:
f[xi,xj,xk]=/(xi-xk)
一般的,k-1階差商的差商稱為函式f(x)在n+1個互異點x0,x1,...,xk上的k階差商:
f[x0,x1,...,xk]=/(x0-xk)
特別的,規定零階差商f[xk]=f(xk)=yk
我們使用遞迴來定義它。
計算結果:對於差商演算法,只使用遞迴會導致效率極低。經過分析發現,差商計算過程中有很多中間步驟是重複計算的,於是使用陣列來臨時儲存計算結果,來對其優化。效果很不錯。double newton_n(double xx);
double y = ;
for (int i = 0;i < 13;i ++)
} return newton(13,x,y,xx);}/*
原本效率較低
優化001:
陣列儲存臨時內容,減少重複計算
*/double diffquotient(double *x,double *y,int xstart,int xx)
else
else if (xx == 0)
else }}
double newton(int n,double *x,double *y,double xx)
result += anresult;
} return result;
}
3.hermite插值多項式
公式:演算法:
運算結果:double hermite_n(double xx);
double y = ;
double m = ;
return hermite(10,x,y,m,xx);
}double hermite(int n,double *x,double *y,double *m,double xx)
double ljs = 0;
for (int k = 0;k < n;k ++)
double aj;
aj = (1 - 2 * (xx - x[j]) * ljs) * lj * lj;
double bj;
bj = (xx - x[j]) * lj * lj;
result += y[j] * aj + m[j] * bj;
} return result;
}
數值分析實驗二 數值積分
1 2 include include using namespace std double f double x return pow x,2 int main double a,b,e int n cin a b e cin n double h b a n double x 1000 x 0 ...
數值分析實驗 二 之數值積分與微分
1 用復化梯形公式的自動控制誤差演算法求積分。2 romberg積分演算法求積分。復化梯形公式 sy2 1.m檔案 myint 0,1,100 fun1.m檔案 function f fun1 x if x 0 x 1 f 1 else f sin x x endmyint,m檔案 function...
Python數值分析實驗 近似與求根
print 第一種方法 第二種方法 二分法 x0 初始值,sigma 容許誤差 n 迭代上限 x0 1.5 sigma math.pow 10,6 n 1000 def binary split x0,sigma,n a,b 為求根區間上下界 count為迭代次數計數器 a math.floor x...