牛顿法是利用函数的线性展开泰勒展开求近似值,如果把函数在xk完成二次泰勒展开并求解得到下一个近似值。

640891082022-10-04 11:39:541条回答

牛顿法是利用函数的线性展开泰勒展开求近似值,如果把函数在xk完成二次泰勒展开并求解得到下一个近似值。
(1)写出一个算法公式实现上述想法;
(2)列出算法可能遇到的问题;
(3)分析算法的收敛性;
(4)编写程序实现以上算法。
课程设计,急!1347377527@qq.com

已提交,审核后显示!提交回复

共1条回复
3691939 共回答了21个问题 | 采纳率85.7%
牛顿迭代公式
  设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'...
1年前

相关推荐

高分悬赏matlab的一道题用牛顿法求解方程x-sinx=0的根再用Steffensen加速收敛
Rock_Roll_N1年前3
郁妖精 共回答了22个问题 | 采纳率86.4%
clear
clc
x=1;
f=@(x)x-sin(x);
df=@(x)1-cos(x);
for k=1:1000
x=x-f(x)/df(x);
if abs(f(x))
数值分析:牛顿法收敛于单根时是______收敛?收敛于重根是______收敛?
数值分析:牛顿法收敛于单根时是______收敛?收敛于重根是______收敛?
单根为二阶收敛,重根为线性收敛.对不?
雨丝风铃1年前1
百慈_dd 共回答了15个问题 | 采纳率93.3%
求单根时,Newton迭代至少二阶收敛;而求重根时,Newton迭代只有一阶收敛.
——抄于欧阳杰版数值分析P40页
应用牛顿法于方程f(x)=x/1-c=0 .给出计算c的倒数而不用除法的一种算法.用此算法算出0.324的倒数,设取初值
应用牛顿法于方程f(x)=x/1-c=0 .给出计算c的倒数而不用除法的一种算法.用此算法算出0.324的倒数,设取初值x=0,要求结果有5位有效数字(给出详细解答)
zerg19800061年前2
zhaodan8888 共回答了22个问题 | 采纳率77.3%
计算x=1/a,即ax = 1,令 f(x) = ax-1
就可以用牛顿法迭代下去了,其中初值应设为接近的1/a数,f'(x)=a
若a = 0.324,取x0=3,迭代方程为 x(k+1) = x(k) - f(x(k))/f'(x(k)) ,h = f(x(k))/f'(x(k))
迭代如下:
1.x(0)=3.000000 f(x)=-0.028000 f'(x)= 0.324000 h =- 0.086420 2.x(1)=3.086420 f(x)=0.000000 f'(x)= 0.324000 h = 0.000000
所以可得x = 1/0.324 = 3.086420
牛顿法解方程是什么、是用来求什么的、说的浅一点.
老咕1年前1
oloser81 共回答了19个问题 | 采纳率94.7%
就是求一个函数的解,或者说一个函数图像和X轴的交点.方法是过某一点作函数的切线,取切点的横坐标再继续作切线,逐渐逼近函数的解.切线的作法要用到导数的知识,不能三言两语说完,自己研究吧.这是目前求任意形式的函数解的最有效方法之一.
求方程f(x)=x3-sinx-12x+1的全部实根,ε=10-6方案3 用牛顿法求解
陈张1年前1
情秋 共回答了23个问题 | 采纳率87%
先判别根区间,
再用牛顿法在各个区间中求解.
f(x)的导数=3x2-cosx-12
得x(k+1)=x(k)-【x(k)3-sinx(k)-12x(k)-1】/【3x(k)2-cosx(k)-12】
然后取不同初值进行迭代 得到解
不能用公式编辑器 只能这样了
还用不懂可发邮件到22121417@163.com
利用牛顿法求方程x3 3x1=0 在x0=2 附近的根,精确到小数点后第3位
lasliesummer1年前1
唯为维维 共回答了17个问题 | 采纳率94.1%
方程不完整,先按减号写了,手算、程序流程都是一样
定义函数
f(x)=x^3-3x-1
f'(x)=3x^2-3
开始计算
x0=2,f1=f(x0),f2=f'(x0)
if (f1>0) x1=x0-f1/f2
else x1=x0+f1/f2
if(abs(x1-x0)>0.001) x1为初值重复计算(程序的话,用for循环,赋值语句为x0=x1)
else x1即为要求的结果
牛顿法 f(x)=2*X1*X2+2*X2-X1^2-2*X2^2
牛顿法 f(x)=2*X1*X2+2*X2-X1^2-2*X2^2
用牛顿法怎么解这个二元二次方程,解一元方程容易,但是解二元方程没搞懂,说下具体思想和算法.
keyi911年前1
站在远处观梅花 共回答了15个问题 | 采纳率93.3%
用牛顿法怎么解这个二元二次方程
分别用牛顿法和弦截法求方程f(x)=(x-1)^3+2(x-1)^2=0 的所有根.
分别用牛顿法和弦截法求方程f(x)=(x-1)^3+2(x-1)^2=0 的所有根.
提示:找到有根区间;利用二分法给出Newton法初值及弦截法的两个初值,比较收敛的速度(2)利用共轭梯度法和最速下降法求解下列方程组,并进行比较.
流溪_河溪1年前1
天讶海蛟 共回答了28个问题 | 采纳率96.4%
第一题
f(x)=(x-1)^3+2(x-1)^2=0
x1=x2=1
x3=-2
第二题
x1=2,
x2=5/3,
x3=4/3
分别用牛顿法和割线法求解方程 x^3-6x^2+9x-2=0在区间[3,4]上的近似根.要求满足精度|x*-xk|
763097951年前1
uu一只不色的狼 共回答了17个问题 | 采纳率94.1%
%
clc; clear all;
global fnq dfnq
fnq = @(x) x^3 - 6*x^2 + 9*x - 2;
dfnq = @(x) 3*x^2 - 12*x + 9;
tol = (1/2)*10^-4;x0 = 3.5;gmax = 1e3;x01 = 3;x02 = 4;[k,xk,yk,piancha]=newtonqx(x0,tol,gmax);
fprintf('n牛顿法:%.5fn',xk);
[k,xk,yk,piancha]=gexian(x01,x02,tol,gmax);
fprintf('n割线法:%.5fn',xk);% 牛顿法
function [k,xk,yk,piancha]=newtonqx(x0,tol,gmax)
global fnq dfnqx(1)=x0;for i=1:gmax
x(i+1)=x(i)-fnq(x(i))/(dfnq(x(i)+eps));
piancha=abs(x(i+1)-x(i));i=i+1;
xk=x(i);yk=fnq(x(i));
[(i-1) xk yk piancha];
if(pianchagmaxdisp('超过最大迭代次数')k=i-1;xk=x(i);yk=fnq(x(i));
[i-1 xk yk piancha];return;end% 割线法function [k,xk,yk,piancha]=gexian(x01,x02,tol,gmax)
global fnq dfnq
x(1)=x01;x(2)=x02;
for i=2:gmax
u(i)=fnq(x(i))*(x(i)-x(i-1));
v(i)=fnq(x(i))-fnq(x(i-1));
x(i+1)=x(i)-u(i)/(v(i));
piancha=abs(x(i+1)-x(i));i=i+1;xk=x(i);yk=fnq(x(i));
if(piancha
梯度法和牛顿法求的最优解是全局最优还是局部最优
wshen51年前1
wijaya 共回答了21个问题 | 采纳率81%
都是局部最优.
事实上,所有的迭代方法得到的都只是局部最优.
牛顿法为什么比最速下降法好
俺们那嘎达1年前2
jsbb 共回答了16个问题 | 采纳率81.3%
因为最速下降法的迭代点在向极小点靠近的过程中走的是曲折路线,易产生锯齿现象,导致每次迭代行进的距离变得越来越小,收敛速度不快.而如果目标函数有连续二阶偏导数,牛顿法可以快速收敛到问题的极小点
如何用Python 和牛顿法解四元一次方程组
如何用Python 和牛顿法解四元一次方程组
我是试图用Sympy这个库来解决问题,却出错了.
from math import *
from pylab import *
#Avoid confict betwwen sympy and math
import sympy as spy
from WoyTools import *
r1=300
r2=1200
r3=800
r31=476.74
r32=1000
r4=800
r5=400
r6=1746.42
r7=600
theta1=pi/2
theta7=pi/2
alfa=float(float(100.02)/180.0*spy.pi)
gama=float(float(28)/180.0*spy.pi)
theta6=float(float(66.371)/180.0*spy.pi)
#set angle velocity of theta2
w1 = float(2*spy.pi)
#set angle acceleration of theta2
a1 = float(0/180.0*spy.pi)
ri=float(180/180.0*spy.pi)
theta5=float(323.13/180.0*spy.pi)
Ax=0
Ay=0
Ex=70
Ey=160
Fx=130
Fy=160
#guess value
theta2=float(float(84.982)/180.0*spy.pi)
theta3=float(float(22.676)/180.0*spy.pi)
theta4=float(float(159.626)/180.0*spy.pi)
theta5=float(float(152.334)/180.0*spy.pi)
time = 1
count=0
for t in arange(0,time+0.1,0.01):
theta1 = w1 * t + 0.5 * a1 * t * t

theta22=spy.Symbol('theta22')
theta33=spy.Symbol('theta33')
theta44=spy.Symbol('theta44')
theta55=spy.Symbol('theta55')

f1=r1*cos(theta1)+r2*spy.cos(theta22)+r31*spy.cos(theta33)*spy.cos(alfa)-r31*spy.sin(theta33)*spy.sin(alfa)+r4*cos(theta44)-r6*cos(theta6)
f2=r1*sin(theta1)+r2*spy.sin(theta22)+r31*spy.sin(theta33)*spy.cos(alfa)+r31*spy.cos(theta33)*spy.sin(alfa)+r4*sin(theta44)-r6*sin(theta6)
f3=r32*spy.cos(theta33)*spy.cos(gama)+r32*spy.sin(theta33)*spy.sin(gama)-r4*cos(theta44)+r5*cos(theta55)+r7
f4=r32*spy.sin(theta33)*spy.cos(gama)-r32*spy.cos(theta33)*spy.sin(gama)-r4*sin(theta44)+r5*sin(theta55)-r6*sin(theta6)

theta2,theta3,theta4,theta5 = spy.nsolve((f1,f2,f3,f4),(theta22,theta33,theta44,theta55),(theta2,theta3,theta4,theta5))
错误提示是在f1那里raise ValueError("Symbolic value, can't compute")
ValueError: Symbolic value, can't compute
有没有其他能用的解牛顿法的库或者如果用Sympy解决这个问题?
Sympy这个库里关于使用牛顿法的语法规则就是要加引号的,我这么写在其他程序里没有问题
zqccn1年前1
kathy1979 共回答了17个问题 | 采纳率100%
比较弱的问一下,你确定不是
'''
theta22=spy.Symbol('theta22')
theta33=spy.Symbol('theta33')
theta44=spy.Symbol('theta44')
theta55=spy.Symbol('theta55')
'''
这段有问题?
多了引号?或者.
z^3-1=0方程怎么解其中z是复数,怎么用牛顿法求解
卡比熊1年前1
teng192 共回答了21个问题 | 采纳率95.2%
这个不用牛顿法直接可以解啊.因式分解就有
(z-1)(z^2+z+1)
=(z-1)(z-w)(z-w^2)
其中z=(-1+根号-3)/2
求方程f(x)=x3-sinx-12x+1的全部实根,ε=10-6.牛顿法
lifangshahu1年前1
幽并游侠儿 共回答了15个问题 | 采纳率86.7%
求方程f(x)=x3-sinx-12x+1的全部实根,ε=10-6.
方案1 用二分法求解;
方案2 用简单迭代法求解;
方案3 用牛顿法求解;
取相同迭代初值,比较各迭代方法的收敛速度.
数值分析(试位法)求一个方程的近似值有二分法(bisection),切割法(secant method),牛顿法(New
数值分析(试位法)
求一个方程的近似值有二分法(bisection),切割法(secant method),牛顿法(Newton's Method),马勒法(Muller's Method)……那请问什么叫试位法(regula falsi)?
.
温迪231年前3
摩尼的护士 共回答了12个问题 | 采纳率91.7%
scau某人好,似乎你的悬赏分太少了.
FalsePosition就是结合bisection与secant两种方法,每次以secant求出分割点,以二分法确定新区间,其中刚刚算出来的分割点必是新区间的一个端点,至于另外一个端点就要由原区间哪个端点与分割点函数值异号来确定.
似乎鄙人文字表达能力有限,
---你的异班同学
就是这样.牛顿法 matlab 求 x^3-x-1=0 在 x=1.5附近的根
就是这样.牛顿法 matlab 求 x^3-x-1=0 在 x=1.5附近的根
还有 ,用二分法求方程x^2-x-1=0 的正根 ,要求精确到小数点后一位 同样 matlab实现
ccnq1年前1
egg841212 共回答了22个问题 | 采纳率86.4%
  %牛顿迭代法 解方程y=x.^3-x-1
  x=1.5;
  format long;
  x1=x-func1_1(x)/func1_1_1(x);
  if(abs(x1)1e-6|abs(func1_1(x))>1e-6)
  x=x1; x1=x-func1_1(x)/func1_1_1(x);
  if(abs(x1)0)
  break;
  end
  x=(a+b)/2;
  fx=func2_1(x);
  if(abs(fx)
编制用牛顿法解非线性方程的通用方程
飘逸似风1年前1
woxiangjia 共回答了23个问题 | 采纳率87%
 求非线性方程(组)零点的一种重要的迭代法,又称牛顿-拉弗森法或切线法.其要点是:若在非线性方程(x)=0的零点x=x*邻域内,函数 (x)连续可微且┡(x)不为零,xn(n=0,1,2,…)是x*的近似值,则在此邻域,用线性函数
近似代替(x),并以T(x)的零点
作为x*的新的近似值.这种通过构造序列x1,x2,…来近似x*的方法就是牛顿法.若(x)是实函数,x*是实数,则牛顿法有明确的几何意义:过点(xn,(xn))作曲线y =(x)的切线T,将T与x轴的交点xn+1作为x*的新近似值.对于非线性方程组,x和 (x)分别为矢变量和矢量函数,【┡(x)】-1为(x)的雅可比矩阵的逆矩阵.由牛顿法构造的序列x1,x2,…收敛于x*的充分条件是:①在x*的邻域内┡(x)存在且满足李普希兹条件,即对x*邻域内的任意x┡、x″,有,式中0〈α〈1;②【┡(x*)】-1存在;③初始近似值x0充分接近x*.在上述条件下,x1,x2,…收敛于x*的速度不低于二阶.为了减弱收敛性对 的要求,提高收敛速度或减少计算量,牛顿法有许多变形,如修正牛顿法和拟牛顿法.
牛顿法求方程的近似根时,取不同的Xo对方称的解有什么影响?
天蓝空远1年前2
stephenlai 共回答了14个问题 | 采纳率78.6%
初值不同,收敛的速度也就不同,但是牛顿法效率比迭代法高得多.
用迭代法和牛顿法求解方程x=e^x在x=0.5附近的一个根,要求精确到小数点后三位
用迭代法和牛顿法求解方程x=e^x在x=0.5附近的一个根,要求精确到小数点后三位
此题的方程弄错啦:改为x=e^x-1.2在x=0.5附近的一个根
河名1年前2
zhangoooo 共回答了25个问题 | 采纳率92%
x=0.57224982960923
程序如下:
using System;
namespace Test
{
class Program
{
static void Main(string[] args)
{
double a =0.4;
double b =0.6;
double c = 0.0;
double d = 0.0;
while(true)
{
if (Function(a) * Function(b) < 0)
{
c = 0.5 * (a + b);
d = Function(c);
}
else
{
System.Console.WriteLine("请调整根区间……");
break;
}
if (d*Function(a) > 0)
{
a = c;
}
if (d* Function(b) > 0)
{
b = c;
}
if (Math.Abs(d)
如何用牛顿法求方程的根——编程.
如何用牛顿法求方程的根——编程.
方程是随便的方程,不知道是什么方程.牛顿法,切线法,迭代法都可以.
sun_mars1年前2
fffeona 共回答了18个问题 | 采纳率83.3%
先做简单的,建立一个函数 参数依次为 低次项0次项系数到高次
用牛顿法求3次根号下11,准确到四位有效数字
憨人aoao1年前2
天使-凌云 共回答了21个问题 | 采纳率81%
五文凭
C++二分法//(17)分别用牛顿法和二分法求方程2x3-4x2+3x-6=0在x=1.5附近的实数根,精度ε=10-5
C++二分法
//(17)分别用牛顿法和二分法求方程2x3-4x2+3x-6=0在x=1.5附近的实数根,精度ε=10-5
#include
#include
using namespace std;
double hs(double x)
{
double result;
result = 2 * x * x * x - 4 * x * x + 3 * x - 6;
return result;
}
int main()
{
double a,b,midx,midy;
double x1 = 1,x2 = 2.5;
do
{
a = hs(x1);
b = hs(x2);
midx = (x1 + x2) / 2;
midy = hs(midx);
if(midx > 0)
x2 = midx;
else
x1 = midx;
}while(fabs(midy) >= pow(10.,-5));
cout
oyime11141年前1
andylauf 共回答了18个问题 | 采纳率72.2%
do 循环里的代码有误
if(midx > 0)
应当改为:if(hs(midx) > 0)
另外main()的return;语句前加cin.get();加这一句的目的是让程序运行到这里的时候暂停.
用牛顿法计算根号a的Matlab 程序.急.
fwan02241年前1
因茵 共回答了21个问题 | 采纳率90.5%
function root=NewtonRoot(f,a,b,eps)
% 用牛顿法求方程的一个根
% 方程的表达式:f
% 区间的左端点:a
% 区间的右端点;b
% 根的精度:eps
% 求得的根:root
if(nargin==3)
eps=1.0e-4;
end
f1=subs(sym(f),findsym(sym(f)),a);
f2=subs(sym(f),findsym(sym(f)),b);
if(f1==0)
root=a;
end
if(f2==0)
root=b;
end
if(f1*f2>0)
disp('两端点函数值乘积大于0!');
return;
else
tol=1;
fun=diff(sym(f));
fa=subs(sym(f),findsym(sym(f)),a);
fb=subs(sym(f),findsym(sym(f)),b);
dfa=subs(sym(fun),findsym(sym(fun)),a);
dfb=subs(sym(fun),findsym(sym(fun)),b);
if(dfa>dfb)
root=a-fa/dfa;
else
root=b-fb/dfb;
end
while(tol>eps)
r1=root;
fx=subs(sym(f),findsym(sym(f)),r1);
dfx=subs(sym(fun),findsym(sym(fun)),r1);
root=r1-fx/dfx;
tol=abs(root-r1);
end
end
如求根号115的根,命令如下
root=NewtonRoot('x^2-115',10,12)
结果:root =
10.7238