计算方法实验:方程求根二分法、不动点迭代法、牛顿法

article/2025/9/14 23:44:10

计算方法实验一,方程求根

分别用Matlab和C写了一下,初学Matlab,如有不足还请指正。

实验内容:
1)在区间[0,1]内用二分法求方程 e x + 10 ∗ x − 2 e^x+10*x-2 ex+10x2的近似根,要求误差不超过 0.5 × 1 0 − 3 0.5\times10^{-3} 0.5×103
2)取初值 x 0 = 0 x_0=0 x0=0,用迭代公式 x k + 1 = 2 − e x k 10 , ( k = 0 , 1 , 2 , . . . ) x_{k+1}=\frac{2-e^{x_k}}{10},(k=0,1,2,...) xk+1=102exk,(k=0,1,2,...)求方程 e x + 10 ∗ x − 2 e^x+10*x-2 ex+10x2的近似根,要求误差不超过 0.5 × 1 0 − 3 0.5\times10^{-3} 0.5×103
3)取初值 x 0 = 0 x_0=0 x0=0,用牛顿迭代法求方程 e x + 10 ∗ x − 2 e^x+10*x-2 ex+10x2的近似根,要求误差不超过 0.5 × 1 0 − 3 0.5\times10^{-3} 0.5×103
牛顿迭代公式: x k + 1 = x k − f ( x k ) f ′ ( x k ) x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)} xk+1=xkf(xk)f(xk)

1. C

#include <stdio.h>
#include <Windows.h>
#include <math.h>#define WUCHA (0.5*pow(10, -4))double f_x(double x);
double erfenfa();
double diedai();
double newtown();int cnt = 0;int main()
{// 二分法printf("二分法:%lf\n", erfenfa());printf("计算次数%d\n", cnt);// 迭代法printf("迭代法:%lf\n", diedai());printf("计算次数%d\n", cnt);// 牛顿法printf("牛顿法:%lf\n", newtown());printf("计算次数%d\n", cnt);system("pause");return 0;
}// f(x)
double f_x(double x)
{return (exp(x) + 10 * x - 2);
}// f'(x)
double fd_x(double x)
{return (exp(x) + 10);
}// 牛顿法
double newtown()
{cnt = 0;double x0 = 0.0;double ret = f_x(x0);double xk = x0 - f_x(x0) / fd_x(x0);for (int k = 0; ; k++){cnt++;if (fabs(ret - 0) <= WUCHA){break;}xk = xk - f_x(xk) / fd_x(xk);ret = f_x(xk);}return xk;
}// 迭代法
double diedai()
{cnt = 0;double x0 = 0.0;double ret = f_x(x0);double xk = x0;//int k = 0;for (int k = 0; ; k++){cnt++;if (fabs(ret - 0) <= WUCHA){break;}xk = ((2 - exp(xk)) / 10);ret = f_x(xk);}return xk;
}// 二分法
double erfenfa()
{cnt = 0;double left = 0.0;double right = 0.1;double x = (left + right) / 2;double ret = f_x(x);while (fabs(ret - 0) >= WUCHA){cnt++;if (ret > 0){right = x;}if (ret < 0){left = x;}x = (left + right) / 2;ret = f_x(x);}return x;
}

分界线


2. Matlab

2.1 二分法

function x = erfen(f,a,b,e)
% f是函数名 a,b是区间端点,e为精度
fa = feval(f,a); % feval是求函数值
fb = feval(f,b);
if fa*fb>0error('此函数在[%d,%d]区间无解',a,b);
endk = 0;
x = (a+b)/2;
while(b-a)>(2*e)fx=feval(f,x);if fa*fx<0b=x;fb=fx;elsea=x;fb=fx;endk=k+1;x=(a+b)/2;fprintf("%d:x=%f\n", k, x);end

2.2 不动点迭代法

function x = diedai(f,diedaif,x0,e)N = 10; %最大迭代次数ret = feval(diedaif,x0);
xk = x0;
k = 0;while abs(x0-ret)>e & k<Nxk = feval(diedaif,xk);ret = feval(diedaif,xk);k = k+1;fprintf("xk=%f\n", xk);%if%    break;%endendif k==Nfprintf('超过最大迭代次数限制\n');end

2.3 牛顿法

