/*
B4ゼミ: ホモトピー法
次の非線形方程式の海を、ホモトピー法を用いて近似的に求めよ。
f(x) = x^3 + x - 1 = 0
但し、g(x) = x, H(x,t) = (1-t) g(x) + t f(x)
Hint: 連続法で、「tを0.2刻みで予測子を出し、修正するためにニュートン法を行う」
これを0から1まで5回行う。
*/
fn main() {
println!("");
let mut x:f64 = 0.0;//初期値
let expected_deviation:f64 = 0.01;//期待する精度
// steps
for i in 0..=5 {
let t = (i as f64/ 5.0) as f64;
let mut loop_counter = 0;
println!("====step {}===",i);
loop {
loop_counter += 1;
let x2 = x - (t * x * x * x + x - t)/(3.0 * t * x * x + 1.0);
println!("value calculating: {}",x2);
//期待する誤差以下になれば終了
if (x2 - x).abs() <= expected_deviation {
println!("value: {}",x);
break;
}else {
x = x2;
}
}
println!("t: {}, x: {} loop:{}\n",t,x,loop_counter);
}
}