牛顿法
我们知道解线性方程和二次方程的简单公式及三次四次方程更为复杂的公式。然而对于大于4次的多项式方程不可能有类似的公式。这时候就需要微积分的数值方法来求解我们想要的根了。
牛顿法的解题步骤如下:
- 猜方程 的解的第一个近似值。
- 确定递推公式,并且迭代计算直到得到想要的精度。
以下是一些牛顿法的应用。
求平方根
假设我们想求n的平方根。那么我们需要解方程。
确定, .
步骤1. 估算方程的第一个近似值
步骤2. 估算迭代计算
以下是C++的计算代码:
#include <iostream>
using namespace std;
double sqrt(double n, double precision = 10e-8) {
double x = max(n / 2, n), delta = 0;
while ((delta = x / 2 - n / (2 * x)) > precision) x -= delta;
return x;
}
int main(int argc, const char * argv[]) {
for (int i = 0; i <= 10000; ++i) {
cout << sqrt(i) << endl;
}
return 0;
}
求立方根
如果我们需要求n的立方根,那么这里的, , 我们需要计算递推公式。以下是C++的计算代码:
#include <iostream>
#include <math.h>
using namespace std;
double cubeRoot(double n, double precision = 10e-8) {
double x = max(n / 2, n), delta = 0;
while ((delta = x / 3 - (n / 3) * pow(1 / x, 2)) > precision) x -= delta;
return x;
}
int main(int argc, const char * argv[]) {
for (int i = 0; i <= 10000; ++i) {
cout << cubeRoot(i) << endl;
}
return 0;
}
计算
这里我们利用公式来计算的值。可以确定, , 由于的值大概是3.14,我们可以设定, 递推公式为。
以下是C++的计算代码:
#include <iostream>
#include <math.h>
using namespace std;
double pi() {
double x = 3;
double delta = 0;
while (abs(delta = tan(x) * pow(cos(x), 2)) > 10e-8) {
x -= delta;
}
return x;
}
int main(int argc, const char * argv[]) {
cout << pi() << endl;
return 0;
}
网友评论