function x = newton(f,fd,x0,e)
% f->f(x)
% fd->f'(x)
% x0=0
% e=0.0005N = 100; %最大迭代次数100
x = x0;
x0 = x+2*e;
k = 0;
while abs(x0-x)>e & k<Nk = k+1;x0=x;x=x0-feval(f,x0)/feval(fd,x0);fprintf("x=%f\n", x);
endif k==Nwarning('超过最大迭代次数限制');end

分界线


3.实验结果

3.1 C

C运行结果

3.2 Matlab

二分法
迭代法
牛顿法


EOF,不足之处,还请指正。


http://chatgpt.dhexx.cn/article/X26nhQRZ.shtml

相关文章

MATLAB之牛顿迭代法

MATLAB之牛顿迭代法 一、算法原理 1、迭代公式 将 f (x)在点xk做Taylor展开f(x)f(xk)f’(xk)(x-xk)…&#xff0c;则有 由上式可得牛顿迭代公式为&#xff1a; X&#xff08;k1&#xff09;X(k)- f (X(k))/f’(X(k)) 2、牛顿法的几何意义 由上式可知&#xff0c;如果如果我…

Matlab牛顿迭代法求方程的根(GUI)

牛顿迭代法的具体内容不赘述它的核心算法是&#xff1a; k 1; x x0; x0 x e*2; % 为了让初启动时满足循环条件 while (abs(x-x0))>e && (k<N) % 同时限定误差和最大循环次数x0 x;x x0 - f(x0)/df(x0); % 牛顿迭代法式子k k1; end这是一个非常简单的牛顿…

牛顿迭代法 求 根

这是一个求根很牛皮的一个方法, 迭代几次后精度也变得非常的高了. 假设我们求√2的值, 用牛顿迭代法. 大致过程就是随便选取一个自认为离根比较近的, 离谱点也没事, 假如选x 4, 然后不断进行如下操作: 不断令 x x - f(x)/f’(x); (f(x) x^2 - a(a 2)); 所以就是: x 4 - …

牛顿迭代法求开方-详细且通俗讲解

目录 •写在前面 •前戏-二分法实现 •牛顿迭代法 代码实现 •写在前面 求开方这件事儿&#xff0c;很多时候用一个sqrt方法就搞定了&#xff0c;很少有趣思考这底层的实现到底是用什么方法完成的。正好我遇到了需要实现sqrt方法&#xff0c;这里就仔细的讲解一下如何去实…

【Matlab】牛顿迭代法实现

文章目录 题目&#xff1a;牛顿迭代法程序1&#xff1a;牛顿迭代法通用函数程序2&#xff1a;求最大Delta程序3&#xff1a;观察结果 题目&#xff1a;牛顿迭代法 程序1&#xff1a;牛顿迭代法通用函数 function [x] newton(x0,epsilon,f,print_flag) digits(10) % 控制牛顿…

C语言---牛顿迭代法求根

用牛顿迭代法求下面方程在1.5附近的根&#xff1a;2x3-4x23x60 先定义一个x0,通过x0找出f(x0),做f(x0)的切线&#xff0c;切线的交点为x1&#xff0c;tanxf(x0)/x1-x0;然而切线在函数中就是f(x)的导数&#xff0c;我们利用这一结论可以找出f(x0)和f(x0)的导数之间的关系&#x…

