算法设计与分析 3.2 牛顿法及改进、迭代法、矩阵谱半径、雅可比迭代、高斯迭代

思考题1

改进cosx?优化算法

复制代码
关键点在于cos计算过于麻烦,而每次都要求sinx的值
故直接简化为cosx的导数 -sinx
即:
原://double daoshu(double x) {
// return 18 * x - cos(x);
//}
改:double daoshu(double x) {
 return 18 * x + sin(x);
}

证明:

思考题2:

cpp 复制代码
c++代码如下:
// 二分法
double bin(double l, double r) {
 double eps = 1e-3; 
 while (r - l > eps) {
 double mid = (l + r) / 2;
 double f = exp(mid) + 10 * mid - 2;
 if (f > 0) {
 r = mid;
 } else {
 l = mid;
 }
 }
 return (l + r) / 2;
}
// 迭代法
double ite() {
 double x = 0;
 double eps = 1e-3; 
 while (1) {
 double x1 = (2 - exp(x)) / 10;
 if (x - x1 > eps) {
 break;
 }
 x = x1;
 }
 return x;
}
// 牛顿法
double new() {
 double x = 0;
 double eps = 1e-3; 
 while (1) {
 double f = exp(x) + 10 * x - 2;
 double df = exp(x) + 10;
 double x1 = f / df;
 if (x1 > eps) {
 break;
 }
 x = x - x1;
 }
 return x;
}

思考题3:

求谱半径?

思考题4:

代码实现:

cpp 复制代码
double Max(vectorx) {
 double max = x[0];
 int n = x.size();
 for (int i = 0; i < n; i++)
 if (x[i] > max) max = x[i];
 return max;
}
void Jacobi(vector<vector > A, vector B, int n) {
 vector X(n, 0); 
 vector Y(n, 0); 
 vector D(n, 0); 
 int k = 0; 
 do {
 X = Y;
 for (int i = 0; i < n; i++) {
 double tem = 0;
 for (int j = 0; j < n; j++) {
 if (i != j) tem += A[i][j] * X[j];
 }
 Y[i] = (B[i] - tem) / A[i][i];
 cout << left << setw(8) << Y[i] << " ";
 }
 cout << endl;
 k++;
 if (k > 100) { 
 return;
 }
for (int a = 0; a < n; a++) {
D[a] = X[a] - Y[a];
}
} while (fabs(Max(D)) > 1e-4);
return;
}
int main() {
 int n;
 cout << "未知数的个数n:";
 cin >> n;
 cout << endl;
 vector<vector>A(n, vector(n, 0));
 vectorB(n, 0);
 cout << "系数矩阵:" << endl;
 for (int i = 0; i < n; i++) {
 for (int j = 0; j < n; j++) {
 cin >> A[i][j];
 }
 }
 cout << endl;
 cout << "值矩阵:" << endl;
 for (int k = 0; k < n; k++) {
 cin >> B[k]; 
 }
 cout << endl;
 cout << "您输入的方程组为:" << endl;
 for (int a = 0; a < n; a++) {
 for (int b = 0; b < n; b++) {
 cout << A[a][b] << " "; 
 }
 cout << " " << B[a] << endl;
 }
 cout << endl;
 cout << "方程组的解:" << endl;
 Jacobi(A, B, n);
 return 0;
}

结果:

思考题5:
.ACM 大赛预测计算名次
甲第一,乙第三。
丙第一,丁第四。
丁第二,甲第三。
都只说对一半
计算名次
代码:

cpp 复制代码
int main()
{
//甲乙丙丁:ABCD
int a,b,c,d;
for(a=1;a<=4;++a)
{
for(b=1;b<=4;++b)
{
if(a!=b)
for(c=1;c<=1;++c)
{
d=10-a-b-c;
if(((a==1)+(b==3)==1)&&( (c==1)+(d==4 )==1)&&((a==3)+(d==2)==1 ) )
{
cout<<"甲:"<<a<<"乙:"<<b<<"丙:"<<c<<"丁:"<<d<<endl;
 break;
}
}
}
}
return 0;
}

结果:

思考题6:

思考题7:

相关推荐
凡人叶枫几秒前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
power 雀儿7 分钟前
掩码(Mask)机制 结合 多头自注意力函数
算法
会叫的恐龙11 分钟前
C++ 核心知识点汇总(第六日)(字符串)
c++·算法·字符串
小糯米60121 分钟前
C++顺序表和vector
开发语言·c++·算法
独望漫天星辰32 分钟前
C++ 多态深度解析:从语法规则到底层实现(附实战验证代码)
开发语言·c++
We་ct42 分钟前
LeetCode 56. 合并区间:区间重叠问题的核心解法与代码解析
前端·算法·leetcode·typescript
Lionel6891 小时前
分步实现 Flutter 鸿蒙轮播图核心功能(搜索框 + 指示灯)
算法·图搜索算法
小妖6661 小时前
js 实现快速排序算法
数据结构·算法·排序算法
xsyaaaan1 小时前
代码随想录Day30动态规划:背包问题二维_背包问题一维_416分割等和子集
算法·动态规划
王老师青少年编程1 小时前
2024年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第3题)
c++·题解·真题·csp·信奥赛·csp-s·提高组