牛顿法求解 matlab实现

牛顿法求解 matlab实现,第1张

首先,建立原函数的自定义函数文件

function y = fun(x)

y=x^4-3x^3+5cos(x)+8;

其次,建立导函数的自定义函数文件

function y = dfun(x)

y=4x^3-9x^2-5sin(x);

最后,用牛顿法求解

x0=1;tol=1e-6;x1=newton(x0,tol)

n =

   5

x1 =

  1787494463594194

验证:

x1 =    1787494463594194;x1^4-3x1^3+5cos(x1)+8

ans =

 -3552713678800501e-015   (=0)

Newton's method is the classic algorithm for finding roots of functions The breif introduction is written below

The analytic solution is

The code is

clear all

x    = zeros(1,2);

f    = zeros(1,2);

tol  = 1E-7;

invJ = zeros(2,2);

x(1) = 023;

x(2) = 069;

for n = 1:1:1E4

    f(1) = x(1)+854/x(2)-1;

    f(2) = x(1)-10/x(2);

    invJ(1,1) = 10/954;

    invJ(1,2) = 854/954;

    invJ(2,1) = -x(2)^2/954;

    invJ(2,2) = x(2)^2/954;

    xn  = x'-invJf';

    if (abs(x(1)-xn(1))/abs(xn(1)) < tol 

        && abs(x(2)-xn(2))/abs(xn(2)) < tol)

        

        fprintf('The maximum number of iterations is %d\n', n) 

        

        disp('The solution within tolerance 1E-7 is')

        disp(xn')

        

        return;

    end

    

    x   = xn';

        

end

disp('The solution did not converge to x-axis')

The generated result is

这是两部分代码:

function eq=exam1_5(x)

eq=(x^7+2x^5+3x^3+5x+7)/(7x^6+10x^4+9x^2+5);

这两行是函数部分,参数为x,返回值为eq。

下面的命令是在命令窗口输入的:

x0=01;

x1=x0-exam1_5(x0);

while abs(x1-x0)>00001

x0=x1;

x1=x0-exam1_5(x0);

end

运行之后,可以在workspace查看x0 x1的值,都为-08341

或则在命令窗口输入 x0 即可查看x0的值,输入 x1 即可查看x1的值。

希望采纳,设置为满意答案,谢谢。

这个牛顿法程序对吗?给你一个可用的:function main()

clc; clear all;

f = @(x)log(x+sin(x));

df = @(x)(1+cos(x))/(x+sin(x));

x0 = 01;

x = TestNewton(f, df, x0)function x = TestNewton(fname, dfname, x0, e, N)

% 用途:Newton迭代法解非线性方程f(x)=0

% fname和dfname分别表示f(x)及其导函数的M函数句柄或内嵌函数表达式

% x0为迭代初值,e为精度(默认值1e-7)

% x为返回数值解,并显示计算过程,设置迭代次数上限N以防发散(默认500次)if nargin < 5

N = 500;

end

if nargin < 4

e = 1e-7;

end

x = x0;

x0 = x+2e;

k = 0;

fprintf('x[%d]=%129f\n', k, x)

while abs(x0-x)>e && k<N

k = k+1;

x0 = x;

x = x0 - feval(fname,x0)/feval(dfname,x0);

fprintf('x[%d]=%129f\n', k, x)

end

if k == N

fprintf('已达到迭代次数上限');

end

结果:x[0]= 0100000000

x[1]= 0261295899

x[2]= 0434317505

x[3]= 0504499011

x[4]= 0510928606

x[5]= 0510973427

x[6]= 0510973429x = 05110>>

《应用最优化方法及MATLAB实现》系统讲述如何将最优化方法实现为应用软件。系统阐述了各种无约束和带约束优化问题的计算方法和程序实现,内容包括:精确/非精确一维搜索、最速下降法、牛顿/拟牛顿法、共轭梯度法、单纯形法、内点法、积极集法、序列二次规划方法等。书中包含了必要的最优化理论知识,为得到最优化方法并用程序实现做准备。书中给出的许多应用优化技术是我们的最新研究成果,给出的优化程序是以专业编程技巧实现的最优化算法。书中还给出了大量的例子和习题。《应用最优化方法及MATLAB实现》可作为高等院校自动化、控制、系统工程、工业工程、计算机、应用数学、经济、管理、化工、材料、机械、能源等相关专业学生的教材,也可作为有关研究人员和工程技术人员的参考书。

这样吧,你不要直接通过solve求解啊,可以画一个图像啊,以x的值为横坐标,行列式值为纵坐标,或者纵坐标取一下对数(如果变化范围太大),然后可以得出大致得到解的范围;最后可以通过其他方法计算更加精确的解。

希望能帮到你,我算程序就是这样实现的

用牛顿法可以求得函数f(x)=x^4-4x^3-6x^2-16x+4的最小值为-156。

牛顿法的迭代原理是  Xk+1=Xk-f(xk)/f'(xk)

基于matlab的牛顿法求解主要代码

x0=6; %初值

tol = 0001;%误差

x = newton(x0,tol);  %牛顿迭代法函数

y=fun(x);

str=['f(x)=x^4-4x^3-6x^2-16x+4的最小值 ',num2str(y)];

fprintf('%s\n',str);

str=['f(x)=x^4-4x^3-6x^2-16x+4的极值点,x=',num2str(x),';y=',num2str(y)];

fprintf('%s\n',str);

运行结果,极值点,x=4;y=-156,最小值  -156

自定义函数内容如下

x0,tol,N)%改了这里

%root是系统保留字。不推荐使用。可以用exist('root')命令测试

% Newton Method

% The first parameter f is a external function with respect to viable x

% The second parameter df is the first order diffential function of fx

% x0 is initial iteration point

% tol is the tolerance of the loop

% N is the maximum number of iterations

x=x0;

f0=eval(f);df0=eval(df);

n=0;

disp(' [ n xn xn 1 fn 1 ]');

while n<=N

x1=x0-f0/df0;

x=x1;

f1=eval(f);

以上就是关于牛顿法求解 matlab实现全部的内容,包括:牛顿法求解 matlab实现、牛顿法解非线性方程组的MATLAB程序、MATLAB中用牛顿法求解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9428076.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存