使用最速梯度法和牛頓法實現開方運算的數值求解

2021-10-01 19:23:38 字數 1526 閱讀 4425

這邊預設步長為:0.005。後期需完善

/*

/*本例程用於實現開方運算的迭代求解

分別使用最速梯度法和牛頓法

x = exp(a)

x* = argmin = argmin

f'(x) = 4*x^3-4*a*x

f''(x) = 12*x^2-4*a

*/#include

#include

#include

using

namespace std;

const

double er =

0.0001

;double

descentmethod

(const

double&,

const

double&,

int&k)

;double

newtonmwthod

(const

double&,

const

double&,

int&k)

;int

main

(int argc,

char

** ar**)

int k1,k2;

double r1 =

descentmethod

(a,b,k1)

;// double r2 = newtonmwthod(a,b,k2);

cout <<

"使用最速梯度法求得解為;"

<< r1 << endl;

cout <<

"最速梯度法迭代的次數為:"

<< k1 <<

"次"<< endl;

// cout << "#################################" << endl;

// cout << "使用牛頓法求得的解為:" << r2 << endl;

// cout << "牛頓法迭代的次數為:" << k2 << "次" << endl;

system

("pause");

return0;

}double

descentmethod

(const

double

&a,const

double

&b,int

&k)return xk;

}double

newtonmwthod

(const

double

&a,const

double

&b,int

&k)return xk;

}

請輸入需要開放操作的數值:14

請輸入它的近似整數:4

使用最速梯度法求得解為;3.74166

最速梯度法迭代的次數為:16次

牛頓法不能收斂,並且使用最速梯度法,對於數值較小尚可計算,數值一大,也不容易收斂。

梯度下降,牛頓法 ,高斯牛頓法

出處 線性最小二乘問題,我們可以通過理論推導可以得到其解析解,但是對於非線性最小二乘問題,則需要依賴迭代優化的方法,梯度下降主要是從一階目標函式的一階導推導而來的,形象點說,就是每次朝著當前梯度最大的方向收斂 二牛頓法是二階收斂,每次考慮收斂方向的時候,還會考慮下一次的收斂的方向是否是最大 也就是梯...

python實現梯度法 python最速下降法

更多程式設計教程請到 菜鳥教程 高州陽光論壇 人人影視 假設我們已經知道梯度法 最速下降法的原理。現給出乙個算例 如果人工直接求解 現給出python求解過程 import numpy as np from sympy import import math import matplotlib.pyp...

python實現梯度法 python最速下降法

假設我們已經知道梯度法 最速下降法的原理。現給出乙個算例 如果人工直接求解 現給出python求解過程 imwww.cppcns.comport numpy as np from sympy import import math import matpllvoifjipiotlib.pyplot a...