牛顿迭代法(Newton's Method)

简介 牛顿迭代法&#xff08;简称牛顿法&#xff09;由英国著名的数学家牛顿爵士最早提出。但是&#xff0c;这一方法在牛顿生前并未公开发表。 牛顿法的作用是使用迭代的方法来求解函数方程的根。简单地说&#xff0c;牛顿法就是不断求取切线的过程。 对于形如f(x)0的方程&am…

如何通俗易懂地讲解牛顿迭代法?

五次及以上多项式方程没有根式解&#xff08;就是没有像二次方程那样的万能公式&#xff09;&#xff0c;这个是被伽罗瓦用群论做出的最著名的结论。 但是&#xff0c;没有王屠夫难道非得吃带毛猪&#xff1f;工作生活中还是有诸多求解高次方程的真实需求&#xff08;比如行星…

使用“牛顿迭代法”求解方程

使用牛顿迭代法求解方程 尽管通过因式分解和利用求根公式可以很方便的得出多项式方程的根&#xff0c;但大多数时候这个多项式的次数都很高&#xff0c;计算将变得非常复杂&#xff0c;因此&#xff0c;我们必须转向一些近似解法。 牛顿迭代法是其中最好的方法之一。从根本上说…

牛顿迭代法求解方程

说明&#xff1a;该篇博客源于博主的早些时候的一个csdn博客中的一篇&#xff0c;由于近期使用到了&#xff0c;所以再次作一总结。原文地址 概述 牛顿迭代法&#xff08;Newton’s method&#xff09;又称为牛顿-拉夫逊&#xff08;拉弗森&#xff09;方法&#xff08;Newto…

方程求根的迭代法——牛顿迭代法

用牛顿法解方程xe(x) -10 程序流程图如下&#xff1a; //方程求根的迭代法——牛顿迭代法 /*************Analysis********** *1.初值x0,精度e,迭代次数N *2.牛顿法解方程f(x)x*e**x-1 *3.取初值为0.5 ********************************/ #include<iostream> #include&…

牛顿迭代法

转自 LeetCode 解答 一篇解释得很细的文章 牛顿迭代法是一种可以用来快速求解函数零点的方法。 以 LeetCode 上的一题为例&#xff1a;模拟 int sqrt(x) 函数&#xff0c;返回的开方值向下取整。 为了叙述方便&#xff0c;我们用 C 表示待求出平方根的那个整数。显然&#xff…

牛顿迭代法(Newton’s Method)迭代求根的Python程序

迭代法的作用 许多复杂的求解问题&#xff0c;都可以转换成方程f(x)0的求解问题。这一系列的解叫做方程的根。对于非线性方程的求解&#xff0c;在自变量范围内往往有多个解&#xff0c;我们将此变化区域分为多个小的子区间&#xff0c;对每个区间进行分别求解。我们在求解过程…

用牛顿迭代法求方程的根

用牛顿迭代法求方程的根&#xff08;C语言&#xff09; 题目要求&#xff1a;牛顿迭代法是一种重要的基本的求方程根的方法。现有方程为axˆ3bxˆ2cxd0&#xff0c;系数a&#xff0c;b&#xff0c;c&#xff0c;d的值一次为1&#xff0c;2&#xff0c;3&#xff0c;4&#xff…

【源码】牛顿迭代法求根的matlab实现

牛顿迭代法求根的matlab实现 本篇是在课程学习中自己编程实现的牛顿迭代法计算非线性方程或者超越方程近似根的算法&#xff0c;写一下&#xff0c;后边便于复习和期末课程设计引用。 牛顿迭代法本质上是一种特殊的不动点迭代&#xff0c;只不过它的迭代函数的构造比较特殊&am…

牛顿迭代法求方程的根

牛顿迭代法&#xff08;牛顿-拉弗森方法&#xff09; 五次及以上多项式方程没有根式解&#xff08;就是没有像二次方程那样的万能公式&#xff09;&#xff0c;这个是被伽罗瓦用群论做出的最著名的结论。没有根式解不意味着方程解不出来&#xff0c;数学家也提供了很多方法&am…

非线性方程求根——牛顿迭代法

一、牛顿法 1.实质&#xff1a;牛顿法实质上是一种线性方法&#xff0c;其基本思想是将非线性方程f(x)0逐步归结为某种线性方程来解。 2.牛顿法公式&#xff1a; 已知方程f(x)0有近似解xk,假设&#xff0c;将f(x)在点xk泰勒展开&#xff0c;有则方程f(x)0可近似表示为&#…

C语言每日一练——第154天:牛顿迭代法求方程根

&#x1f31f; 前言 Wassup guys&#xff0c;我是Edison &#x1f60e; 今天是C语言每日一练&#xff0c;第154天&#xff01; Let’s get it&#xff01; 文章目录 1. 问题描述2. 题目分析3. 算法设计4. 确定程序框架5. 迭代法求方程根6. 代码实现 1. 问题描述 编写用牛顿迭…

前端骨架屏终极方案——骨架图

骨架图代替骨架屏。用图片代替骨架屏&#xff01;&#xff01;&#xff01; 主要还没尝试过自动生成方案&#xff0c;手工写感觉太麻烦&#xff08;美工已经操起了板砖。。。&#xff09; 最简单的实现方式&#xff0c;拿页面的UI效果图&#xff08;或者直接手机截屏&#xf…

element ui修改骨架屏形状

这是element ui的原本形状 这个形状虽然也可以 但有些情况和东西的加载显然不太适合这个形态 确实我们可以这样写 如果你是vue2 则 <div><el-skeleton animated><template slot"template"><el-skeleton-item style "width: 100vw;he…