Comments · 11 五個基本的求根演算法Five Root-finding Algorithms · 6.4 非线性方程求解 与函数极值计算. ... <看更多>
非線性方程式求解 在 Chapter 9 非线性方程组求解{nonlinear equations} 的推薦與評價
Chapter 9 非线性方程组求解{nonlinear equations} ... 可微的话,在点x 的雅可比矩阵即为该函数在该点的最佳线性逼近,也代表雅可比矩阵是单变数实数函数的微分在向量 ... ... <看更多>
非線性方程式求解 在 非線性方程 的推薦與評價
非線性方程 · 直接方法:此方法直接以有限的步數給出所有根的精確值。 · 間接或迭代方法:迭代方法最適合計算機程式來求解方程。它基於逐次逼近的概念。在 ... ... <看更多>
非線性方程式求解 在 請教matlab 非線性聯立方程式的問題 的推薦與評價
小弟正在做數值分析,需要跑非線性聯立方程式,方程如下:θ m/p=σβ x/(1+μ)+(1-σ)θβ ... 如果fsolve是由對角化矩陣(dimension=n*n)求解, 似乎合理. ... <看更多>
非線性方程式求解 在 Re: [問題] 請問一個數值分析問題- 看板C_and_CPP 的推薦與評價
※ 引述《htonton (東)》之銘言:
: 問題(Question):
: 一個方程式f(x)=x^4-9x^3-2x^2+120x-130
上網先找 "數值分析 非線性方程式"
目前我所知道的方法大概有
二分法、定點回路法、牛頓法、割線法
比較好用、常用的我認為是二分法、牛頓法
: 要用f(a)*f(b)<0 的方式逼出解
這就叫勘根定理,大概是在講下面的東西
※ f(x) 於 (a,b) 恰有一解,則 f(a) * f(b) < 0
其中的 "恰有一解" 是很重要的觀念,如果有 "二個解","三個解" 的話,
這定理 f(a) * f(b) < 「未必成立」
: .... 略
: 1.我不知道怎麼找四個解
: 2.根本不能用阿orz
你不知道怎麼找不代表不能用
: 拜託各位大大幫我進入程式語言的世界
這問題實屬「數值分析」方面之問題,C/C++ 學完基本的
基本輸出入、資料型態、流程控制、回圈判斷 的確可以「勉強」進入
不過比較建議先把 C/C++ 練熟再探討會好些
------------
非線性方程式求解步驟時,「通常」會有四個一定要設的參數
1. X_LOW -> 求解之最小值
2. X_UP -> 求解之最大值
3. X_STEP-> 每次步進值
4. EPS -> 容許最小誤差
其中 1~3 是套用在 勘根定理上,寫起來像這樣
#define X_LOW (double)(-100)
#define X_UP (double)(100)
#define X_STEP (double)(1.0)
double func(double x){
// your function
double x2=x*x, x3=x*x2, x4=x2*x2; // Horner rule to turbo
return x4 - 9*x3 - 2*x2 + 120*x - 130;
}
for(double i=X_LOW; i<=X_UP; i+=X_STEP) {
if( func(i) * func(i+X_STEP) <= 0.0) { // 用勘根定理判斷有無解
// 代表在 X_LOW 至 X_LOW + X_STEP 之間有一組解
// 再用所謂的二分法、牛頓法... etc 去詳細求這組解的正確是位在哪
}
}
至於 EPS 即為題意中的 "最小誤差為 0.00001",
這部份真要懂的話還是要去精華區看浮點數誤差等相關問題。
另從 po 上來的程式碼,判斷應為「二分法」。
比較建議去借閱數值分析的書回來 K, 專門用C 語言寫數值分析的書也很多,
這部份各家也說明很詳細。
如果只是要參考程式碼、不想了解背後原理的話,可到下述網址
https://edisonx.pixnet.net/blog/category/1783618
聲明,沒寫得很漂亮,如果沒有函式指標概念的話應該也看不懂
--
YouLoveMe() ? LetItBe() : LetMeFree();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.76.142
※ 編輯: tropical72 來自: 180.177.76.142 (03/14 17:23)
... <看更多>