1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/chfenger-goNum

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
SimpleIterateAitken.go 2.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Black Ghost Отправлено 01.03.2019 05:13 e9ac846
// SimpleIterateAitken
/*
------------------------------------------------------
作者 : Black Ghost
日期 : 2018-11-01
版本 : 0.0.0
------------------------------------------------------
简单迭代求解类x=g(x)方程的解 xn+1=g(xn)
理论:
1. g(x)在区间[a, b]可导;
2. 当xE[a, b],g(x)E[a, b];
3. 对于任意xE[a, b],|g‘(x)| <= L < 1
线性收敛
则求解所得的根xn与真实根xr的的误差:
L^n
|xn-xr| <= ----- |x1-x0|
1-L
Aitken boost method
xn1 = g(xn)
xn2 = g(xn1)
xn2*xn - xn1^2
xn1 = ------------------ (n = 0, 1, 2,...)
xn2 - 2*xn1 + xn
------------------------------------------------------
输入 :
fn g(x)函数,定义为等式右侧部分,左侧为x
a, b 求解区间
c 求解初值
N 步数上限
tol 误差上限
输出 :
sol 解值
err 解出标志:false-未解出或达到步数上限;
true-全部解出
------------------------------------------------------
*/
package goNum
import (
"math"
)
// SimpleIterateAitken 简单迭代求解类x=g(x)方程的解 xn+1=g(xn)
func SimpleIterateAitken(fn func(float64) float64, a, b, c float64,
N int, tol float64) (float64, bool) {
/*
简单迭代求解类x=g(x)方程的解 xn+1=g(xn)
输入 :
fn g(x)函数,定义为等式右侧部分,左侧为x
a, b 求解区间
c 求解初值
N 步数上限
tol 误差上限
输出 :
sol 解值
err 解出标志:false-未解出或达到步数上限;
true-全部解出
*/
var sol, n2 float64
var err bool = false
// 判断端点和初值是否为所求之解
switch {
case math.Abs(fn(a)-a) < tol:
sol = a
err = true
return sol, err
case math.Abs(fn(b)-b) < tol:
sol = b
err = true
return sol, err
case math.Abs(fn(c)-c) < tol:
sol = c
err = true
return sol, err
}
//求解
sol = fn(c)
n2 = fn(sol)
sol = (n2*c - sol*sol) / (n2 - 2.0*sol + c)
for i := 0; i < N; i++ {
if (math.Abs(sol - c)) < tol {
err = true
return sol, err
}
c = sol
sol = fn(c)
n2 = fn(sol)
sol = (n2*c - sol*sol) / (n2 - 2.0*sol + c)
}
return sol, err
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/chfenger-goNum.git
git@api.gitlife.ru:oschina-mirror/chfenger-goNum.git
oschina-mirror
chfenger-goNum
chfenger-goNum
master